From a6132ce838b85f941be98fb1a061b6d82a653c11 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Tue, 28 Jul 2015 14:02:11 -0400 Subject: [PATCH] contrib/jwrapper: collect methods and constructors generic paramters MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- contrib/jwrapper/grammar/javap.sablecc | 4 ++-- contrib/jwrapper/src/javap_visitor.nit | 39 ++++++++++++++++++++++++++++++-- contrib/jwrapper/src/jwrapper.nit | 3 +++ contrib/jwrapper/src/model.nit | 6 +++++ 4 files changed, 48 insertions(+), 4 deletions(-) diff --git a/contrib/jwrapper/grammar/javap.sablecc b/contrib/jwrapper/grammar/javap.sablecc index dc46557..718a446 100644 --- a/contrib/jwrapper/grammar/javap.sablecc +++ b/contrib/jwrapper/grammar/javap.sablecc @@ -44,8 +44,8 @@ type_bound | {head:} full_class_name; generic_identifier - = full_class_name - | wildcard; + = {class:} full_class_name + | {wildcard:} wildcard; full_class_name = {tail:} full_class_name separator class_name diff --git a/contrib/jwrapper/src/javap_visitor.nit b/contrib/jwrapper/src/javap_visitor.nit index 269f125..899930d 100644 --- a/contrib/jwrapper/src/javap_visitor.nit +++ b/contrib/jwrapper/src/javap_visitor.nit @@ -87,6 +87,13 @@ redef class Nproperty_declaration_method 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_parameters.to_a + else generic_params = new Array[JavaType] + # Collect parameters var n_parameters = n_parameters var params @@ -94,7 +101,7 @@ redef class Nproperty_declaration_method params = n_parameters.to_a else params = new Array[JavaType] - var method = new JavaMethod(is_static, return_jtype, params) + var method = new JavaMethod(is_static, return_jtype, params, generic_params) v.java_class.methods[id].add method end end @@ -110,7 +117,14 @@ redef class Nproperty_declaration_constructor params = n_parameters.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_parameters.to_a + else generic_params = new Array[JavaType] + + var method = new JavaConstructor(params, generic_params) v.java_class.constructors.add method end end @@ -197,6 +211,27 @@ redef class Nbase_type_void end end +redef class Nbase_type_extends + redef fun to_java_type do return n_generic_identifier.to_java_type +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 diff --git a/contrib/jwrapper/src/jwrapper.nit b/contrib/jwrapper/src/jwrapper.nit index 06e8f44..0a84fa9 100644 --- a/contrib/jwrapper/src/jwrapper.nit +++ b/contrib/jwrapper/src/jwrapper.nit @@ -192,6 +192,9 @@ var visitor = new JavaVisitor(model) visitor.enter_visit root_node sys.perfs["core model"].add clock.lapse +model.resolve_types +sys.perfs["core resolve"].add clock.lapse + if opt_verbose.value > 0 then print "# Generating Nit code" var use_comment = opt_unknown.value == 0 diff --git a/contrib/jwrapper/src/model.nit b/contrib/jwrapper/src/model.nit index 25d9cd2..4a82064 100644 --- a/contrib/jwrapper/src/model.nit +++ b/contrib/jwrapper/src/model.nit @@ -263,6 +263,9 @@ class JavaMethod # Type of the arguments of the method var params: Array[JavaType] + + # Generic parameters of this method + var generic_params: Array[JavaType] end # An attribute in a Java class @@ -277,6 +280,9 @@ end class JavaConstructor # Type of the parameters of this constructor var params: Array[JavaType] + + # Generic parameters of this constructor + var generic_params: Array[JavaType] end # A Nit module, use to import the referenced extern classes -- 1.7.9.5