end
end
+ # Constructors
+ for constructor in jclass.constructors do
+ var complex = jclass.constructors.length != 1 and constructor.params.not_empty
+ var base_name = if complex then "from" else ""
+ var name = jclass.nit_name_for(base_name, constructor.params, complex)
+
+ generate_constructor(jclass, constructor, name)
+ end
+
# Attributes
for id, java_type in jclass.attributes do
generate_getter_setter(jclass, id, java_type)
"""
end
+
+ # Generate getter and setter to access an attribute, of field
+ private fun generate_constructor(java_class: JavaClass, constructor: JavaConstructor, name: String)
+ do
+ var c = ""
+ var nit_params_s = ""
+ var java_params_s = ""
+
+ if constructor.params.not_empty then
+ var nit_params = new Array[String]
+ var java_params = new Array[String]
+ var param_id = 'a'
+ for java_type in constructor.params do
+
+ java_params.add "{java_type.param_cast}{param_id}"
+
+ var nit_type = model.java_to_nit_type(java_type)
+ nit_params.add "{param_id}: {nit_type}"
+ param_id = param_id.successor(1)
+
+ if not nit_type.is_known then c = "#"
+ end
+
+ nit_params_s = "(" + nit_params.join(", ") + ")"
+ java_params_s = java_params.join(", ")
+ end
+
+ file_out.write """
+ # Java constructor: {{{java_class}}}
+{{{c}}} new {{{name}}}{{{nit_params_s}}} in "Java" `{
+{{{c}}} return new {{{java_class}}}({{{java_params_s}}});
+{{{c}}} `}
+
+"""
+ end
end
redef class Sys
redef class Nproperty_declaration_constructor
redef fun accept_visitor(v)
do
- # TODO
+ # Collect parameters
+ var n_parameters = n_parameters
+ var params
+ if n_parameters != null then
+ params = n_parameters.to_a
+ else params = new Array[JavaType]
+
+ var method = new JavaConstructor(params)
+ v.java_class.constructors.add method
end
end
# Methods of this class organized by their name
var methods = new MultiHashMap[String, JavaMethod]
+ # Constructors of this class
+ var constructors = new Array[JavaConstructor]
+
# Importations from this class
var imports = new HashSet[NitModule]
var params: Array[JavaType]
end
+# A Java method, with its signature
+class JavaConstructor
+ # Type of the parameters of this constructor
+ var params: Array[JavaType]
+end
+
# A Nit module, use to import the referenced extern classes
class NitModule
# Relative path to the module