contrib/jwrapper: remove NitType::arg_id it was unused, only set
[nit.git] / contrib / jwrapper / src / model.nit
index d38a7a1..b792111 100644 (file)
@@ -1,6 +1,7 @@
 # This file is part of NIT (http://www.nitlanguage.org).
 #
 # Copyright 2014 Frédéric Vachon <fredvac@gmail.com>
+# Copyright 2015 Alexis Laferrière <alexis.laf@xymus.net>
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # Contains the java and nit type representation used to convert java to nit code
 module model
 
+import more_collections
+
 import jtype_converter
 
 class JavaType
-       private var converter: JavaTypeConverter
        var identifier = new Array[String]
        var generic_params: nullable Array[JavaType] = null
        var is_void = false
@@ -37,8 +39,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
@@ -81,8 +81,6 @@ class JavaType
                return nit_type
        end
 
-       fun is_iterable: Bool do return iterable.has(self.id)
-
        fun is_collection: Bool do return is_primitive_array or collections_list.has(self.id)
 
        fun is_wrapped: Bool do return find_extern_class != null
@@ -94,11 +92,13 @@ class JavaType
                var name
                if is_primitive_array then
                        # Primitive arrays have a special naming convention
-                       name = "Native" + extern_class_name.join("").capitalized + "Array"
+                       name = "Java" + extern_class_name.join.capitalized + "Array"
                else
-                       name = "Native" + extern_class_name.join("")
+                       name = "Java" + extern_class_name.join
                end
 
+               name = name.replace("-", "_")
+
                var nit_type = new NitType(name)
                nit_type.is_complete = false
                return nit_type
@@ -113,22 +113,15 @@ class JavaType
                return converter.cast_as_return(jtype)
        end
 
-       redef fun to_s: String
+       redef fun to_s
        do
                var id = self.full_id
 
                if self.is_primitive_array then
-                       for i in [0..array_dimension[ do
-                               id += "[]"
-                       end
+                       id += "[]" * array_dimension
                else 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(", ")}>"
+                       var params = [for param in generic_params do param.to_s]
+                       id += "<{params.join(", ")}>"
                end
 
                return id
@@ -176,6 +169,8 @@ class JavaType
 
                var regex = "extern class [a-zA-Z1-9]\\\+[ ]\\\+in[ ]\\\+\"Java\"[ ]*`\{[ ]*" + self.to_s + "\\\+[ ]*`\}"
                var nit_dir = "NIT_DIR".environ
+               if nit_dir.is_empty then return null
+
                var grep = new ProcessReader("grep", "-r", regex, nit_dir/"lib/android/", nit_dir/"lib/java/")
                var to_eat = ["private", "extern", "class"]
 
@@ -237,7 +232,6 @@ end
 
 class NitType
        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
@@ -286,22 +280,30 @@ class NitType
        end
 end
 
+# Model of a single Java class
 class JavaClass
-       var class_type = new JavaType(new JavaTypeConverter)
+       # Type of this class
+       var class_type = new JavaType
+
+       # Attributes of this class
        var attributes = new HashMap[String, JavaType]
 
        # Methods of this class organized by their name
-       var methods = new HashMap[String, Array[JavaMethod]]
+       var methods = new MultiHashMap[String, JavaMethod]
 
-       var unknown_types = new HashSet[JavaType]
+       # Importations from this class
        var imports = new HashSet[NitModule]
 
-       fun add_method(id: String, return_type: JavaType, params: Array[JavaType])
-       do
-               var signatures = methods.get_or_default(id, new Array[JavaMethod])
-               signatures.add(new JavaMethod(return_type, new Array[JavaType].from(params)))
-               methods[id] = signatures
-       end
+       redef fun to_s do return class_type.to_s
+end
+
+# Model of all the Java class analyzed in one run
+class JavaModel
+       # Unknown Java types used in `classes`
+       var unknown_types = new HashSet[JavaType]
+
+       # All analyzed classes
+       var classes = new Array[JavaClass]
 end
 
 # A Java method, with its signature