068a3304fe41080d0c6c39415e29ed574ac95783
1 # This file is part of NIT (http://www.nitlanguage.org).
3 # Copyright 2014 Frédéric Vachon <fredvac@gmail.com>
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
17 # Contains the java and nit type representation used to convert java to nit code
20 import jtype_converter
23 private var converter
= new JavaTypeConverter
24 var identifier
: Array[String] = new Array[String]
25 var generic_params
: nullable Array[JavaType] = null
27 var array_dimension
= 0
29 fun collections_list
: Array[String] is cached
do return ["List", "ArrayList", "LinkedList", "Vector", "Set", "SortedSet", "HashSet", "TreeSet", "LinkedHashSet", "Map", "SortedMap", "HashMap", "TreeMap", "Hashtable", "LinkedHashMap"]
30 fun iterable
: Array[String] is cached
do return ["ArrayList", "Set", "HashSet", "LinkedHashSet", "LinkedList", "Stack", "TreeSet", "Vector"]
31 fun maps
: Array[String] is cached
do return ["Map", "SortedMap", "HashMap", "TreeMap", "Hashtable", "LinkedHashMap"]
32 fun has_generic_params
: Bool do return not generic_params
== null
33 fun is_primitive_array
: Bool do return array_dimension
> 0
34 fun full_id
: String do return identifier
.join
(".")
35 fun id
: String do return identifier
.last
37 fun return_cast
: String
39 if self.has_generic_params
then
40 return converter
.cast_as_return
(self.generic_params
[0].id
)
43 return converter
.cast_as_return
(self.id
)
46 fun param_cast
: String
48 if self.has_generic_params
then
49 return converter
.cast_as_param
(self.generic_params
[0].id
)
52 return converter
.cast_as_param
(self.id
)
55 fun to_nit_type
: NitType
59 if self.is_primitive_array
then
60 return self.convert_primitive_array
63 var type_id
= converter
.to_nit_type
(self.id
)
65 if type_id
== null then
66 nit_type
= new NitType(self.full_id
)
67 nit_type
.is_complete
= false
69 nit_type
= new NitType(type_id
)
72 if not self.has_generic_params
then return nit_type
74 nit_type
.generic_params
= new Array[NitType]
76 for param
in generic_params
do
77 var nit_param
= param
.to_nit_type
79 nit_type
.generic_params
.add
(nit_param
)
81 if not nit_param
.is_complete
then nit_type
.is_complete
= false
87 fun convert_primitive_array
: NitType
89 var nit_type
= new NitType("Array")
91 var last_nit_type
= nit_type
93 for i
in [1..array_dimension
] do
95 last_nit_type
.generic_params
= new Array[NitType]
97 if i
== array_dimension
then
98 var temp_type
= converter
.to_nit_type
(self.id
)
100 if temp_type
== null then
101 temp_type
= self.full_id
102 nit_type
.is_complete
= false
105 temp
= new NitType(temp_type
)
107 temp
= new NitType("Array")
110 last_nit_type
.generic_params
.add
(temp
)
118 fun is_iterable
: Bool do return iterable
.has
(self.id
)
120 fun is_collection
: Bool do return is_primitive_array
or collections_list
.has
(self.id
)
122 fun is_map
: Bool do return maps
.has
(self.id
)
124 redef fun to_s
: String
126 var id
= self.full_id
128 if self.is_primitive_array
then
129 for i
in [0..array_dimension
[ do
132 else if self.has_generic_params
then
133 var gen_list
= new Array[String]
135 for param
in generic_params
do
136 gen_list
.add
(param
.to_s
)
139 id
+= "<{gen_list.join(", ")}>"
145 fun to_cast
(jtype
: String, is_param
: Bool): String
148 return converter
.cast_as_param
(jtype
)
151 return converter
.cast_as_return
(jtype
)
156 var identifier
: String
158 var generic_params
: nullable Array[NitType] = null
160 # Returns `true` if all types have been successfully converted to Nit type
161 var is_complete
: Bool = true
163 fun has_generic_params
: Bool do return not generic_params
== null
164 fun maps
: Array[String] is cached
do return ["HashMap", "RBTreeMap"]
166 fun id
: String do return identifier
173 fun is_map
: Bool do return maps
.has
(self.identifier
)
175 redef fun to_s
: String
177 var id
= self.identifier
179 if self.has_generic_params
then
180 var gen_list
= new Array[String]
182 for param
in generic_params
do
183 gen_list
.add
(param
.to_s
)
186 id
+= "[{gen_list.join(", ")}]"