contrib/jwrapper: reorganize and document the different names of a JavaType
authorAlexis Laferrière <alexis.laf@xymus.net>
Tue, 28 Jul 2015 13:45:28 +0000 (09:45 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Wed, 29 Jul 2015 19:08:57 +0000 (15:08 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

contrib/jwrapper/src/code_generator.nit
contrib/jwrapper/src/model.nit

index cba7c49..dfa5cab 100644 (file)
@@ -147,8 +147,8 @@ class CodeGenerator
        private fun generate_class_header(jtype: JavaType)
        do
                var nit_type = model.java_to_nit_type(jtype)
-               file_out.write "# Java class: {jtype.to_package_name}\n"
-               file_out.write "extern class {nit_type} in \"Java\" `\{ {jtype.to_package_name} `\}\n"
+               file_out.write "# Java class: {jtype}\n"
+               file_out.write "extern class {nit_type} in \"Java\" `\{ {jtype.extern_equivalent} `\}\n"
                file_out.write "\tsuper JavaObject\n\n"
        end
 
@@ -156,7 +156,7 @@ class CodeGenerator
        do
                var nit_type = jtype.extern_name
 
-               file_out.write "extern class {nit_type} in \"Java\" `\{ {jtype.to_package_name} `\}\n"
+               file_out.write "extern class {nit_type} in \"Java\" `\{ {jtype.extern_equivalent} `\}\n"
                file_out.write "\tsuper JavaObject\n\nend\n"
        end
 
@@ -203,7 +203,7 @@ class CodeGenerator
                # Build the call in Java
                var java_call
                if is_static == true then
-                       java_call = java_class.class_type.to_package_name
+                       java_call = java_class.class_type.package_name
                else java_call = "self"
                java_call += ".{java_method_id}({java_args.join(", ")})"
 
@@ -239,8 +239,8 @@ class CodeGenerator
                if not nit_type.is_known and comment_unknown_types then c = "#"
 
                var recv
-               if attribute.is_static == true then
-                       recv = java_class.class_type.to_package_name
+               if attribute.is_static then
+                       recv = java_class.class_type.package_name
                else recv = "self"
 
                # Tabulation
index 21f6c63..c9d0af6 100644 (file)
@@ -26,7 +26,12 @@ import jtype_converter
 class JavaType
        super Cloneable
 
+       # Identifiers composing the namespace and class name
+       #
+       # An array of all the names that would be separated by `.`.
+       # Each name may contain `$`.
        var identifier = new Array[String]
+
        var generic_params: nullable Array[JavaType] = null
 
        # Is this a void return type?
@@ -44,8 +49,6 @@ class JavaType
        fun is_primitive_array: Bool do return array_dimension > 0
 
        fun has_generic_params: Bool do return not generic_params == null
-       fun full_id: String do return identifier.join(".")
-       fun id: String do return identifier.last.replace("$", "")
 
        fun return_cast: String do return converter.cast_as_return(self.id)
 
@@ -91,9 +94,18 @@ class JavaType
                return name
        end
 
-       redef fun to_s
-       do
-               var id = self.full_id
+       # Short name of the class, mangled to remove `$` (e.g. `Set`)
+       fun id: String do return identifier.last.replace("$", "")
+
+       # Full name of this class as used in an importation (e.g. `java.lang.Set`)
+       fun package_name: String do return identifier.join(".")
+
+       # Name of this class for the extern declaration in Nit (e.g. `java.lang.Set[]`)
+       fun extern_equivalent: String do return package_name + "[]" * array_dimension
+
+       # Full name of this class with arrays and generic values (e.g. `java.lang.Set<E>[]`)
+       redef fun to_s do
+               var id = self.package_name
 
                if self.is_primitive_array then
                        id += "[]" * array_dimension
@@ -105,16 +117,6 @@ class JavaType
                return id
        end
 
-       # To fully qualified package name
-       # Cuts the primitive array `[]`
-       fun to_package_name: String
-       do
-               var str = self.to_s
-               var len = str.length
-
-               return str.substring(0, len - (2*array_dimension))
-       end
-
        fun resolve_types(conversion_map: HashMap[String, Array[String]])
        do
                if identifier.length == 1 then
@@ -141,10 +143,10 @@ class JavaType
 
        # Comparison based on fully qualified named
        redef fun ==(other) do return other isa JavaType and
-               self.full_id == other.full_id and
+               self.package_name == other.package_name and
                self.is_primitive_array == other.is_primitive_array
 
-       redef fun hash do return self.full_id.hash
+       redef fun hash do return self.package_name.hash
 end
 
 class NitType
@@ -189,7 +191,7 @@ class JavaModel
        # Add a class in `classes`
        fun add_class(jclass: JavaClass)
        do
-               var key = jclass.class_type.full_id
+               var key = jclass.class_type.package_name
                classes[key] = jclass
        end
 
@@ -221,7 +223,7 @@ class JavaModel
                end
 
                # Is being wrapped in this pass?
-               var key = jtype.full_id
+               var key = jtype.package_name
                if classes.keys.has(key) then
                        if jtype.array_dimension <= opt_arrays.value then
                                var nit_type = new NitType(jtype.extern_name)
@@ -231,7 +233,7 @@ class JavaModel
                end
 
                # Search in lib
-               var nit_type = find_extern_class[jtype.full_id]
+               var nit_type = find_extern_class[jtype.extern_equivalent]
                if nit_type != null then
                        known_types[jtype] = nit_type
                        return nit_type
@@ -293,7 +295,7 @@ end
 redef class Sys
        # Collection of Java classes already wrapped in the library
        #
-       # * The key is from `JavaType.full_id`.
+       # * The key uses `JavaType.to_s`.
        # * The value is the corresponding `NitType`.
        var find_extern_class: DefaultMap[String, nullable NitType] is lazy do
                var map = new DefaultMap[String, nullable NitType](null)