redef class Nextends_declaration
redef fun accept_visitor(v)
do
- # TODO
+ v.java_class.extends.add_all n_types.to_a
end
end
redef class Nimplements_declaration
redef fun accept_visitor(v)
do
- # TODO
+ v.java_class.implements.add_all n_types.to_a
end
end
redef class Nproperty_declaration_method
redef fun accept_visitor(v)
do
+ var is_static = false
+ var modifiers = n_modifier
+ if modifiers != null then is_static = modifiers.has_static
+
var id = n_identifier.text
var return_jtype = n_type.to_java_type
+ # Generic parameters
+ var n_params = n_generic_parameters
+ var generic_params
+ if n_params != null then
+ generic_params = n_params.n_types.to_a
+ else generic_params = new Array[JavaType]
+
# Collect parameters
- var n_parameters = n_parameters
+ var n_types = n_types
var params
- if n_parameters != null then
- params = n_parameters.to_a
+ if n_types != null then
+ params = n_types.to_a
else params = new Array[JavaType]
- var method = new JavaMethod(return_jtype, params)
+ var method = new JavaMethod(is_static, return_jtype, params, generic_params)
v.java_class.methods[id].add method
end
end
redef fun accept_visitor(v)
do
# Collect parameters
- var n_parameters = n_parameters
+ var n_types = n_types
var params
- if n_parameters != null then
- params = n_parameters.to_a
+ if n_types != null then
+ params = n_types.to_a
else params = new Array[JavaType]
- var method = new JavaConstructor(params)
+ # Generic parameters
+ var n_params = n_generic_parameters
+ var generic_params
+ if n_params != null then
+ generic_params = n_params.n_types.to_a
+ else generic_params = new Array[JavaType]
+
+ var method = new JavaConstructor(params, generic_params)
v.java_class.constructors.add method
end
end
var brackets = n_brackets
if brackets != null then jtype.array_dimension += brackets.children.length
- v.java_class.attributes[id] = jtype
+ var is_static = false
+ var modifiers = n_modifier
+ if modifiers != null then is_static = modifiers.has_static
+
+ v.java_class.attributes[id] = new JavaAttribute(is_static, jtype)
end
end
var brackets = n_brackets
if brackets != null then jtype.array_dimension += brackets.children.length
+ var dots = n_dots
+ if dots != null then jtype.is_vararg = true
+
return jtype
end
end
private fun to_java_type: JavaType
do
# By default, everything is bound by object
- # TODO use a more precise bound
var jtype = new JavaType
jtype.identifier.add_all(["java", "lang", "object"])
return jtype
end
end
+redef class Nbase_type_extends
+ redef fun to_java_type do return n_generic_identifier.to_java_type
+end
+
+redef class Nbase_type_super
+ redef fun to_java_type
+ do
+ var bounds = n_type_bound.to_a
+
+ # Java use more than one lower bound,
+ # it can't be translated statically to Nit,
+ # so we use the only the first one.
+ # This may cause problems on complex generic types,
+ # but these cases can be handled manually.
+ return bounds.first
+ end
+end
+
+redef class Ngeneric_identifier
+ private fun to_java_type: JavaType is abstract
+end
+
+redef class Ngeneric_identifier_class
+ redef fun to_java_type do return n_full_class_name.to_java_type
+end
+
+redef class Ngeneric_identifier_wildcard
+ redef fun to_java_type
+ do
+ var jtype = new JavaType
+ jtype.identifier.add_all(["java", "lang", "Object"])
+ return jtype
+ end
+end
+
redef class Nfull_class_name
# All the identifiers composing this class name
private fun to_a: Array[String] is abstract
# Generic parameters
var n_params = n_class_name_common.n_generic_parameters
- if n_params != null then jtype.generic_params = n_params.n_parameters.to_a
+ if n_params != null then jtype.generic_params = n_params.n_types.to_a
return jtype
end
end
end
-redef class Nparameters
+redef class Ntypes
# Get the types composing this list of parameters
#
# This is used both on methods signatures and type parameters.
private fun to_a: Array[JavaType] is abstract
end
-redef class Nparameters_head
- redef fun to_a do return [n_parameter.to_java_type]
+redef class Ntypes_head
+ redef fun to_a do return [n_type.to_java_type]
end
-redef class Nparameters_tail
+redef class Ntypes_tail
redef fun to_a
do
- var a = n_parameters.to_a
- a.add n_parameter.to_java_type
+ var a = n_types.to_a
+ a.add n_type.to_java_type
return a
end
end
-redef class Nparameter
- private fun to_java_type: JavaType
+redef class Nodes
+ private fun has_static: Bool
do
- var jtype = n_type.to_java_type
+ for modifier in depth do
+ if modifier isa NToken and modifier.text == "static" then return true
+ end
- var dots = n_dots
- if dots != null then jtype.is_vararg = true
+ return false
+ end
+end
- return jtype
+redef class Ntype_bound
+ # Get the types composing this bound
+ private fun to_a: Array[JavaType] is abstract
+end
+
+redef class Ntype_bound_head
+ redef fun to_a do return [n_full_class_name.to_java_type]
+end
+
+redef class Ntype_bound_tail
+ redef fun to_a
+ do
+ var a = n_type_bound.to_a
+ a.add n_full_class_name.to_java_type
+ return a
end
end