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
var n_params = n_generic_parameters
var generic_params
if n_params != null then
- generic_params = n_params.n_parameters.to_a
+ 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(is_static, return_jtype, params, generic_params)
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]
# Generic parameters
var n_params = n_generic_parameters
var generic_params
if n_params != null then
- generic_params = n_params.n_parameters.to_a
+ generic_params = n_params.n_types.to_a
else generic_params = new Array[JavaType]
var method = new JavaConstructor(params, generic_params)
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
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
# 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
- do
- var jtype = n_type.to_java_type
-
- var dots = n_dots
- if dots != null then jtype.is_vararg = true
-
- return jtype
- end
-end
-
redef class Nodes
private fun has_static: Bool
do
return false
end
end
+
+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