contrib/jwrapper: `JavaModel::classes` sort keys by string
[nit.git] / contrib / jwrapper / src / model.nit
index b776186..1aebcf2 100644 (file)
@@ -23,11 +23,15 @@ import more_collections
 import jtype_converter
 
 class JavaType
-       private var converter: JavaTypeConverter
        var identifier = new Array[String]
        var generic_params: nullable Array[JavaType] = null
+
+       # Is this a void return type?
        var is_void = false
 
+       # Is this type a vararg?
+       var is_vararg = false is writable
+
        # Has some generic type to be resolved (T extends foo => T is resolved to foo)
        var has_unresolved_types = false
 
@@ -40,8 +44,6 @@ class JavaType
        fun full_id: String do return identifier.join(".")
        fun id: String do return identifier.last.replace("$", "")
 
-       init(converter: JavaTypeConverter) do self.converter = converter
-
        fun return_cast: String do return converter.cast_as_return(self.id)
 
        fun param_cast: String
@@ -69,18 +71,6 @@ class JavaType
                        nit_type = new NitType(type_id)
                end
 
-               if not self.has_generic_params then return nit_type
-
-               nit_type.generic_params = new Array[NitType]
-
-               for param in generic_params do
-                       var nit_param = param.to_nit_type
-
-                       nit_type.generic_params.add(nit_param)
-
-                       if not nit_param.is_complete then nit_type.is_complete = false
-               end
-
                return nit_type
        end
 
@@ -90,7 +80,7 @@ class JavaType
 
        fun extern_name: NitType
        do
-               if is_wrapped then return new NitType.with_module(find_extern_class.as(not null).first, find_extern_class.as(not null).second)
+               if is_wrapped then return new NitType(find_extern_class.as(not null).first, find_extern_class.as(not null).second)
 
                var name
                if is_primitive_array then
@@ -201,32 +191,9 @@ class JavaType
 
        # Comparison based on fully qualified named and generic params
        # Ignores primitive array so `a.b.c[][] == a.b.c`
-       redef fun ==(other)
-       do
-               if other isa JavaType then
-                       return self.repr == other.repr
-               end
-               return false
-       end
+       redef fun ==(other) do return other isa JavaType and self.full_id == other.full_id
 
-       redef fun hash do return self.repr.hash
-
-       private fun repr: String
-       do
-               var id = self.full_id
-
-               if self.has_generic_params then
-                       var gen_list = new Array[String]
-
-                       for param in generic_params do
-                               gen_list.add(param.to_s)
-                       end
-
-                       id += "<{gen_list.join(", ")}>"
-               end
-
-               return id
-       end
+       redef fun hash do return self.full_id.hash
 
        var collections_list: Array[String] is lazy do return ["List", "ArrayList", "LinkedList", "Vector", "Set", "SortedSet", "HashSet", "TreeSet", "LinkedHashSet", "Map", "SortedMap", "HashMap", "TreeMap", "Hashtable", "LinkedHashMap"]
        var iterable: Array[String] is lazy do return ["ArrayList", "Set", "HashSet", "LinkedHashSet", "LinkedList", "Stack", "TreeSet", "Vector"]
@@ -234,9 +201,8 @@ class JavaType
 end
 
 class NitType
+       # Nit class name
        var identifier: String
-       var arg_id: String
-       var generic_params: nullable Array[NitType] = null
 
        # If this NitType was found in `lib/android`, contains the module name to import
        var mod: nullable NitModule
@@ -244,50 +210,13 @@ class NitType
        # Returns `true` if all types have been successfully converted to Nit type
        var is_complete: Bool = true
 
-       fun has_generic_params: Bool do return not generic_params == null
-
-       fun id: String do return identifier
-
-       init (id: String)
-       do
-               self.identifier = id
-       end
-
-       init with_generic_params(id: String, gen_params: String...)
-       do
-               self.init(id)
-               self.generic_params = new Array[NitType]
-               for param in gen_params do self.generic_params.add new NitType(param)
-       end
-
-       init with_module(id: String, mod: NitModule)
-       do
-               self.init(id)
-               self.mod = mod
-       end
-
-       redef fun to_s: String
-       do
-               var id = self.identifier
-
-               if self.has_generic_params then
-                       var gen_list = new Array[String]
-
-                       for param in generic_params do
-                               gen_list.add(param.to_s)
-                       end
-
-                       id += "[{gen_list.join(", ")}]"
-               end
-
-               return id
-       end
+       redef fun to_s do return identifier
 end
 
 # Model of a single Java class
 class JavaClass
        # Type of this class
-       var class_type = new JavaType(new JavaTypeConverter)
+       var class_type: JavaType
 
        # Attributes of this class
        var attributes = new HashMap[String, JavaType]
@@ -297,6 +226,8 @@ class JavaClass
 
        # Importations from this class
        var imports = new HashSet[NitModule]
+
+       redef fun to_s do return class_type.to_s
 end
 
 # Model of all the Java class analyzed in one run
@@ -305,7 +236,14 @@ class JavaModel
        var unknown_types = new HashSet[JavaType]
 
        # All analyzed classes
-       var classes = new Array[JavaClass]
+       var classes = new HashMap[String, JavaClass]
+
+       # Add a class in `classes`
+       fun add_class(jclass: JavaClass)
+       do
+               var key = jclass.class_type.full_id
+               classes[key] = jclass
+       end
 end
 
 # A Java method, with its signature