OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // This code was auto-generated, is not intended to be edited, and is subject to | 5 // This code was auto-generated, is not intended to be edited, and is subject to |
6 // significant change. Please see the README file for more information. | 6 // significant change. Please see the README file for more information. |
7 | 7 |
8 library engine.element_test; | 8 library engine.element_test; |
9 | 9 |
10 import 'package:analyzer/src/generated/java_core.dart'; | 10 import 'package:analyzer/src/generated/java_core.dart'; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 | 48 |
49 void test_TWO_WAY() { | 49 void test_TWO_WAY() { |
50 AngularPropertyKind kind = AngularPropertyKind.TWO_WAY; | 50 AngularPropertyKind kind = AngularPropertyKind.TWO_WAY; |
51 expect(kind.callsGetter(), isTrue); | 51 expect(kind.callsGetter(), isTrue); |
52 expect(kind.callsSetter(), isTrue); | 52 expect(kind.callsSetter(), isTrue); |
53 } | 53 } |
54 } | 54 } |
55 | 55 |
56 class ClassElementImplTest extends EngineTestCase { | 56 class ClassElementImplTest extends EngineTestCase { |
57 void test_getAllSupertypes_interface() { | 57 void test_getAllSupertypes_interface() { |
58 ClassElement classA = ElementFactory.classElement2("A", []); | 58 ClassElement classA = ElementFactory.classElement2("A"); |
59 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 59 ClassElement classB = ElementFactory.classElement("B", classA.type); |
60 ClassElementImpl elementC = ElementFactory.classElement2("C", []); | 60 ClassElementImpl elementC = ElementFactory.classElement2("C"); |
61 InterfaceType typeObject = classA.supertype; | 61 InterfaceType typeObject = classA.supertype; |
62 InterfaceType typeA = classA.type; | 62 InterfaceType typeA = classA.type; |
63 InterfaceType typeB = classB.type; | 63 InterfaceType typeB = classB.type; |
64 InterfaceType typeC = elementC.type; | 64 InterfaceType typeC = elementC.type; |
65 elementC.interfaces = <InterfaceType> [typeB]; | 65 elementC.interfaces = <InterfaceType> [typeB]; |
66 List<InterfaceType> supers = elementC.allSupertypes; | 66 List<InterfaceType> supers = elementC.allSupertypes; |
67 List<InterfaceType> types = new List<InterfaceType>(); | 67 List<InterfaceType> types = new List<InterfaceType>(); |
68 types.addAll(supers); | 68 types.addAll(supers); |
69 expect(types.contains(typeA), isTrue); | 69 expect(types.contains(typeA), isTrue); |
70 expect(types.contains(typeB), isTrue); | 70 expect(types.contains(typeB), isTrue); |
71 expect(types.contains(typeObject), isTrue); | 71 expect(types.contains(typeObject), isTrue); |
72 expect(types.contains(typeC), isFalse); | 72 expect(types.contains(typeC), isFalse); |
73 } | 73 } |
74 | 74 |
75 void test_getAllSupertypes_mixins() { | 75 void test_getAllSupertypes_mixins() { |
76 ClassElement classA = ElementFactory.classElement2("A", []); | 76 ClassElement classA = ElementFactory.classElement2("A"); |
77 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 77 ClassElement classB = ElementFactory.classElement("B", classA.type); |
78 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 78 ClassElementImpl classC = ElementFactory.classElement2("C"); |
79 InterfaceType typeObject = classA.supertype; | 79 InterfaceType typeObject = classA.supertype; |
80 InterfaceType typeA = classA.type; | 80 InterfaceType typeA = classA.type; |
81 InterfaceType typeB = classB.type; | 81 InterfaceType typeB = classB.type; |
82 InterfaceType typeC = classC.type; | 82 InterfaceType typeC = classC.type; |
83 classC.mixins = <InterfaceType> [typeB]; | 83 classC.mixins = <InterfaceType> [typeB]; |
84 List<InterfaceType> supers = classC.allSupertypes; | 84 List<InterfaceType> supers = classC.allSupertypes; |
85 List<InterfaceType> types = new List<InterfaceType>(); | 85 List<InterfaceType> types = new List<InterfaceType>(); |
86 types.addAll(supers); | 86 types.addAll(supers); |
87 expect(types.contains(typeA), isFalse); | 87 expect(types.contains(typeA), isFalse); |
88 expect(types.contains(typeB), isTrue); | 88 expect(types.contains(typeB), isTrue); |
89 expect(types.contains(typeObject), isTrue); | 89 expect(types.contains(typeObject), isTrue); |
90 expect(types.contains(typeC), isFalse); | 90 expect(types.contains(typeC), isFalse); |
91 } | 91 } |
92 | 92 |
93 void test_getAllSupertypes_recursive() { | 93 void test_getAllSupertypes_recursive() { |
94 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 94 ClassElementImpl classA = ElementFactory.classElement2("A"); |
95 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 95 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
96 classA.supertype = classB.type; | 96 classA.supertype = classB.type; |
97 List<InterfaceType> supers = classB.allSupertypes; | 97 List<InterfaceType> supers = classB.allSupertypes; |
98 expect(supers, hasLength(1)); | 98 expect(supers, hasLength(1)); |
99 } | 99 } |
100 | 100 |
101 void test_getField() { | 101 void test_getField() { |
102 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 102 ClassElementImpl classA = ElementFactory.classElement2("A"); |
103 String fieldName = "f"; | 103 String fieldName = "f"; |
104 FieldElementImpl field = ElementFactory.fieldElement(fieldName, false, false
, false, null); | 104 FieldElementImpl field = ElementFactory.fieldElement(fieldName, false, false
, false, null); |
105 classA.fields = <FieldElement> [field]; | 105 classA.fields = <FieldElement> [field]; |
106 expect(classA.getField(fieldName), same(field)); | 106 expect(classA.getField(fieldName), same(field)); |
107 // no such field | 107 // no such field |
108 expect(classA.getField("noSuchField"), same(null)); | 108 expect(classA.getField("noSuchField"), same(null)); |
109 } | 109 } |
110 | 110 |
111 void test_getMethod_declared() { | 111 void test_getMethod_declared() { |
112 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 112 ClassElementImpl classA = ElementFactory.classElement2("A"); |
113 String methodName = "m"; | 113 String methodName = "m"; |
114 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 114 MethodElement method = ElementFactory.methodElement(methodName, null); |
115 classA.methods = <MethodElement> [method]; | 115 classA.methods = <MethodElement> [method]; |
116 expect(classA.getMethod(methodName), same(method)); | 116 expect(classA.getMethod(methodName), same(method)); |
117 } | 117 } |
118 | 118 |
119 void test_getMethod_undeclared() { | 119 void test_getMethod_undeclared() { |
120 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 120 ClassElementImpl classA = ElementFactory.classElement2("A"); |
121 String methodName = "m"; | 121 String methodName = "m"; |
122 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 122 MethodElement method = ElementFactory.methodElement(methodName, null); |
123 classA.methods = <MethodElement> [method]; | 123 classA.methods = <MethodElement> [method]; |
124 expect(classA.getMethod("${methodName}x"), isNull); | 124 expect(classA.getMethod("${methodName}x"), isNull); |
125 } | 125 } |
126 | 126 |
127 void test_getNode() { | 127 void test_getNode() { |
128 AnalysisContextHelper contextHelper = new AnalysisContextHelper(); | 128 AnalysisContextHelper contextHelper = new AnalysisContextHelper(); |
129 AnalysisContext context = contextHelper.context; | 129 AnalysisContext context = contextHelper.context; |
130 Source source = contextHelper.addSource("/test.dart", r''' | 130 Source source = contextHelper.addSource("/test.dart", r''' |
131 class A {} | 131 class A {} |
132 class B {}'''); | 132 class B {}'''); |
(...skipping 12 matching lines...) Expand all Loading... |
145 { | 145 { |
146 ClassElement elementB = unitElement.getType("B"); | 146 ClassElement elementB = unitElement.getType("B"); |
147 ClassDeclaration nodeB = elementB.node; | 147 ClassDeclaration nodeB = elementB.node; |
148 expect(nodeB, isNotNull); | 148 expect(nodeB, isNotNull); |
149 expect(nodeB.name.name, "B"); | 149 expect(nodeB.name.name, "B"); |
150 expect(nodeB.element, same(elementB)); | 150 expect(nodeB.element, same(elementB)); |
151 } | 151 } |
152 } | 152 } |
153 | 153 |
154 void test_hasNonFinalField_false_const() { | 154 void test_hasNonFinalField_false_const() { |
155 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 155 ClassElementImpl classA = ElementFactory.classElement2("A"); |
156 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, true, classA.type)]; | 156 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, true, classA.type)]; |
157 expect(classA.hasNonFinalField, isFalse); | 157 expect(classA.hasNonFinalField, isFalse); |
158 } | 158 } |
159 | 159 |
160 void test_hasNonFinalField_false_final() { | 160 void test_hasNonFinalField_false_final() { |
161 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 161 ClassElementImpl classA = ElementFactory.classElement2("A"); |
162 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, true
, false, classA.type)]; | 162 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, true
, false, classA.type)]; |
163 expect(classA.hasNonFinalField, isFalse); | 163 expect(classA.hasNonFinalField, isFalse); |
164 } | 164 } |
165 | 165 |
166 void test_hasNonFinalField_false_recursive() { | 166 void test_hasNonFinalField_false_recursive() { |
167 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 167 ClassElementImpl classA = ElementFactory.classElement2("A"); |
168 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 168 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
169 classA.supertype = classB.type; | 169 classA.supertype = classB.type; |
170 expect(classA.hasNonFinalField, isFalse); | 170 expect(classA.hasNonFinalField, isFalse); |
171 } | 171 } |
172 | 172 |
173 void test_hasNonFinalField_true_immediate() { | 173 void test_hasNonFinalField_true_immediate() { |
174 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 174 ClassElementImpl classA = ElementFactory.classElement2("A"); |
175 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, false, classA.type)]; | 175 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, false, classA.type)]; |
176 expect(classA.hasNonFinalField, isTrue); | 176 expect(classA.hasNonFinalField, isTrue); |
177 } | 177 } |
178 | 178 |
179 void test_hasNonFinalField_true_inherited() { | 179 void test_hasNonFinalField_true_inherited() { |
180 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 180 ClassElementImpl classA = ElementFactory.classElement2("A"); |
181 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 181 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
182 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, false, classA.type)]; | 182 classA.fields = <FieldElement> [ElementFactory.fieldElement("f", false, fals
e, false, classA.type)]; |
183 expect(classB.hasNonFinalField, isTrue); | 183 expect(classB.hasNonFinalField, isTrue); |
184 } | 184 } |
185 | 185 |
186 void test_hasStaticMember_false_empty() { | 186 void test_hasStaticMember_false_empty() { |
187 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 187 ClassElementImpl classA = ElementFactory.classElement2("A"); |
188 // no members | 188 // no members |
189 expect(classA.hasStaticMember, isFalse); | 189 expect(classA.hasStaticMember, isFalse); |
190 } | 190 } |
191 | 191 |
192 void test_hasStaticMember_false_instanceMethod() { | 192 void test_hasStaticMember_false_instanceMethod() { |
193 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 193 ClassElementImpl classA = ElementFactory.classElement2("A"); |
194 MethodElement method = ElementFactory.methodElement("foo", null, []); | 194 MethodElement method = ElementFactory.methodElement("foo", null); |
195 classA.methods = <MethodElement> [method]; | 195 classA.methods = <MethodElement> [method]; |
196 expect(classA.hasStaticMember, isFalse); | 196 expect(classA.hasStaticMember, isFalse); |
197 } | 197 } |
198 | 198 |
199 void test_hasStaticMember_instanceGetter() { | 199 void test_hasStaticMember_instanceGetter() { |
200 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 200 ClassElementImpl classA = ElementFactory.classElement2("A"); |
201 PropertyAccessorElement getter = ElementFactory.getterElement("foo", false,
null); | 201 PropertyAccessorElement getter = ElementFactory.getterElement("foo", false,
null); |
202 classA.accessors = <PropertyAccessorElement> [getter]; | 202 classA.accessors = <PropertyAccessorElement> [getter]; |
203 expect(classA.hasStaticMember, isFalse); | 203 expect(classA.hasStaticMember, isFalse); |
204 } | 204 } |
205 | 205 |
206 void test_hasStaticMember_true_getter() { | 206 void test_hasStaticMember_true_getter() { |
207 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 207 ClassElementImpl classA = ElementFactory.classElement2("A"); |
208 PropertyAccessorElementImpl getter = ElementFactory.getterElement("foo", fal
se, null); | 208 PropertyAccessorElementImpl getter = ElementFactory.getterElement("foo", fal
se, null); |
209 classA.accessors = <PropertyAccessorElement> [getter]; | 209 classA.accessors = <PropertyAccessorElement> [getter]; |
210 // "foo" is static | 210 // "foo" is static |
211 getter.static = true; | 211 getter.static = true; |
212 expect(classA.hasStaticMember, isTrue); | 212 expect(classA.hasStaticMember, isTrue); |
213 } | 213 } |
214 | 214 |
215 void test_hasStaticMember_true_method() { | 215 void test_hasStaticMember_true_method() { |
216 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 216 ClassElementImpl classA = ElementFactory.classElement2("A"); |
217 MethodElementImpl method = ElementFactory.methodElement("foo", null, []); | 217 MethodElementImpl method = ElementFactory.methodElement("foo", null); |
218 classA.methods = <MethodElement> [method]; | 218 classA.methods = <MethodElement> [method]; |
219 // "foo" is static | 219 // "foo" is static |
220 method.static = true; | 220 method.static = true; |
221 expect(classA.hasStaticMember, isTrue); | 221 expect(classA.hasStaticMember, isTrue); |
222 } | 222 } |
223 | 223 |
224 void test_hasStaticMember_true_setter() { | 224 void test_hasStaticMember_true_setter() { |
225 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 225 ClassElementImpl classA = ElementFactory.classElement2("A"); |
226 PropertyAccessorElementImpl setter = ElementFactory.setterElement("foo", fal
se, null); | 226 PropertyAccessorElementImpl setter = ElementFactory.setterElement("foo", fal
se, null); |
227 classA.accessors = <PropertyAccessorElement> [setter]; | 227 classA.accessors = <PropertyAccessorElement> [setter]; |
228 // "foo" is static | 228 // "foo" is static |
229 setter.static = true; | 229 setter.static = true; |
230 expect(classA.hasStaticMember, isTrue); | 230 expect(classA.hasStaticMember, isTrue); |
231 } | 231 } |
232 | 232 |
233 void test_lookUpConcreteMethod_declared() { | 233 void test_lookUpConcreteMethod_declared() { |
234 // class A { | 234 // class A { |
235 // m() {} | 235 // m() {} |
236 // } | 236 // } |
237 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 237 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
238 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 238 ClassElementImpl classA = ElementFactory.classElement2("A"); |
239 String methodName = "m"; | 239 String methodName = "m"; |
240 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 240 MethodElement method = ElementFactory.methodElement(methodName, null); |
241 classA.methods = <MethodElement> [method]; | 241 classA.methods = <MethodElement> [method]; |
242 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 242 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
243 expect(classA.lookUpConcreteMethod(methodName, library), same(method)); | 243 expect(classA.lookUpConcreteMethod(methodName, library), same(method)); |
244 } | 244 } |
245 | 245 |
246 void test_lookUpConcreteMethod_declaredAbstract() { | 246 void test_lookUpConcreteMethod_declaredAbstract() { |
247 // class A { | 247 // class A { |
248 // m(); | 248 // m(); |
249 // } | 249 // } |
250 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 250 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
251 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 251 ClassElementImpl classA = ElementFactory.classElement2("A"); |
252 String methodName = "m"; | 252 String methodName = "m"; |
253 MethodElementImpl method = ElementFactory.methodElement(methodName, null, []
); | 253 MethodElementImpl method = ElementFactory.methodElement(methodName, null); |
254 method.abstract = true; | 254 method.abstract = true; |
255 classA.methods = <MethodElement> [method]; | 255 classA.methods = <MethodElement> [method]; |
256 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 256 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
257 expect(classA.lookUpConcreteMethod(methodName, library), isNull); | 257 expect(classA.lookUpConcreteMethod(methodName, library), isNull); |
258 } | 258 } |
259 | 259 |
260 void test_lookUpConcreteMethod_declaredAbstractAndInherited() { | 260 void test_lookUpConcreteMethod_declaredAbstractAndInherited() { |
261 // class A { | 261 // class A { |
262 // m() {} | 262 // m() {} |
263 // } | 263 // } |
264 // class B extends A { | 264 // class B extends A { |
265 // m(); | 265 // m(); |
266 // } | 266 // } |
267 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 267 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
268 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 268 ClassElementImpl classA = ElementFactory.classElement2("A"); |
269 String methodName = "m"; | 269 String methodName = "m"; |
270 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l, []); | 270 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l); |
271 classA.methods = <MethodElement> [inheritedMethod]; | 271 classA.methods = <MethodElement> [inheritedMethod]; |
272 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 272 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
273 MethodElementImpl method = ElementFactory.methodElement(methodName, null, []
); | 273 MethodElementImpl method = ElementFactory.methodElement(methodName, null); |
274 method.abstract = true; | 274 method.abstract = true; |
275 classB.methods = <MethodElement> [method]; | 275 classB.methods = <MethodElement> [method]; |
276 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 276 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
277 expect(classB.lookUpConcreteMethod(methodName, library), same(inheritedMetho
d)); | 277 expect(classB.lookUpConcreteMethod(methodName, library), same(inheritedMetho
d)); |
278 } | 278 } |
279 | 279 |
280 void test_lookUpConcreteMethod_declaredAndInherited() { | 280 void test_lookUpConcreteMethod_declaredAndInherited() { |
281 // class A { | 281 // class A { |
282 // m() {} | 282 // m() {} |
283 // } | 283 // } |
284 // class B extends A { | 284 // class B extends A { |
285 // m() {} | 285 // m() {} |
286 // } | 286 // } |
287 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 287 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
288 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 288 ClassElementImpl classA = ElementFactory.classElement2("A"); |
289 String methodName = "m"; | 289 String methodName = "m"; |
290 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l, []); | 290 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l); |
291 classA.methods = <MethodElement> [inheritedMethod]; | 291 classA.methods = <MethodElement> [inheritedMethod]; |
292 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 292 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
293 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 293 MethodElement method = ElementFactory.methodElement(methodName, null); |
294 classB.methods = <MethodElement> [method]; | 294 classB.methods = <MethodElement> [method]; |
295 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 295 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
296 expect(classB.lookUpConcreteMethod(methodName, library), same(method)); | 296 expect(classB.lookUpConcreteMethod(methodName, library), same(method)); |
297 } | 297 } |
298 | 298 |
299 void test_lookUpConcreteMethod_declaredAndInheritedAbstract() { | 299 void test_lookUpConcreteMethod_declaredAndInheritedAbstract() { |
300 // abstract class A { | 300 // abstract class A { |
301 // m(); | 301 // m(); |
302 // } | 302 // } |
303 // class B extends A { | 303 // class B extends A { |
304 // m() {} | 304 // m() {} |
305 // } | 305 // } |
306 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 306 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
307 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 307 ClassElementImpl classA = ElementFactory.classElement2("A"); |
308 classA.abstract = true; | 308 classA.abstract = true; |
309 String methodName = "m"; | 309 String methodName = "m"; |
310 MethodElementImpl inheritedMethod = ElementFactory.methodElement(methodName,
null, []); | 310 MethodElementImpl inheritedMethod = ElementFactory.methodElement(methodName,
null); |
311 inheritedMethod.abstract = true; | 311 inheritedMethod.abstract = true; |
312 classA.methods = <MethodElement> [inheritedMethod]; | 312 classA.methods = <MethodElement> [inheritedMethod]; |
313 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 313 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
314 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 314 MethodElement method = ElementFactory.methodElement(methodName, null); |
315 classB.methods = <MethodElement> [method]; | 315 classB.methods = <MethodElement> [method]; |
316 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 316 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
317 expect(classB.lookUpConcreteMethod(methodName, library), same(method)); | 317 expect(classB.lookUpConcreteMethod(methodName, library), same(method)); |
318 } | 318 } |
319 | 319 |
320 void test_lookUpConcreteMethod_inherited() { | 320 void test_lookUpConcreteMethod_inherited() { |
321 // class A { | 321 // class A { |
322 // m() {} | 322 // m() {} |
323 // } | 323 // } |
324 // class B extends A { | 324 // class B extends A { |
325 // } | 325 // } |
326 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 326 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
327 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 327 ClassElementImpl classA = ElementFactory.classElement2("A"); |
328 String methodName = "m"; | 328 String methodName = "m"; |
329 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l, []); | 329 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l); |
330 classA.methods = <MethodElement> [inheritedMethod]; | 330 classA.methods = <MethodElement> [inheritedMethod]; |
331 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 331 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
332 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 332 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
333 expect(classB.lookUpConcreteMethod(methodName, library), same(inheritedMetho
d)); | 333 expect(classB.lookUpConcreteMethod(methodName, library), same(inheritedMetho
d)); |
334 } | 334 } |
335 | 335 |
336 void test_lookUpConcreteMethod_undeclared() { | 336 void test_lookUpConcreteMethod_undeclared() { |
337 // class A { | 337 // class A { |
338 // } | 338 // } |
339 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 339 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
340 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 340 ClassElementImpl classA = ElementFactory.classElement2("A"); |
341 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 341 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
342 expect(classA.lookUpConcreteMethod("m", library), isNull); | 342 expect(classA.lookUpConcreteMethod("m", library), isNull); |
343 } | 343 } |
344 | 344 |
345 void test_lookUpGetter_declared() { | 345 void test_lookUpGetter_declared() { |
346 // class A { | 346 // class A { |
347 // get g {} | 347 // get g {} |
348 // } | 348 // } |
349 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 349 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
350 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 350 ClassElementImpl classA = ElementFactory.classElement2("A"); |
351 String getterName = "g"; | 351 String getterName = "g"; |
352 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, null); | 352 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, null); |
353 classA.accessors = <PropertyAccessorElement> [getter]; | 353 classA.accessors = <PropertyAccessorElement> [getter]; |
354 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 354 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
355 expect(classA.lookUpGetter(getterName, library), same(getter)); | 355 expect(classA.lookUpGetter(getterName, library), same(getter)); |
356 } | 356 } |
357 | 357 |
358 void test_lookUpGetter_inherited() { | 358 void test_lookUpGetter_inherited() { |
359 // class A { | 359 // class A { |
360 // get g {} | 360 // get g {} |
361 // } | 361 // } |
362 // class B extends A { | 362 // class B extends A { |
363 // } | 363 // } |
364 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 364 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
365 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 365 ClassElementImpl classA = ElementFactory.classElement2("A"); |
366 String getterName = "g"; | 366 String getterName = "g"; |
367 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, null); | 367 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, null); |
368 classA.accessors = <PropertyAccessorElement> [getter]; | 368 classA.accessors = <PropertyAccessorElement> [getter]; |
369 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 369 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
370 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 370 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
371 expect(classB.lookUpGetter(getterName, library), same(getter)); | 371 expect(classB.lookUpGetter(getterName, library), same(getter)); |
372 } | 372 } |
373 | 373 |
374 void test_lookUpGetter_undeclared() { | 374 void test_lookUpGetter_undeclared() { |
375 // class A { | 375 // class A { |
376 // } | 376 // } |
377 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 377 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
378 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 378 ClassElementImpl classA = ElementFactory.classElement2("A"); |
379 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 379 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
380 expect(classA.lookUpGetter("g", library), isNull); | 380 expect(classA.lookUpGetter("g", library), isNull); |
381 } | 381 } |
382 | 382 |
383 void test_lookUpGetter_undeclared_recursive() { | 383 void test_lookUpGetter_undeclared_recursive() { |
384 // class A extends B { | 384 // class A extends B { |
385 // } | 385 // } |
386 // class B extends A { | 386 // class B extends A { |
387 // } | 387 // } |
388 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 388 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
389 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 389 ClassElementImpl classA = ElementFactory.classElement2("A"); |
390 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 390 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
391 classA.supertype = classB.type; | 391 classA.supertype = classB.type; |
392 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 392 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
393 expect(classA.lookUpGetter("g", library), isNull); | 393 expect(classA.lookUpGetter("g", library), isNull); |
394 } | 394 } |
395 | 395 |
396 void test_lookUpInheritedConcreteGetter_declared() { | 396 void test_lookUpInheritedConcreteGetter_declared() { |
397 // class A { | 397 // class A { |
398 // get g {} | 398 // get g {} |
399 // } | 399 // } |
400 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 400 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
401 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 401 ClassElementImpl classA = ElementFactory.classElement2("A"); |
402 String getterName = "g"; | 402 String getterName = "g"; |
403 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, null); | 403 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, null); |
404 classA.accessors = <PropertyAccessorElement> [getter]; | 404 classA.accessors = <PropertyAccessorElement> [getter]; |
405 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 405 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
406 expect(classA.lookUpInheritedConcreteGetter(getterName, library), isNull); | 406 expect(classA.lookUpInheritedConcreteGetter(getterName, library), isNull); |
407 } | 407 } |
408 | 408 |
409 void test_lookUpInheritedConcreteGetter_inherited() { | 409 void test_lookUpInheritedConcreteGetter_inherited() { |
410 // class A { | 410 // class A { |
411 // get g {} | 411 // get g {} |
412 // } | 412 // } |
413 // class B extends A { | 413 // class B extends A { |
414 // } | 414 // } |
415 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 415 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
416 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 416 ClassElementImpl classA = ElementFactory.classElement2("A"); |
417 String getterName = "g"; | 417 String getterName = "g"; |
418 PropertyAccessorElement inheritedGetter = ElementFactory.getterElement(gette
rName, false, null); | 418 PropertyAccessorElement inheritedGetter = ElementFactory.getterElement(gette
rName, false, null); |
419 classA.accessors = <PropertyAccessorElement> [inheritedGetter]; | 419 classA.accessors = <PropertyAccessorElement> [inheritedGetter]; |
420 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 420 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
421 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 421 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
422 expect(classB.lookUpInheritedConcreteGetter(getterName, library), same(inher
itedGetter)); | 422 expect(classB.lookUpInheritedConcreteGetter(getterName, library), same(inher
itedGetter)); |
423 } | 423 } |
424 | 424 |
425 void test_lookUpInheritedConcreteGetter_undeclared() { | 425 void test_lookUpInheritedConcreteGetter_undeclared() { |
426 // class A { | 426 // class A { |
427 // } | 427 // } |
428 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 428 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
429 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 429 ClassElementImpl classA = ElementFactory.classElement2("A"); |
430 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 430 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
431 expect(classA.lookUpInheritedConcreteGetter("g", library), isNull); | 431 expect(classA.lookUpInheritedConcreteGetter("g", library), isNull); |
432 } | 432 } |
433 | 433 |
434 void test_lookUpInheritedConcreteGetter_undeclared_recursive() { | 434 void test_lookUpInheritedConcreteGetter_undeclared_recursive() { |
435 // class A extends B { | 435 // class A extends B { |
436 // } | 436 // } |
437 // class B extends A { | 437 // class B extends A { |
438 // } | 438 // } |
439 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 439 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
440 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 440 ClassElementImpl classA = ElementFactory.classElement2("A"); |
441 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 441 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
442 classA.supertype = classB.type; | 442 classA.supertype = classB.type; |
443 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 443 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
444 expect(classA.lookUpInheritedConcreteGetter("g", library), isNull); | 444 expect(classA.lookUpInheritedConcreteGetter("g", library), isNull); |
445 } | 445 } |
446 | 446 |
447 void test_lookUpInheritedConcreteMethod_declared() { | 447 void test_lookUpInheritedConcreteMethod_declared() { |
448 // class A { | 448 // class A { |
449 // m() {} | 449 // m() {} |
450 // } | 450 // } |
451 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 451 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
452 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 452 ClassElementImpl classA = ElementFactory.classElement2("A"); |
453 String methodName = "m"; | 453 String methodName = "m"; |
454 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 454 MethodElement method = ElementFactory.methodElement(methodName, null); |
455 classA.methods = <MethodElement> [method]; | 455 classA.methods = <MethodElement> [method]; |
456 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 456 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
457 expect(classA.lookUpInheritedConcreteMethod(methodName, library), isNull); | 457 expect(classA.lookUpInheritedConcreteMethod(methodName, library), isNull); |
458 } | 458 } |
459 | 459 |
460 void test_lookUpInheritedConcreteMethod_declaredAbstractAndInherited() { | 460 void test_lookUpInheritedConcreteMethod_declaredAbstractAndInherited() { |
461 // class A { | 461 // class A { |
462 // m() {} | 462 // m() {} |
463 // } | 463 // } |
464 // class B extends A { | 464 // class B extends A { |
465 // m(); | 465 // m(); |
466 // } | 466 // } |
467 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 467 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
468 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 468 ClassElementImpl classA = ElementFactory.classElement2("A"); |
469 String methodName = "m"; | 469 String methodName = "m"; |
470 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l, []); | 470 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l); |
471 classA.methods = <MethodElement> [inheritedMethod]; | 471 classA.methods = <MethodElement> [inheritedMethod]; |
472 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 472 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
473 MethodElementImpl method = ElementFactory.methodElement(methodName, null, []
); | 473 MethodElementImpl method = ElementFactory.methodElement(methodName, null); |
474 method.abstract = true; | 474 method.abstract = true; |
475 classB.methods = <MethodElement> [method]; | 475 classB.methods = <MethodElement> [method]; |
476 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 476 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
477 expect(classB.lookUpInheritedConcreteMethod(methodName, library), same(inher
itedMethod)); | 477 expect(classB.lookUpInheritedConcreteMethod(methodName, library), same(inher
itedMethod)); |
478 } | 478 } |
479 | 479 |
480 void test_lookUpInheritedConcreteMethod_declaredAndInherited() { | 480 void test_lookUpInheritedConcreteMethod_declaredAndInherited() { |
481 // class A { | 481 // class A { |
482 // m() {} | 482 // m() {} |
483 // } | 483 // } |
484 // class B extends A { | 484 // class B extends A { |
485 // m() {} | 485 // m() {} |
486 // } | 486 // } |
487 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 487 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
488 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 488 ClassElementImpl classA = ElementFactory.classElement2("A"); |
489 String methodName = "m"; | 489 String methodName = "m"; |
490 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l, []); | 490 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l); |
491 classA.methods = <MethodElement> [inheritedMethod]; | 491 classA.methods = <MethodElement> [inheritedMethod]; |
492 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 492 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
493 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 493 MethodElement method = ElementFactory.methodElement(methodName, null); |
494 classB.methods = <MethodElement> [method]; | 494 classB.methods = <MethodElement> [method]; |
495 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 495 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
496 expect(classB.lookUpInheritedConcreteMethod(methodName, library), same(inher
itedMethod)); | 496 expect(classB.lookUpInheritedConcreteMethod(methodName, library), same(inher
itedMethod)); |
497 } | 497 } |
498 | 498 |
499 void test_lookUpInheritedConcreteMethod_declaredAndInheritedAbstract() { | 499 void test_lookUpInheritedConcreteMethod_declaredAndInheritedAbstract() { |
500 // abstract class A { | 500 // abstract class A { |
501 // m(); | 501 // m(); |
502 // } | 502 // } |
503 // class B extends A { | 503 // class B extends A { |
504 // m() {} | 504 // m() {} |
505 // } | 505 // } |
506 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 506 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
507 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 507 ClassElementImpl classA = ElementFactory.classElement2("A"); |
508 classA.abstract = true; | 508 classA.abstract = true; |
509 String methodName = "m"; | 509 String methodName = "m"; |
510 MethodElementImpl inheritedMethod = ElementFactory.methodElement(methodName,
null, []); | 510 MethodElementImpl inheritedMethod = ElementFactory.methodElement(methodName,
null); |
511 inheritedMethod.abstract = true; | 511 inheritedMethod.abstract = true; |
512 classA.methods = <MethodElement> [inheritedMethod]; | 512 classA.methods = <MethodElement> [inheritedMethod]; |
513 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 513 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
514 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 514 MethodElement method = ElementFactory.methodElement(methodName, null); |
515 classB.methods = <MethodElement> [method]; | 515 classB.methods = <MethodElement> [method]; |
516 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 516 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
517 expect(classB.lookUpInheritedConcreteMethod(methodName, library), isNull); | 517 expect(classB.lookUpInheritedConcreteMethod(methodName, library), isNull); |
518 } | 518 } |
519 | 519 |
520 void test_lookUpInheritedConcreteMethod_declaredAndInheritedWithAbstractBetwee
n() { | 520 void test_lookUpInheritedConcreteMethod_declaredAndInheritedWithAbstractBetwee
n() { |
521 // class A { | 521 // class A { |
522 // m() {} | 522 // m() {} |
523 // } | 523 // } |
524 // class B extends A { | 524 // class B extends A { |
525 // m(); | 525 // m(); |
526 // } | 526 // } |
527 // class C extends B { | 527 // class C extends B { |
528 // m() {} | 528 // m() {} |
529 // } | 529 // } |
530 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 530 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
531 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 531 ClassElementImpl classA = ElementFactory.classElement2("A"); |
532 String methodName = "m"; | 532 String methodName = "m"; |
533 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l, []); | 533 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l); |
534 classA.methods = <MethodElement> [inheritedMethod]; | 534 classA.methods = <MethodElement> [inheritedMethod]; |
535 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 535 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
536 MethodElementImpl abstractMethod = ElementFactory.methodElement(methodName,
null, []); | 536 MethodElementImpl abstractMethod = ElementFactory.methodElement(methodName,
null); |
537 abstractMethod.abstract = true; | 537 abstractMethod.abstract = true; |
538 classB.methods = <MethodElement> [abstractMethod]; | 538 classB.methods = <MethodElement> [abstractMethod]; |
539 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); | 539 ClassElementImpl classC = ElementFactory.classElement("C", classB.type); |
540 MethodElementImpl method = ElementFactory.methodElement(methodName, null, []
); | 540 MethodElementImpl method = ElementFactory.methodElement(methodName, null); |
541 classC.methods = <MethodElement> [method]; | 541 classC.methods = <MethodElement> [method]; |
542 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB, classC]; | 542 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB, classC]; |
543 expect(classC.lookUpInheritedConcreteMethod(methodName, library), same(inher
itedMethod)); | 543 expect(classC.lookUpInheritedConcreteMethod(methodName, library), same(inher
itedMethod)); |
544 } | 544 } |
545 | 545 |
546 void test_lookUpInheritedConcreteMethod_inherited() { | 546 void test_lookUpInheritedConcreteMethod_inherited() { |
547 // class A { | 547 // class A { |
548 // m() {} | 548 // m() {} |
549 // } | 549 // } |
550 // class B extends A { | 550 // class B extends A { |
551 // } | 551 // } |
552 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 552 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
553 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 553 ClassElementImpl classA = ElementFactory.classElement2("A"); |
554 String methodName = "m"; | 554 String methodName = "m"; |
555 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l, []); | 555 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l); |
556 classA.methods = <MethodElement> [inheritedMethod]; | 556 classA.methods = <MethodElement> [inheritedMethod]; |
557 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 557 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
558 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 558 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
559 expect(classB.lookUpInheritedConcreteMethod(methodName, library), same(inher
itedMethod)); | 559 expect(classB.lookUpInheritedConcreteMethod(methodName, library), same(inher
itedMethod)); |
560 } | 560 } |
561 | 561 |
562 void test_lookUpInheritedConcreteMethod_undeclared() { | 562 void test_lookUpInheritedConcreteMethod_undeclared() { |
563 // class A { | 563 // class A { |
564 // } | 564 // } |
565 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 565 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
566 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 566 ClassElementImpl classA = ElementFactory.classElement2("A"); |
567 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 567 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
568 expect(classA.lookUpInheritedConcreteMethod("m", library), isNull); | 568 expect(classA.lookUpInheritedConcreteMethod("m", library), isNull); |
569 } | 569 } |
570 | 570 |
571 void test_lookUpInheritedConcreteSetter_declared() { | 571 void test_lookUpInheritedConcreteSetter_declared() { |
572 // class A { | 572 // class A { |
573 // set g(x) {} | 573 // set g(x) {} |
574 // } | 574 // } |
575 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 575 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
576 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 576 ClassElementImpl classA = ElementFactory.classElement2("A"); |
577 String setterName = "s"; | 577 String setterName = "s"; |
578 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); | 578 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); |
579 classA.accessors = <PropertyAccessorElement> [setter]; | 579 classA.accessors = <PropertyAccessorElement> [setter]; |
580 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 580 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
581 expect(classA.lookUpInheritedConcreteSetter(setterName, library), isNull); | 581 expect(classA.lookUpInheritedConcreteSetter(setterName, library), isNull); |
582 } | 582 } |
583 | 583 |
584 void test_lookUpInheritedConcreteSetter_inherited() { | 584 void test_lookUpInheritedConcreteSetter_inherited() { |
585 // class A { | 585 // class A { |
586 // set g(x) {} | 586 // set g(x) {} |
587 // } | 587 // } |
588 // class B extends A { | 588 // class B extends A { |
589 // } | 589 // } |
590 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 590 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
591 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 591 ClassElementImpl classA = ElementFactory.classElement2("A"); |
592 String setterName = "s"; | 592 String setterName = "s"; |
593 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); | 593 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); |
594 classA.accessors = <PropertyAccessorElement> [setter]; | 594 classA.accessors = <PropertyAccessorElement> [setter]; |
595 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 595 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
596 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 596 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
597 expect(classB.lookUpInheritedConcreteSetter(setterName, library), same(sette
r)); | 597 expect(classB.lookUpInheritedConcreteSetter(setterName, library), same(sette
r)); |
598 } | 598 } |
599 | 599 |
600 void test_lookUpInheritedConcreteSetter_undeclared() { | 600 void test_lookUpInheritedConcreteSetter_undeclared() { |
601 // class A { | 601 // class A { |
602 // } | 602 // } |
603 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 603 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
604 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 604 ClassElementImpl classA = ElementFactory.classElement2("A"); |
605 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 605 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
606 expect(classA.lookUpInheritedConcreteSetter("s", library), isNull); | 606 expect(classA.lookUpInheritedConcreteSetter("s", library), isNull); |
607 } | 607 } |
608 | 608 |
609 void test_lookUpInheritedConcreteSetter_undeclared_recursive() { | 609 void test_lookUpInheritedConcreteSetter_undeclared_recursive() { |
610 // class A extends B { | 610 // class A extends B { |
611 // } | 611 // } |
612 // class B extends A { | 612 // class B extends A { |
613 // } | 613 // } |
614 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 614 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
615 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 615 ClassElementImpl classA = ElementFactory.classElement2("A"); |
616 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 616 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
617 classA.supertype = classB.type; | 617 classA.supertype = classB.type; |
618 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 618 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
619 expect(classA.lookUpInheritedConcreteSetter("s", library), isNull); | 619 expect(classA.lookUpInheritedConcreteSetter("s", library), isNull); |
620 } | 620 } |
621 | 621 |
622 void test_lookUpInheritedMethod_declared() { | 622 void test_lookUpInheritedMethod_declared() { |
623 // class A { | 623 // class A { |
624 // m() {} | 624 // m() {} |
625 // } | 625 // } |
626 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 626 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
627 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 627 ClassElementImpl classA = ElementFactory.classElement2("A"); |
628 String methodName = "m"; | 628 String methodName = "m"; |
629 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 629 MethodElement method = ElementFactory.methodElement(methodName, null); |
630 classA.methods = <MethodElement> [method]; | 630 classA.methods = <MethodElement> [method]; |
631 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 631 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
632 expect(classA.lookUpInheritedMethod(methodName, library), isNull); | 632 expect(classA.lookUpInheritedMethod(methodName, library), isNull); |
633 } | 633 } |
634 | 634 |
635 void test_lookUpInheritedMethod_declaredAndInherited() { | 635 void test_lookUpInheritedMethod_declaredAndInherited() { |
636 // class A { | 636 // class A { |
637 // m() {} | 637 // m() {} |
638 // } | 638 // } |
639 // class B extends A { | 639 // class B extends A { |
640 // m() {} | 640 // m() {} |
641 // } | 641 // } |
642 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 642 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
643 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 643 ClassElementImpl classA = ElementFactory.classElement2("A"); |
644 String methodName = "m"; | 644 String methodName = "m"; |
645 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l, []); | 645 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l); |
646 classA.methods = <MethodElement> [inheritedMethod]; | 646 classA.methods = <MethodElement> [inheritedMethod]; |
647 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 647 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
648 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 648 MethodElement method = ElementFactory.methodElement(methodName, null); |
649 classB.methods = <MethodElement> [method]; | 649 classB.methods = <MethodElement> [method]; |
650 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 650 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
651 expect(classB.lookUpInheritedMethod(methodName, library), same(inheritedMeth
od)); | 651 expect(classB.lookUpInheritedMethod(methodName, library), same(inheritedMeth
od)); |
652 } | 652 } |
653 | 653 |
654 void test_lookUpInheritedMethod_inherited() { | 654 void test_lookUpInheritedMethod_inherited() { |
655 // class A { | 655 // class A { |
656 // m() {} | 656 // m() {} |
657 // } | 657 // } |
658 // class B extends A { | 658 // class B extends A { |
659 // } | 659 // } |
660 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 660 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
661 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 661 ClassElementImpl classA = ElementFactory.classElement2("A"); |
662 String methodName = "m"; | 662 String methodName = "m"; |
663 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l, []); | 663 MethodElement inheritedMethod = ElementFactory.methodElement(methodName, nul
l); |
664 classA.methods = <MethodElement> [inheritedMethod]; | 664 classA.methods = <MethodElement> [inheritedMethod]; |
665 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 665 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
666 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 666 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
667 expect(classB.lookUpInheritedMethod(methodName, library), same(inheritedMeth
od)); | 667 expect(classB.lookUpInheritedMethod(methodName, library), same(inheritedMeth
od)); |
668 } | 668 } |
669 | 669 |
670 void test_lookUpInheritedMethod_undeclared() { | 670 void test_lookUpInheritedMethod_undeclared() { |
671 // class A { | 671 // class A { |
672 // } | 672 // } |
673 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 673 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
674 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 674 ClassElementImpl classA = ElementFactory.classElement2("A"); |
675 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 675 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
676 expect(classA.lookUpInheritedMethod("m", library), isNull); | 676 expect(classA.lookUpInheritedMethod("m", library), isNull); |
677 } | 677 } |
678 | 678 |
679 void test_lookUpMethod_declared() { | 679 void test_lookUpMethod_declared() { |
680 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 680 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
681 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 681 ClassElementImpl classA = ElementFactory.classElement2("A"); |
682 String methodName = "m"; | 682 String methodName = "m"; |
683 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 683 MethodElement method = ElementFactory.methodElement(methodName, null); |
684 classA.methods = <MethodElement> [method]; | 684 classA.methods = <MethodElement> [method]; |
685 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 685 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
686 expect(classA.lookUpMethod(methodName, library), same(method)); | 686 expect(classA.lookUpMethod(methodName, library), same(method)); |
687 } | 687 } |
688 | 688 |
689 void test_lookUpMethod_inherited() { | 689 void test_lookUpMethod_inherited() { |
690 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 690 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
691 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 691 ClassElementImpl classA = ElementFactory.classElement2("A"); |
692 String methodName = "m"; | 692 String methodName = "m"; |
693 MethodElement method = ElementFactory.methodElement(methodName, null, []); | 693 MethodElement method = ElementFactory.methodElement(methodName, null); |
694 classA.methods = <MethodElement> [method]; | 694 classA.methods = <MethodElement> [method]; |
695 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 695 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
696 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 696 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
697 expect(classB.lookUpMethod(methodName, library), same(method)); | 697 expect(classB.lookUpMethod(methodName, library), same(method)); |
698 } | 698 } |
699 | 699 |
700 void test_lookUpMethod_undeclared() { | 700 void test_lookUpMethod_undeclared() { |
701 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 701 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
702 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 702 ClassElementImpl classA = ElementFactory.classElement2("A"); |
703 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 703 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
704 expect(classA.lookUpMethod("m", library), isNull); | 704 expect(classA.lookUpMethod("m", library), isNull); |
705 } | 705 } |
706 | 706 |
707 void test_lookUpMethod_undeclared_recursive() { | 707 void test_lookUpMethod_undeclared_recursive() { |
708 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 708 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
709 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 709 ClassElementImpl classA = ElementFactory.classElement2("A"); |
710 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 710 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
711 classA.supertype = classB.type; | 711 classA.supertype = classB.type; |
712 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 712 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
713 expect(classA.lookUpMethod("m", library), isNull); | 713 expect(classA.lookUpMethod("m", library), isNull); |
714 } | 714 } |
715 | 715 |
716 void test_lookUpSetter_declared() { | 716 void test_lookUpSetter_declared() { |
717 // class A { | 717 // class A { |
718 // set g(x) {} | 718 // set g(x) {} |
719 // } | 719 // } |
720 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 720 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
721 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 721 ClassElementImpl classA = ElementFactory.classElement2("A"); |
722 String setterName = "s"; | 722 String setterName = "s"; |
723 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); | 723 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); |
724 classA.accessors = <PropertyAccessorElement> [setter]; | 724 classA.accessors = <PropertyAccessorElement> [setter]; |
725 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 725 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
726 expect(classA.lookUpSetter(setterName, library), same(setter)); | 726 expect(classA.lookUpSetter(setterName, library), same(setter)); |
727 } | 727 } |
728 | 728 |
729 void test_lookUpSetter_inherited() { | 729 void test_lookUpSetter_inherited() { |
730 // class A { | 730 // class A { |
731 // set g(x) {} | 731 // set g(x) {} |
732 // } | 732 // } |
733 // class B extends A { | 733 // class B extends A { |
734 // } | 734 // } |
735 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 735 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
736 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 736 ClassElementImpl classA = ElementFactory.classElement2("A"); |
737 String setterName = "s"; | 737 String setterName = "s"; |
738 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); | 738 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, null); |
739 classA.accessors = <PropertyAccessorElement> [setter]; | 739 classA.accessors = <PropertyAccessorElement> [setter]; |
740 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 740 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
741 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 741 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
742 expect(classB.lookUpSetter(setterName, library), same(setter)); | 742 expect(classB.lookUpSetter(setterName, library), same(setter)); |
743 } | 743 } |
744 | 744 |
745 void test_lookUpSetter_undeclared() { | 745 void test_lookUpSetter_undeclared() { |
746 // class A { | 746 // class A { |
747 // } | 747 // } |
748 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 748 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
749 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 749 ClassElementImpl classA = ElementFactory.classElement2("A"); |
750 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; | 750 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA]; |
751 expect(classA.lookUpSetter("s", library), isNull); | 751 expect(classA.lookUpSetter("s", library), isNull); |
752 } | 752 } |
753 | 753 |
754 void test_lookUpSetter_undeclared_recursive() { | 754 void test_lookUpSetter_undeclared_recursive() { |
755 // class A extends B { | 755 // class A extends B { |
756 // } | 756 // } |
757 // class B extends A { | 757 // class B extends A { |
758 // } | 758 // } |
759 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 759 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
760 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 760 ClassElementImpl classA = ElementFactory.classElement2("A"); |
761 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 761 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
762 classA.supertype = classB.type; | 762 classA.supertype = classB.type; |
763 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; | 763 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classA, classB]; |
764 expect(classA.lookUpSetter("s", library), isNull); | 764 expect(classA.lookUpSetter("s", library), isNull); |
765 } | 765 } |
766 } | 766 } |
767 | 767 |
768 class CompilationUnitElementImplTest extends EngineTestCase { | 768 class CompilationUnitElementImplTest extends EngineTestCase { |
769 void test_getEnum_declared() { | 769 void test_getEnum_declared() { |
770 TestTypeProvider typeProvider = new TestTypeProvider(); | 770 TestTypeProvider typeProvider = new TestTypeProvider(); |
771 CompilationUnitElementImpl unit = ElementFactory.compilationUnit("/lib.dart"
); | 771 CompilationUnitElementImpl unit = ElementFactory.compilationUnit("/lib.dart"
); |
772 String enumName = "E"; | 772 String enumName = "E"; |
773 ClassElement enumElement = ElementFactory.enumElement(typeProvider, enumName
, []); | 773 ClassElement enumElement = ElementFactory.enumElement(typeProvider, enumName
); |
774 unit.enums = <ClassElement> [enumElement]; | 774 unit.enums = <ClassElement> [enumElement]; |
775 expect(unit.getEnum(enumName), same(enumElement)); | 775 expect(unit.getEnum(enumName), same(enumElement)); |
776 } | 776 } |
777 | 777 |
778 void test_getEnum_undeclared() { | 778 void test_getEnum_undeclared() { |
779 TestTypeProvider typeProvider = new TestTypeProvider(); | 779 TestTypeProvider typeProvider = new TestTypeProvider(); |
780 CompilationUnitElementImpl unit = ElementFactory.compilationUnit("/lib.dart"
); | 780 CompilationUnitElementImpl unit = ElementFactory.compilationUnit("/lib.dart"
); |
781 String enumName = "E"; | 781 String enumName = "E"; |
782 ClassElement enumElement = ElementFactory.enumElement(typeProvider, enumName
, []); | 782 ClassElement enumElement = ElementFactory.enumElement(typeProvider, enumName
); |
783 unit.enums = <ClassElement> [enumElement]; | 783 unit.enums = <ClassElement> [enumElement]; |
784 expect(unit.getEnum("${enumName}x"), isNull); | 784 expect(unit.getEnum("${enumName}x"), isNull); |
785 } | 785 } |
786 | 786 |
787 void test_getType_declared() { | 787 void test_getType_declared() { |
788 CompilationUnitElementImpl unit = ElementFactory.compilationUnit("/lib.dart"
); | 788 CompilationUnitElementImpl unit = ElementFactory.compilationUnit("/lib.dart"
); |
789 String className = "C"; | 789 String className = "C"; |
790 ClassElement classElement = ElementFactory.classElement2(className, []); | 790 ClassElement classElement = ElementFactory.classElement2(className); |
791 unit.types = <ClassElement> [classElement]; | 791 unit.types = <ClassElement> [classElement]; |
792 expect(unit.getType(className), same(classElement)); | 792 expect(unit.getType(className), same(classElement)); |
793 } | 793 } |
794 | 794 |
795 void test_getType_undeclared() { | 795 void test_getType_undeclared() { |
796 CompilationUnitElementImpl unit = ElementFactory.compilationUnit("/lib.dart"
); | 796 CompilationUnitElementImpl unit = ElementFactory.compilationUnit("/lib.dart"
); |
797 String className = "C"; | 797 String className = "C"; |
798 ClassElement classElement = ElementFactory.classElement2(className, []); | 798 ClassElement classElement = ElementFactory.classElement2(className); |
799 unit.types = <ClassElement> [classElement]; | 799 unit.types = <ClassElement> [classElement]; |
800 expect(unit.getType("${className}x"), isNull); | 800 expect(unit.getType("${className}x"), isNull); |
801 } | 801 } |
802 } | 802 } |
803 | 803 |
804 class ElementImplTest extends EngineTestCase { | 804 class ElementImplTest extends EngineTestCase { |
805 void test_equals() { | 805 void test_equals() { |
806 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 806 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
807 ClassElementImpl classElement = ElementFactory.classElement2("C", []); | 807 ClassElementImpl classElement = ElementFactory.classElement2("C"); |
808 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; | 808 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; |
809 FieldElement field = ElementFactory.fieldElement("next", false, false, false
, classElement.type); | 809 FieldElement field = ElementFactory.fieldElement("next", false, false, false
, classElement.type); |
810 classElement.fields = <FieldElement> [field]; | 810 classElement.fields = <FieldElement> [field]; |
811 expect(field == field, isTrue); | 811 expect(field == field, isTrue); |
812 expect(field == field.getter, isFalse); | 812 expect(field == field.getter, isFalse); |
813 expect(field == field.setter, isFalse); | 813 expect(field == field.setter, isFalse); |
814 expect(field.getter == field.setter, isFalse); | 814 expect(field.getter == field.setter, isFalse); |
815 } | 815 } |
816 | 816 |
817 void test_isAccessibleIn_private_differentLibrary() { | 817 void test_isAccessibleIn_private_differentLibrary() { |
818 AnalysisContextImpl context = createAnalysisContext(); | 818 AnalysisContextImpl context = createAnalysisContext(); |
819 LibraryElementImpl library1 = ElementFactory.library(context, "lib1"); | 819 LibraryElementImpl library1 = ElementFactory.library(context, "lib1"); |
820 ClassElement classElement = ElementFactory.classElement2("_C", []); | 820 ClassElement classElement = ElementFactory.classElement2("_C"); |
821 (library1.definingCompilationUnit as CompilationUnitElementImpl).types = <Cl
assElement> [classElement]; | 821 (library1.definingCompilationUnit as CompilationUnitElementImpl).types = <Cl
assElement> [classElement]; |
822 LibraryElementImpl library2 = ElementFactory.library(context, "lib2"); | 822 LibraryElementImpl library2 = ElementFactory.library(context, "lib2"); |
823 expect(classElement.isAccessibleIn(library2), isFalse); | 823 expect(classElement.isAccessibleIn(library2), isFalse); |
824 } | 824 } |
825 | 825 |
826 void test_isAccessibleIn_private_sameLibrary() { | 826 void test_isAccessibleIn_private_sameLibrary() { |
827 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 827 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
828 ClassElement classElement = ElementFactory.classElement2("_C", []); | 828 ClassElement classElement = ElementFactory.classElement2("_C"); |
829 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; | 829 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; |
830 expect(classElement.isAccessibleIn(library), isTrue); | 830 expect(classElement.isAccessibleIn(library), isTrue); |
831 } | 831 } |
832 | 832 |
833 void test_isAccessibleIn_public_differentLibrary() { | 833 void test_isAccessibleIn_public_differentLibrary() { |
834 AnalysisContextImpl context = createAnalysisContext(); | 834 AnalysisContextImpl context = createAnalysisContext(); |
835 LibraryElementImpl library1 = ElementFactory.library(context, "lib1"); | 835 LibraryElementImpl library1 = ElementFactory.library(context, "lib1"); |
836 ClassElement classElement = ElementFactory.classElement2("C", []); | 836 ClassElement classElement = ElementFactory.classElement2("C"); |
837 (library1.definingCompilationUnit as CompilationUnitElementImpl).types = <Cl
assElement> [classElement]; | 837 (library1.definingCompilationUnit as CompilationUnitElementImpl).types = <Cl
assElement> [classElement]; |
838 LibraryElementImpl library2 = ElementFactory.library(context, "lib2"); | 838 LibraryElementImpl library2 = ElementFactory.library(context, "lib2"); |
839 expect(classElement.isAccessibleIn(library2), isTrue); | 839 expect(classElement.isAccessibleIn(library2), isTrue); |
840 } | 840 } |
841 | 841 |
842 void test_isAccessibleIn_public_sameLibrary() { | 842 void test_isAccessibleIn_public_sameLibrary() { |
843 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 843 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
844 ClassElement classElement = ElementFactory.classElement2("C", []); | 844 ClassElement classElement = ElementFactory.classElement2("C"); |
845 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; | 845 (library.definingCompilationUnit as CompilationUnitElementImpl).types = <Cla
ssElement> [classElement]; |
846 expect(classElement.isAccessibleIn(library), isTrue); | 846 expect(classElement.isAccessibleIn(library), isTrue); |
847 } | 847 } |
848 | 848 |
849 void test_isPrivate_false() { | 849 void test_isPrivate_false() { |
850 Element element = ElementFactory.classElement2("C", []); | 850 Element element = ElementFactory.classElement2("C"); |
851 expect(element.isPrivate, isFalse); | 851 expect(element.isPrivate, isFalse); |
852 } | 852 } |
853 | 853 |
854 void test_isPrivate_null() { | 854 void test_isPrivate_null() { |
855 Element element = ElementFactory.classElement2(null, []); | 855 Element element = ElementFactory.classElement2(null); |
856 expect(element.isPrivate, isTrue); | 856 expect(element.isPrivate, isTrue); |
857 } | 857 } |
858 | 858 |
859 void test_isPrivate_true() { | 859 void test_isPrivate_true() { |
860 Element element = ElementFactory.classElement2("_C", []); | 860 Element element = ElementFactory.classElement2("_C"); |
861 expect(element.isPrivate, isTrue); | 861 expect(element.isPrivate, isTrue); |
862 } | 862 } |
863 | 863 |
864 void test_isPublic_false() { | 864 void test_isPublic_false() { |
865 Element element = ElementFactory.classElement2("_C", []); | 865 Element element = ElementFactory.classElement2("_C"); |
866 expect(element.isPublic, isFalse); | 866 expect(element.isPublic, isFalse); |
867 } | 867 } |
868 | 868 |
869 void test_isPublic_null() { | 869 void test_isPublic_null() { |
870 Element element = ElementFactory.classElement2(null, []); | 870 Element element = ElementFactory.classElement2(null); |
871 expect(element.isPublic, isFalse); | 871 expect(element.isPublic, isFalse); |
872 } | 872 } |
873 | 873 |
874 void test_isPublic_true() { | 874 void test_isPublic_true() { |
875 Element element = ElementFactory.classElement2("C", []); | 875 Element element = ElementFactory.classElement2("C"); |
876 expect(element.isPublic, isTrue); | 876 expect(element.isPublic, isTrue); |
877 } | 877 } |
878 | 878 |
879 void test_SORT_BY_OFFSET() { | 879 void test_SORT_BY_OFFSET() { |
880 ClassElementImpl classElementA = ElementFactory.classElement2("A", []); | 880 ClassElementImpl classElementA = ElementFactory.classElement2("A"); |
881 classElementA.nameOffset = 1; | 881 classElementA.nameOffset = 1; |
882 ClassElementImpl classElementB = ElementFactory.classElement2("B", []); | 882 ClassElementImpl classElementB = ElementFactory.classElement2("B"); |
883 classElementB.nameOffset = 2; | 883 classElementB.nameOffset = 2; |
884 expect(Element.SORT_BY_OFFSET(classElementA, classElementA), 0); | 884 expect(Element.SORT_BY_OFFSET(classElementA, classElementA), 0); |
885 expect(Element.SORT_BY_OFFSET(classElementA, classElementB) < 0, isTrue); | 885 expect(Element.SORT_BY_OFFSET(classElementA, classElementB) < 0, isTrue); |
886 expect(Element.SORT_BY_OFFSET(classElementB, classElementA) > 0, isTrue); | 886 expect(Element.SORT_BY_OFFSET(classElementB, classElementA) > 0, isTrue); |
887 } | 887 } |
888 } | 888 } |
889 | 889 |
890 class ElementKindTest extends EngineTestCase { | 890 class ElementKindTest extends EngineTestCase { |
891 void test_of_nonNull() { | 891 void test_of_nonNull() { |
892 expect(ElementKind.of(ElementFactory.classElement2("A", [])), same(ElementKi
nd.CLASS)); | 892 expect(ElementKind.of(ElementFactory.classElement2("A")), same(ElementKind.C
LASS)); |
893 } | 893 } |
894 | 894 |
895 void test_of_null() { | 895 void test_of_null() { |
896 expect(ElementKind.of(null), same(ElementKind.ERROR)); | 896 expect(ElementKind.of(null), same(ElementKind.ERROR)); |
897 } | 897 } |
898 } | 898 } |
899 | 899 |
900 class ElementLocationImplTest extends EngineTestCase { | 900 class ElementLocationImplTest extends EngineTestCase { |
901 void test_create_encoding() { | 901 void test_create_encoding() { |
902 String encoding = "a;b;c"; | 902 String encoding = "a;b;c"; |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1004 type.hashCode; | 1004 type.hashCode; |
1005 } | 1005 } |
1006 | 1006 |
1007 void test_hashCode_noElement() { | 1007 void test_hashCode_noElement() { |
1008 FunctionTypeImpl type = new FunctionTypeImpl.con1(null); | 1008 FunctionTypeImpl type = new FunctionTypeImpl.con1(null); |
1009 type.hashCode; | 1009 type.hashCode; |
1010 } | 1010 } |
1011 | 1011 |
1012 void test_isAssignableTo_normalAndPositionalArgs() { | 1012 void test_isAssignableTo_normalAndPositionalArgs() { |
1013 // ([a]) -> void <: (a) -> void | 1013 // ([a]) -> void <: (a) -> void |
1014 ClassElement a = ElementFactory.classElement2("A", []); | 1014 ClassElement a = ElementFactory.classElement2("A"); |
1015 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | 1015 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
1016 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; | 1016 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; |
1017 expect(t.isSubtypeOf(s), isTrue); | 1017 expect(t.isSubtypeOf(s), isTrue); |
1018 expect(s.isSubtypeOf(t), isFalse); | 1018 expect(s.isSubtypeOf(t), isFalse); |
1019 // assignable iff subtype | 1019 // assignable iff subtype |
1020 expect(t.isAssignableTo(s), isTrue); | 1020 expect(t.isAssignableTo(s), isTrue); |
1021 expect(s.isAssignableTo(t), isFalse); | 1021 expect(s.isAssignableTo(t), isFalse); |
1022 } | 1022 } |
1023 | 1023 |
1024 void test_isSubtypeOf_baseCase_classFunction() { | 1024 void test_isSubtypeOf_baseCase_classFunction() { |
1025 // () -> void <: Function | 1025 // () -> void <: Function |
1026 ClassElementImpl functionElement = ElementFactory.classElement2("Function",
[]); | 1026 ClassElementImpl functionElement = ElementFactory.classElement2("Function"); |
1027 InterfaceTypeImpl functionType = new InterfaceTypeImpl_FunctionTypeImplTest_
test_isSubtypeOf_baseCase_classFunction(functionElement); | 1027 InterfaceTypeImpl functionType = new InterfaceTypeImpl_FunctionTypeImplTest_
test_isSubtypeOf_baseCase_classFunction(functionElement); |
1028 FunctionType f = ElementFactory.functionElement("f").type; | 1028 FunctionType f = ElementFactory.functionElement("f").type; |
1029 expect(f.isSubtypeOf(functionType), isTrue); | 1029 expect(f.isSubtypeOf(functionType), isTrue); |
1030 } | 1030 } |
1031 | 1031 |
1032 void test_isSubtypeOf_baseCase_notFunctionType() { | 1032 void test_isSubtypeOf_baseCase_notFunctionType() { |
1033 // class C | 1033 // class C |
1034 // ! () -> void <: C | 1034 // ! () -> void <: C |
1035 FunctionType f = ElementFactory.functionElement("f").type; | 1035 FunctionType f = ElementFactory.functionElement("f").type; |
1036 InterfaceType t = ElementFactory.classElement2("C", []).type; | 1036 InterfaceType t = ElementFactory.classElement2("C").type; |
1037 expect(f.isSubtypeOf(t), isFalse); | 1037 expect(f.isSubtypeOf(t), isFalse); |
1038 } | 1038 } |
1039 | 1039 |
1040 void test_isSubtypeOf_baseCase_null() { | 1040 void test_isSubtypeOf_baseCase_null() { |
1041 // ! () -> void <: null | 1041 // ! () -> void <: null |
1042 FunctionType f = ElementFactory.functionElement("f").type; | 1042 FunctionType f = ElementFactory.functionElement("f").type; |
1043 expect(f.isSubtypeOf(null), isFalse); | 1043 expect(f.isSubtypeOf(null), isFalse); |
1044 } | 1044 } |
1045 | 1045 |
1046 void test_isSubtypeOf_baseCase_self() { | 1046 void test_isSubtypeOf_baseCase_self() { |
1047 // () -> void <: () -> void | 1047 // () -> void <: () -> void |
1048 FunctionType f = ElementFactory.functionElement("f").type; | 1048 FunctionType f = ElementFactory.functionElement("f").type; |
1049 expect(f.isSubtypeOf(f), isTrue); | 1049 expect(f.isSubtypeOf(f), isTrue); |
1050 } | 1050 } |
1051 | 1051 |
1052 void test_isSubtypeOf_namedParameters_isAssignable() { | 1052 void test_isSubtypeOf_namedParameters_isAssignable() { |
1053 // B extends A | 1053 // B extends A |
1054 // ({name: A}) -> void <: ({name: B}) -> void | 1054 // ({name: A}) -> void <: ({name: B}) -> void |
1055 // ({name: B}) -> void <: ({name: A}) -> void | 1055 // ({name: B}) -> void <: ({name: A}) -> void |
1056 ClassElement a = ElementFactory.classElement2("A", []); | 1056 ClassElement a = ElementFactory.classElement2("A"); |
1057 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1057 ClassElement b = ElementFactory.classElement("B", a.type); |
1058 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; | 1058 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; |
1059 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [b]).type; | 1059 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [b]).type; |
1060 expect(t.isSubtypeOf(s), isTrue); | 1060 expect(t.isSubtypeOf(s), isTrue); |
1061 expect(s.isSubtypeOf(t), isTrue); | 1061 expect(s.isSubtypeOf(t), isTrue); |
1062 } | 1062 } |
1063 | 1063 |
1064 void test_isSubtypeOf_namedParameters_isNotAssignable() { | 1064 void test_isSubtypeOf_namedParameters_isNotAssignable() { |
1065 // ! ({name: A}) -> void <: ({name: B}) -> void | 1065 // ! ({name: A}) -> void <: ({name: B}) -> void |
1066 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [ElementFactory.classElement2("A", [])]).type; | 1066 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [ElementFactory.classElement2("A")]).type; |
1067 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [ElementFactory.classElement2("B", [])]).type; | 1067 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [ElementFactory.classElement2("B")]).type; |
1068 expect(t.isSubtypeOf(s), isFalse); | 1068 expect(t.isSubtypeOf(s), isFalse); |
1069 } | 1069 } |
1070 | 1070 |
1071 void test_isSubtypeOf_namedParameters_namesDifferent() { | 1071 void test_isSubtypeOf_namedParameters_namesDifferent() { |
1072 // B extends A | 1072 // B extends A |
1073 // void t({A name}) {} | 1073 // void t({A name}) {} |
1074 // void s({A diff}) {} | 1074 // void s({A diff}) {} |
1075 // ! t <: s | 1075 // ! t <: s |
1076 // ! s <: t | 1076 // ! s <: t |
1077 ClassElement a = ElementFactory.classElement2("A", []); | 1077 ClassElement a = ElementFactory.classElement2("A"); |
1078 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1078 ClassElement b = ElementFactory.classElement("B", a.type); |
1079 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; | 1079 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; |
1080 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"diff"], <ClassElement> [b]).type; | 1080 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"diff"], <ClassElement> [b]).type; |
1081 expect(t.isSubtypeOf(s), isFalse); | 1081 expect(t.isSubtypeOf(s), isFalse); |
1082 expect(s.isSubtypeOf(t), isFalse); | 1082 expect(s.isSubtypeOf(t), isFalse); |
1083 } | 1083 } |
1084 | 1084 |
1085 void test_isSubtypeOf_namedParameters_orderOfParams() { | 1085 void test_isSubtypeOf_namedParameters_orderOfParams() { |
1086 // B extends A | 1086 // B extends A |
1087 // ({A: A, B: B}) -> void <: ({B: B, A: A}) -> void | 1087 // ({A: A, B: B}) -> void <: ({B: B, A: A}) -> void |
1088 ClassElement a = ElementFactory.classElement2("A", []); | 1088 ClassElement a = ElementFactory.classElement2("A"); |
1089 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1089 ClassElement b = ElementFactory.classElement("B", a.type); |
1090 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"A", "B"], <ClassElement> [a, b]).type; | 1090 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"A", "B"], <ClassElement> [a, b]).type; |
1091 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B", "A"], <ClassElement> [b, a]).type; | 1091 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B", "A"], <ClassElement> [b, a]).type; |
1092 expect(t.isSubtypeOf(s), isTrue); | 1092 expect(t.isSubtypeOf(s), isTrue); |
1093 } | 1093 } |
1094 | 1094 |
1095 void test_isSubtypeOf_namedParameters_orderOfParams2() { | 1095 void test_isSubtypeOf_namedParameters_orderOfParams2() { |
1096 // B extends A | 1096 // B extends A |
1097 // ! ({B: B}) -> void <: ({B: B, A: A}) -> void | 1097 // ! ({B: B}) -> void <: ({B: B, A: A}) -> void |
1098 ClassElement a = ElementFactory.classElement2("A", []); | 1098 ClassElement a = ElementFactory.classElement2("A"); |
1099 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1099 ClassElement b = ElementFactory.classElement("B", a.type); |
1100 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"B"], <ClassElement> [b]).type; | 1100 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"B"], <ClassElement> [b]).type; |
1101 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B", "A"], <ClassElement> [b, a]).type; | 1101 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B", "A"], <ClassElement> [b, a]).type; |
1102 expect(t.isSubtypeOf(s), isFalse); | 1102 expect(t.isSubtypeOf(s), isFalse); |
1103 } | 1103 } |
1104 | 1104 |
1105 void test_isSubtypeOf_namedParameters_orderOfParams3() { | 1105 void test_isSubtypeOf_namedParameters_orderOfParams3() { |
1106 // B extends A | 1106 // B extends A |
1107 // ({A: A, B: B}) -> void <: ({A: A}) -> void | 1107 // ({A: A, B: B}) -> void <: ({A: A}) -> void |
1108 ClassElement a = ElementFactory.classElement2("A", []); | 1108 ClassElement a = ElementFactory.classElement2("A"); |
1109 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1109 ClassElement b = ElementFactory.classElement("B", a.type); |
1110 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"A", "B"], <ClassElement> [a, b]).type; | 1110 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"A", "B"], <ClassElement> [a, b]).type; |
1111 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B"], <ClassElement> [b]).type; | 1111 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"B"], <ClassElement> [b]).type; |
1112 expect(t.isSubtypeOf(s), isTrue); | 1112 expect(t.isSubtypeOf(s), isTrue); |
1113 } | 1113 } |
1114 | 1114 |
1115 void test_isSubtypeOf_namedParameters_sHasMoreParams() { | 1115 void test_isSubtypeOf_namedParameters_sHasMoreParams() { |
1116 // B extends A | 1116 // B extends A |
1117 // ! ({name: A}) -> void <: ({name: B, name2: B}) -> void | 1117 // ! ({name: A}) -> void <: ({name: B, name2: B}) -> void |
1118 ClassElement a = ElementFactory.classElement2("A", []); | 1118 ClassElement a = ElementFactory.classElement2("A"); |
1119 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1119 ClassElement b = ElementFactory.classElement("B", a.type); |
1120 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; | 1120 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name"], <ClassElement> [a]).type; |
1121 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name", "name2"], <ClassElement> [b, b]).type; | 1121 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name", "name2"], <ClassElement> [b, b]).type; |
1122 expect(t.isSubtypeOf(s), isFalse); | 1122 expect(t.isSubtypeOf(s), isFalse); |
1123 } | 1123 } |
1124 | 1124 |
1125 void test_isSubtypeOf_namedParameters_tHasMoreParams() { | 1125 void test_isSubtypeOf_namedParameters_tHasMoreParams() { |
1126 // B extends A | 1126 // B extends A |
1127 // ({name: A, name2: A}) -> void <: ({name: B}) -> void | 1127 // ({name: A, name2: A}) -> void <: ({name: B}) -> void |
1128 ClassElement a = ElementFactory.classElement2("A", []); | 1128 ClassElement a = ElementFactory.classElement2("A"); |
1129 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1129 ClassElement b = ElementFactory.classElement("B", a.type); |
1130 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name", "name2"], <ClassElement> [a, a]).type; | 1130 FunctionType t = ElementFactory.functionElement4("t", null, null, <String> [
"name", "name2"], <ClassElement> [a, a]).type; |
1131 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [b]).type; | 1131 FunctionType s = ElementFactory.functionElement4("s", null, null, <String> [
"name"], <ClassElement> [b]).type; |
1132 expect(t.isSubtypeOf(s), isTrue); | 1132 expect(t.isSubtypeOf(s), isTrue); |
1133 } | 1133 } |
1134 | 1134 |
1135 void test_isSubtypeOf_normalAndPositionalArgs_1() { | 1135 void test_isSubtypeOf_normalAndPositionalArgs_1() { |
1136 // ([a]) -> void <: (a) -> void | 1136 // ([a]) -> void <: (a) -> void |
1137 ClassElement a = ElementFactory.classElement2("A", []); | 1137 ClassElement a = ElementFactory.classElement2("A"); |
1138 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | 1138 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
1139 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; | 1139 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; |
1140 expect(t.isSubtypeOf(s), isTrue); | 1140 expect(t.isSubtypeOf(s), isTrue); |
1141 expect(s.isSubtypeOf(t), isFalse); | 1141 expect(s.isSubtypeOf(t), isFalse); |
1142 } | 1142 } |
1143 | 1143 |
1144 void test_isSubtypeOf_normalAndPositionalArgs_2() { | 1144 void test_isSubtypeOf_normalAndPositionalArgs_2() { |
1145 // (a, [a]) -> void <: (a) -> void | 1145 // (a, [a]) -> void <: (a) -> void |
1146 ClassElement a = ElementFactory.classElement2("A", []); | 1146 ClassElement a = ElementFactory.classElement2("A"); |
1147 FunctionType t = ElementFactory.functionElement6("t", <ClassElement> [a], <C
lassElement> [a]).type; | 1147 FunctionType t = ElementFactory.functionElement6("t", <ClassElement> [a], <C
lassElement> [a]).type; |
1148 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; | 1148 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [a]).ty
pe; |
1149 expect(t.isSubtypeOf(s), isTrue); | 1149 expect(t.isSubtypeOf(s), isTrue); |
1150 expect(s.isSubtypeOf(t), isFalse); | 1150 expect(s.isSubtypeOf(t), isFalse); |
1151 } | 1151 } |
1152 | 1152 |
1153 void test_isSubtypeOf_normalAndPositionalArgs_3() { | 1153 void test_isSubtypeOf_normalAndPositionalArgs_3() { |
1154 // ([a]) -> void <: () -> void | 1154 // ([a]) -> void <: () -> void |
1155 ClassElement a = ElementFactory.classElement2("A", []); | 1155 ClassElement a = ElementFactory.classElement2("A"); |
1156 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | 1156 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
1157 FunctionType s = ElementFactory.functionElement("s").type; | 1157 FunctionType s = ElementFactory.functionElement("s").type; |
1158 expect(t.isSubtypeOf(s), isTrue); | 1158 expect(t.isSubtypeOf(s), isTrue); |
1159 expect(s.isSubtypeOf(t), isFalse); | 1159 expect(s.isSubtypeOf(t), isFalse); |
1160 } | 1160 } |
1161 | 1161 |
1162 void test_isSubtypeOf_normalAndPositionalArgs_4() { | 1162 void test_isSubtypeOf_normalAndPositionalArgs_4() { |
1163 // (a, b, [c, d, e]) -> void <: (a, b, c, [d]) -> void | 1163 // (a, b, [c, d, e]) -> void <: (a, b, c, [d]) -> void |
1164 ClassElement a = ElementFactory.classElement2("A", []); | 1164 ClassElement a = ElementFactory.classElement2("A"); |
1165 ClassElement b = ElementFactory.classElement2("B", []); | 1165 ClassElement b = ElementFactory.classElement2("B"); |
1166 ClassElement c = ElementFactory.classElement2("C", []); | 1166 ClassElement c = ElementFactory.classElement2("C"); |
1167 ClassElement d = ElementFactory.classElement2("D", []); | 1167 ClassElement d = ElementFactory.classElement2("D"); |
1168 ClassElement e = ElementFactory.classElement2("E", []); | 1168 ClassElement e = ElementFactory.classElement2("E"); |
1169 FunctionType t = ElementFactory.functionElement6("t", <ClassElement> [a, b],
<ClassElement> [c, d, e]).type; | 1169 FunctionType t = ElementFactory.functionElement6("t", <ClassElement> [a, b],
<ClassElement> [c, d, e]).type; |
1170 FunctionType s = ElementFactory.functionElement6("s", <ClassElement> [a, b,
c], <ClassElement> [d]).type; | 1170 FunctionType s = ElementFactory.functionElement6("s", <ClassElement> [a, b,
c], <ClassElement> [d]).type; |
1171 expect(t.isSubtypeOf(s), isTrue); | 1171 expect(t.isSubtypeOf(s), isTrue); |
1172 expect(s.isSubtypeOf(t), isFalse); | 1172 expect(s.isSubtypeOf(t), isFalse); |
1173 } | 1173 } |
1174 | 1174 |
1175 void test_isSubtypeOf_normalParameters_isAssignable() { | 1175 void test_isSubtypeOf_normalParameters_isAssignable() { |
1176 // B extends A | 1176 // B extends A |
1177 // (a) -> void <: (b) -> void | 1177 // (a) -> void <: (b) -> void |
1178 // (b) -> void <: (a) -> void | 1178 // (b) -> void <: (a) -> void |
1179 ClassElement a = ElementFactory.classElement2("A", []); | 1179 ClassElement a = ElementFactory.classElement2("A"); |
1180 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1180 ClassElement b = ElementFactory.classElement("B", a.type); |
1181 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; | 1181 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; |
1182 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b]).ty
pe; | 1182 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b]).ty
pe; |
1183 expect(t.isSubtypeOf(s), isTrue); | 1183 expect(t.isSubtypeOf(s), isTrue); |
1184 expect(s.isSubtypeOf(t), isTrue); | 1184 expect(s.isSubtypeOf(t), isTrue); |
1185 } | 1185 } |
1186 | 1186 |
1187 void test_isSubtypeOf_normalParameters_isNotAssignable() { | 1187 void test_isSubtypeOf_normalParameters_isNotAssignable() { |
1188 // ! (a) -> void <: (b) -> void | 1188 // ! (a) -> void <: (b) -> void |
1189 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [Elemen
tFactory.classElement2("A", [])]).type; | 1189 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [Elemen
tFactory.classElement2("A")]).type; |
1190 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [Elemen
tFactory.classElement2("B", [])]).type; | 1190 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [Elemen
tFactory.classElement2("B")]).type; |
1191 expect(t.isSubtypeOf(s), isFalse); | 1191 expect(t.isSubtypeOf(s), isFalse); |
1192 } | 1192 } |
1193 | 1193 |
1194 void test_isSubtypeOf_normalParameters_sHasMoreParams() { | 1194 void test_isSubtypeOf_normalParameters_sHasMoreParams() { |
1195 // B extends A | 1195 // B extends A |
1196 // ! (a) -> void <: (b, b) -> void | 1196 // ! (a) -> void <: (b, b) -> void |
1197 ClassElement a = ElementFactory.classElement2("A", []); | 1197 ClassElement a = ElementFactory.classElement2("A"); |
1198 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1198 ClassElement b = ElementFactory.classElement("B", a.type); |
1199 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; | 1199 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; |
1200 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b, b])
.type; | 1200 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b, b])
.type; |
1201 expect(t.isSubtypeOf(s), isFalse); | 1201 expect(t.isSubtypeOf(s), isFalse); |
1202 } | 1202 } |
1203 | 1203 |
1204 void test_isSubtypeOf_normalParameters_tHasMoreParams() { | 1204 void test_isSubtypeOf_normalParameters_tHasMoreParams() { |
1205 // B extends A | 1205 // B extends A |
1206 // ! (a, a) -> void <: (a) -> void | 1206 // ! (a, a) -> void <: (a) -> void |
1207 ClassElement a = ElementFactory.classElement2("A", []); | 1207 ClassElement a = ElementFactory.classElement2("A"); |
1208 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1208 ClassElement b = ElementFactory.classElement("B", a.type); |
1209 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a, a])
.type; | 1209 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a, a])
.type; |
1210 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b]).ty
pe; | 1210 FunctionType s = ElementFactory.functionElement5("s", <ClassElement> [b]).ty
pe; |
1211 // note, this is a different assertion from the other "tHasMoreParams" tests
, this is | 1211 // note, this is a different assertion from the other "tHasMoreParams" tests
, this is |
1212 // intentional as it is a difference of the "normal parameters" | 1212 // intentional as it is a difference of the "normal parameters" |
1213 expect(t.isSubtypeOf(s), isFalse); | 1213 expect(t.isSubtypeOf(s), isFalse); |
1214 } | 1214 } |
1215 | 1215 |
1216 void test_isSubtypeOf_Object() { | 1216 void test_isSubtypeOf_Object() { |
1217 // () -> void <: Object | 1217 // () -> void <: Object |
1218 FunctionType f = ElementFactory.functionElement("f").type; | 1218 FunctionType f = ElementFactory.functionElement("f").type; |
1219 InterfaceType t = ElementFactory.object.type; | 1219 InterfaceType t = ElementFactory.object.type; |
1220 expect(f.isSubtypeOf(t), isTrue); | 1220 expect(f.isSubtypeOf(t), isTrue); |
1221 } | 1221 } |
1222 | 1222 |
1223 void test_isSubtypeOf_positionalParameters_isAssignable() { | 1223 void test_isSubtypeOf_positionalParameters_isAssignable() { |
1224 // B extends A | 1224 // B extends A |
1225 // ([a]) -> void <: ([b]) -> void | 1225 // ([a]) -> void <: ([b]) -> void |
1226 // ([b]) -> void <: ([a]) -> void | 1226 // ([b]) -> void <: ([a]) -> void |
1227 ClassElement a = ElementFactory.classElement2("A", []); | 1227 ClassElement a = ElementFactory.classElement2("A"); |
1228 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1228 ClassElement b = ElementFactory.classElement("B", a.type); |
1229 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | 1229 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
1230 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b]).type; | 1230 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b]).type; |
1231 expect(t.isSubtypeOf(s), isTrue); | 1231 expect(t.isSubtypeOf(s), isTrue); |
1232 expect(s.isSubtypeOf(t), isTrue); | 1232 expect(s.isSubtypeOf(t), isTrue); |
1233 } | 1233 } |
1234 | 1234 |
1235 void test_isSubtypeOf_positionalParameters_isNotAssignable() { | 1235 void test_isSubtypeOf_positionalParameters_isNotAssignable() { |
1236 // ! ([a]) -> void <: ([b]) -> void | 1236 // ! ([a]) -> void <: ([b]) -> void |
1237 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
ElementFactory.classElement2("A", [])]).type; | 1237 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
ElementFactory.classElement2("A")]).type; |
1238 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
ElementFactory.classElement2("B", [])]).type; | 1238 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
ElementFactory.classElement2("B")]).type; |
1239 expect(t.isSubtypeOf(s), isFalse); | 1239 expect(t.isSubtypeOf(s), isFalse); |
1240 } | 1240 } |
1241 | 1241 |
1242 void test_isSubtypeOf_positionalParameters_sHasMoreParams() { | 1242 void test_isSubtypeOf_positionalParameters_sHasMoreParams() { |
1243 // B extends A | 1243 // B extends A |
1244 // ! ([a]) -> void <: ([b, b]) -> void | 1244 // ! ([a]) -> void <: ([b, b]) -> void |
1245 ClassElement a = ElementFactory.classElement2("A", []); | 1245 ClassElement a = ElementFactory.classElement2("A"); |
1246 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1246 ClassElement b = ElementFactory.classElement("B", a.type); |
1247 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | 1247 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
1248 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b, b]).type; | 1248 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b, b]).type; |
1249 expect(t.isSubtypeOf(s), isFalse); | 1249 expect(t.isSubtypeOf(s), isFalse); |
1250 } | 1250 } |
1251 | 1251 |
1252 void test_isSubtypeOf_positionalParameters_tHasMoreParams() { | 1252 void test_isSubtypeOf_positionalParameters_tHasMoreParams() { |
1253 // B extends A | 1253 // B extends A |
1254 // ([a, a]) -> void <: ([b]) -> void | 1254 // ([a, a]) -> void <: ([b]) -> void |
1255 ClassElement a = ElementFactory.classElement2("A", []); | 1255 ClassElement a = ElementFactory.classElement2("A"); |
1256 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1256 ClassElement b = ElementFactory.classElement("B", a.type); |
1257 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a, a]).type; | 1257 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a, a]).type; |
1258 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b]).type; | 1258 FunctionType s = ElementFactory.functionElement6("s", null, <ClassElement> [
b]).type; |
1259 expect(t.isSubtypeOf(s), isTrue); | 1259 expect(t.isSubtypeOf(s), isTrue); |
1260 } | 1260 } |
1261 | 1261 |
1262 void test_isSubtypeOf_returnType_sIsVoid() { | 1262 void test_isSubtypeOf_returnType_sIsVoid() { |
1263 // () -> void <: void | 1263 // () -> void <: void |
1264 FunctionType t = ElementFactory.functionElement("t").type; | 1264 FunctionType t = ElementFactory.functionElement("t").type; |
1265 FunctionType s = ElementFactory.functionElement("s").type; | 1265 FunctionType s = ElementFactory.functionElement("s").type; |
1266 // function s has the implicit return type of void, we assert it here | 1266 // function s has the implicit return type of void, we assert it here |
1267 expect(VoidTypeImpl.instance == s.returnType, isTrue); | 1267 expect(VoidTypeImpl.instance == s.returnType, isTrue); |
1268 expect(t.isSubtypeOf(s), isTrue); | 1268 expect(t.isSubtypeOf(s), isTrue); |
1269 } | 1269 } |
1270 | 1270 |
1271 void test_isSubtypeOf_returnType_tAssignableToS() { | 1271 void test_isSubtypeOf_returnType_tAssignableToS() { |
1272 // B extends A | 1272 // B extends A |
1273 // () -> A <: () -> B | 1273 // () -> A <: () -> B |
1274 // () -> B <: () -> A | 1274 // () -> B <: () -> A |
1275 ClassElement a = ElementFactory.classElement2("A", []); | 1275 ClassElement a = ElementFactory.classElement2("A"); |
1276 ClassElement b = ElementFactory.classElement("B", a.type, []); | 1276 ClassElement b = ElementFactory.classElement("B", a.type); |
1277 FunctionType t = ElementFactory.functionElement2("t", a).type; | 1277 FunctionType t = ElementFactory.functionElement2("t", a).type; |
1278 FunctionType s = ElementFactory.functionElement2("s", b).type; | 1278 FunctionType s = ElementFactory.functionElement2("s", b).type; |
1279 expect(t.isSubtypeOf(s), isTrue); | 1279 expect(t.isSubtypeOf(s), isTrue); |
1280 expect(s.isSubtypeOf(t), isTrue); | 1280 expect(s.isSubtypeOf(t), isTrue); |
1281 } | 1281 } |
1282 | 1282 |
1283 void test_isSubtypeOf_returnType_tNotAssignableToS() { | 1283 void test_isSubtypeOf_returnType_tNotAssignableToS() { |
1284 // ! () -> A <: () -> B | 1284 // ! () -> A <: () -> B |
1285 FunctionType t = ElementFactory.functionElement2("t", ElementFactory.classEl
ement2("A", [])).type; | 1285 FunctionType t = ElementFactory.functionElement2("t", ElementFactory.classEl
ement2("A")).type; |
1286 FunctionType s = ElementFactory.functionElement2("s", ElementFactory.classEl
ement2("B", [])).type; | 1286 FunctionType s = ElementFactory.functionElement2("s", ElementFactory.classEl
ement2("B")).type; |
1287 expect(t.isSubtypeOf(s), isFalse); | 1287 expect(t.isSubtypeOf(s), isFalse); |
1288 } | 1288 } |
1289 | 1289 |
1290 void test_isSubtypeOf_typeParameters_matchesBounds() { | 1290 void test_isSubtypeOf_typeParameters_matchesBounds() { |
1291 TestTypeProvider provider = new TestTypeProvider(); | 1291 TestTypeProvider provider = new TestTypeProvider(); |
1292 InterfaceType boolType = provider.boolType; | 1292 InterfaceType boolType = provider.boolType; |
1293 InterfaceType stringType = provider.stringType; | 1293 InterfaceType stringType = provider.stringType; |
1294 TypeParameterElementImpl parameterB = new TypeParameterElementImpl.forNode(A
stFactory.identifier3("B")); | 1294 TypeParameterElementImpl parameterB = new TypeParameterElementImpl.forNode(A
stFactory.identifier3("B")); |
1295 parameterB.bound = boolType; | 1295 parameterB.bound = boolType; |
1296 TypeParameterTypeImpl typeB = new TypeParameterTypeImpl(parameterB); | 1296 TypeParameterTypeImpl typeB = new TypeParameterTypeImpl(parameterB); |
(...skipping 13 matching lines...) Expand all Loading... |
1310 ElementFactory.positionalParameter2("d", stringType)]; | 1310 ElementFactory.positionalParameter2("d", stringType)]; |
1311 functionElement.returnType = provider.dynamicType; | 1311 functionElement.returnType = provider.dynamicType; |
1312 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); | 1312 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement); |
1313 functionElement.type = functionType; | 1313 functionElement.type = functionType; |
1314 expect(functionType.isAssignableTo(functionAliasType), isTrue); | 1314 expect(functionType.isAssignableTo(functionAliasType), isTrue); |
1315 } | 1315 } |
1316 | 1316 |
1317 void test_isSubtypeOf_wrongFunctionType_normal_named() { | 1317 void test_isSubtypeOf_wrongFunctionType_normal_named() { |
1318 // ! (a) -> void <: ({name: A}) -> void | 1318 // ! (a) -> void <: ({name: A}) -> void |
1319 // ! ({name: A}) -> void <: (a) -> void | 1319 // ! ({name: A}) -> void <: (a) -> void |
1320 ClassElement a = ElementFactory.classElement2("A", []); | 1320 ClassElement a = ElementFactory.classElement2("A"); |
1321 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; | 1321 FunctionType t = ElementFactory.functionElement5("t", <ClassElement> [a]).ty
pe; |
1322 FunctionType s = ElementFactory.functionElement7("s", null, <String> ["name"
], <ClassElement> [a]).type; | 1322 FunctionType s = ElementFactory.functionElement7("s", null, <String> ["name"
], <ClassElement> [a]).type; |
1323 expect(t.isSubtypeOf(s), isFalse); | 1323 expect(t.isSubtypeOf(s), isFalse); |
1324 expect(s.isSubtypeOf(t), isFalse); | 1324 expect(s.isSubtypeOf(t), isFalse); |
1325 } | 1325 } |
1326 | 1326 |
1327 void test_isSubtypeOf_wrongFunctionType_optional_named() { | 1327 void test_isSubtypeOf_wrongFunctionType_optional_named() { |
1328 // ! ([a]) -> void <: ({name: A}) -> void | 1328 // ! ([a]) -> void <: ({name: A}) -> void |
1329 // ! ({name: A}) -> void <: ([a]) -> void | 1329 // ! ({name: A}) -> void <: ([a]) -> void |
1330 ClassElement a = ElementFactory.classElement2("A", []); | 1330 ClassElement a = ElementFactory.classElement2("A"); |
1331 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | 1331 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
1332 FunctionType s = ElementFactory.functionElement7("s", null, <String> ["name"
], <ClassElement> [a]).type; | 1332 FunctionType s = ElementFactory.functionElement7("s", null, <String> ["name"
], <ClassElement> [a]).type; |
1333 expect(t.isSubtypeOf(s), isFalse); | 1333 expect(t.isSubtypeOf(s), isFalse); |
1334 expect(s.isSubtypeOf(t), isFalse); | 1334 expect(s.isSubtypeOf(t), isFalse); |
1335 } | 1335 } |
1336 | 1336 |
1337 void test_setTypeArguments() { | 1337 void test_setTypeArguments() { |
1338 ClassElementImpl enclosingClass = ElementFactory.classElement2("C", ["E"]); | 1338 ClassElementImpl enclosingClass = ElementFactory.classElement2("C", ["E"]); |
1339 MethodElementImpl methodElement = new MethodElementImpl.forNode(AstFactory.i
dentifier3("m")); | 1339 MethodElementImpl methodElement = new MethodElementImpl.forNode(AstFactory.i
dentifier3("m")); |
1340 enclosingClass.methods = <MethodElement> [methodElement]; | 1340 enclosingClass.methods = <MethodElement> [methodElement]; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1446 // Object | 1446 // Object |
1447 // | | 1447 // | |
1448 // A | 1448 // A |
1449 // / \ | 1449 // / \ |
1450 // B C | 1450 // B C |
1451 // | | | 1451 // | | |
1452 // | D | 1452 // | D |
1453 // \ / | 1453 // \ / |
1454 // E | 1454 // E |
1455 // | 1455 // |
1456 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1456 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1457 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 1457 ClassElementImpl classB = ElementFactory.classElement2("B"); |
1458 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1458 ClassElementImpl classC = ElementFactory.classElement2("C"); |
1459 ClassElementImpl classD = ElementFactory.classElement2("D", []); | 1459 ClassElementImpl classD = ElementFactory.classElement2("D"); |
1460 ClassElementImpl classE = ElementFactory.classElement2("E", []); | 1460 ClassElementImpl classE = ElementFactory.classElement2("E"); |
1461 classB.interfaces = <InterfaceType> [classA.type]; | 1461 classB.interfaces = <InterfaceType> [classA.type]; |
1462 classC.interfaces = <InterfaceType> [classA.type]; | 1462 classC.interfaces = <InterfaceType> [classA.type]; |
1463 classD.interfaces = <InterfaceType> [classC.type]; | 1463 classD.interfaces = <InterfaceType> [classC.type]; |
1464 classE.interfaces = <InterfaceType> [classB.type, classD.type]; | 1464 classE.interfaces = <InterfaceType> [classB.type, classD.type]; |
1465 // assertion: even though the longest path to Object for typeB is 2, and typ
eE implements typeB, | 1465 // assertion: even though the longest path to Object for typeB is 2, and typ
eE implements typeB, |
1466 // the longest path for typeE is 4 since it also implements typeD | 1466 // the longest path for typeE is 4 since it also implements typeD |
1467 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2); | 1467 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2); |
1468 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classE.type),
4); | 1468 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classE.type),
4); |
1469 } | 1469 } |
1470 | 1470 |
1471 void test_computeLongestInheritancePathToObject_multipleSuperclassPaths() { | 1471 void test_computeLongestInheritancePathToObject_multipleSuperclassPaths() { |
1472 // | 1472 // |
1473 // Object | 1473 // Object |
1474 // | | 1474 // | |
1475 // A | 1475 // A |
1476 // / \ | 1476 // / \ |
1477 // B C | 1477 // B C |
1478 // | | | 1478 // | | |
1479 // | D | 1479 // | D |
1480 // \ / | 1480 // \ / |
1481 // E | 1481 // E |
1482 // | 1482 // |
1483 ClassElement classA = ElementFactory.classElement2("A", []); | 1483 ClassElement classA = ElementFactory.classElement2("A"); |
1484 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1484 ClassElement classB = ElementFactory.classElement("B", classA.type); |
1485 ClassElement classC = ElementFactory.classElement("C", classA.type, []); | 1485 ClassElement classC = ElementFactory.classElement("C", classA.type); |
1486 ClassElement classD = ElementFactory.classElement("D", classC.type, []); | 1486 ClassElement classD = ElementFactory.classElement("D", classC.type); |
1487 ClassElementImpl classE = ElementFactory.classElement("E", classB.type, []); | 1487 ClassElementImpl classE = ElementFactory.classElement("E", classB.type); |
1488 classE.interfaces = <InterfaceType> [classD.type]; | 1488 classE.interfaces = <InterfaceType> [classD.type]; |
1489 // assertion: even though the longest path to Object for typeB is 2, and typ
eE extends typeB, | 1489 // assertion: even though the longest path to Object for typeB is 2, and typ
eE extends typeB, |
1490 // the longest path for typeE is 4 since it also implements typeD | 1490 // the longest path for typeE is 4 since it also implements typeD |
1491 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2); | 1491 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2); |
1492 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classE.type),
4); | 1492 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classE.type),
4); |
1493 } | 1493 } |
1494 | 1494 |
1495 void test_computeLongestInheritancePathToObject_object() { | 1495 void test_computeLongestInheritancePathToObject_object() { |
1496 // | 1496 // |
1497 // Object | 1497 // Object |
1498 // | | 1498 // | |
1499 // A | 1499 // A |
1500 // | 1500 // |
1501 ClassElement classA = ElementFactory.classElement2("A", []); | 1501 ClassElement classA = ElementFactory.classElement2("A"); |
1502 InterfaceType object = classA.supertype; | 1502 InterfaceType object = classA.supertype; |
1503 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(object), 0); | 1503 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(object), 0); |
1504 } | 1504 } |
1505 | 1505 |
1506 void test_computeLongestInheritancePathToObject_recursion() { | 1506 void test_computeLongestInheritancePathToObject_recursion() { |
1507 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1507 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1508 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 1508 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
1509 classA.supertype = classB.type; | 1509 classA.supertype = classB.type; |
1510 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
2); | 1510 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
2); |
1511 } | 1511 } |
1512 | 1512 |
1513 void test_computeLongestInheritancePathToObject_singleInterfacePath() { | 1513 void test_computeLongestInheritancePathToObject_singleInterfacePath() { |
1514 // | 1514 // |
1515 // Object | 1515 // Object |
1516 // | | 1516 // | |
1517 // A | 1517 // A |
1518 // | | 1518 // | |
1519 // B | 1519 // B |
1520 // | | 1520 // | |
1521 // C | 1521 // C |
1522 // | 1522 // |
1523 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1523 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1524 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 1524 ClassElementImpl classB = ElementFactory.classElement2("B"); |
1525 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1525 ClassElementImpl classC = ElementFactory.classElement2("C"); |
1526 classB.interfaces = <InterfaceType> [classA.type]; | 1526 classB.interfaces = <InterfaceType> [classA.type]; |
1527 classC.interfaces = <InterfaceType> [classB.type]; | 1527 classC.interfaces = <InterfaceType> [classB.type]; |
1528 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
1); | 1528 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
1); |
1529 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2); | 1529 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2); |
1530 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classC.type),
3); | 1530 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classC.type),
3); |
1531 } | 1531 } |
1532 | 1532 |
1533 void test_computeLongestInheritancePathToObject_singleSuperclassPath() { | 1533 void test_computeLongestInheritancePathToObject_singleSuperclassPath() { |
1534 // | 1534 // |
1535 // Object | 1535 // Object |
1536 // | | 1536 // | |
1537 // A | 1537 // A |
1538 // | | 1538 // | |
1539 // B | 1539 // B |
1540 // | | 1540 // | |
1541 // C | 1541 // C |
1542 // | 1542 // |
1543 ClassElement classA = ElementFactory.classElement2("A", []); | 1543 ClassElement classA = ElementFactory.classElement2("A"); |
1544 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1544 ClassElement classB = ElementFactory.classElement("B", classA.type); |
1545 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | 1545 ClassElement classC = ElementFactory.classElement("C", classB.type); |
1546 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
1); | 1546 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classA.type),
1); |
1547 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2); | 1547 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classB.type),
2); |
1548 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classC.type),
3); | 1548 expect(InterfaceTypeImpl.computeLongestInheritancePathToObject(classC.type),
3); |
1549 } | 1549 } |
1550 | 1550 |
1551 void test_computeSuperinterfaceSet_genericInterfacePath() { | 1551 void test_computeSuperinterfaceSet_genericInterfacePath() { |
1552 // | 1552 // |
1553 // A | 1553 // A |
1554 // | implements | 1554 // | implements |
1555 // B<T> | 1555 // B<T> |
1556 // | implements | 1556 // | implements |
1557 // C<T> | 1557 // C<T> |
1558 // | 1558 // |
1559 // D | 1559 // D |
1560 // | 1560 // |
1561 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1561 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1562 ClassElementImpl classB = ElementFactory.classElement2("B", ["T"]); | 1562 ClassElementImpl classB = ElementFactory.classElement2("B", ["T"]); |
1563 ClassElementImpl classC = ElementFactory.classElement2("C", ["T"]); | 1563 ClassElementImpl classC = ElementFactory.classElement2("C", ["T"]); |
1564 ClassElement classD = ElementFactory.classElement2("D", []); | 1564 ClassElement classD = ElementFactory.classElement2("D"); |
1565 InterfaceType typeA = classA.type; | 1565 InterfaceType typeA = classA.type; |
1566 classB.interfaces = <InterfaceType> [typeA]; | 1566 classB.interfaces = <InterfaceType> [typeA]; |
1567 InterfaceTypeImpl typeBT = new InterfaceTypeImpl.con1(classB); | 1567 InterfaceTypeImpl typeBT = new InterfaceTypeImpl.con1(classB); |
1568 DartType typeT = classC.type.typeArguments[0]; | 1568 DartType typeT = classC.type.typeArguments[0]; |
1569 typeBT.typeArguments = <DartType> [typeT]; | 1569 typeBT.typeArguments = <DartType> [typeT]; |
1570 classC.interfaces = <InterfaceType> [typeBT]; | 1570 classC.interfaces = <InterfaceType> [typeBT]; |
1571 // A | 1571 // A |
1572 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(typeA); | 1572 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(typeA); |
1573 expect(superinterfacesOfA, hasLength(1)); | 1573 expect(superinterfacesOfA, hasLength(1)); |
1574 InterfaceType typeObject = ElementFactory.object.type; | 1574 InterfaceType typeObject = ElementFactory.object.type; |
(...skipping 18 matching lines...) Expand all Loading... |
1593 void test_computeSuperinterfaceSet_genericSuperclassPath() { | 1593 void test_computeSuperinterfaceSet_genericSuperclassPath() { |
1594 // | 1594 // |
1595 // A | 1595 // A |
1596 // | | 1596 // | |
1597 // B<T> | 1597 // B<T> |
1598 // | | 1598 // | |
1599 // C<T> | 1599 // C<T> |
1600 // | 1600 // |
1601 // D | 1601 // D |
1602 // | 1602 // |
1603 ClassElement classA = ElementFactory.classElement2("A", []); | 1603 ClassElement classA = ElementFactory.classElement2("A"); |
1604 InterfaceType typeA = classA.type; | 1604 InterfaceType typeA = classA.type; |
1605 ClassElement classB = ElementFactory.classElement("B", typeA, ["T"]); | 1605 ClassElement classB = ElementFactory.classElement("B", typeA, ["T"]); |
1606 ClassElementImpl classC = ElementFactory.classElement2("C", ["T"]); | 1606 ClassElementImpl classC = ElementFactory.classElement2("C", ["T"]); |
1607 InterfaceTypeImpl typeBT = new InterfaceTypeImpl.con1(classB); | 1607 InterfaceTypeImpl typeBT = new InterfaceTypeImpl.con1(classB); |
1608 DartType typeT = classC.type.typeArguments[0]; | 1608 DartType typeT = classC.type.typeArguments[0]; |
1609 typeBT.typeArguments = <DartType> [typeT]; | 1609 typeBT.typeArguments = <DartType> [typeT]; |
1610 classC.supertype = typeBT; | 1610 classC.supertype = typeBT; |
1611 ClassElement classD = ElementFactory.classElement2("D", []); | 1611 ClassElement classD = ElementFactory.classElement2("D"); |
1612 // A | 1612 // A |
1613 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(typeA); | 1613 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(typeA); |
1614 expect(superinterfacesOfA, hasLength(1)); | 1614 expect(superinterfacesOfA, hasLength(1)); |
1615 InterfaceType typeObject = ElementFactory.object.type; | 1615 InterfaceType typeObject = ElementFactory.object.type; |
1616 expect(superinterfacesOfA.contains(typeObject), isTrue); | 1616 expect(superinterfacesOfA.contains(typeObject), isTrue); |
1617 // B<D> | 1617 // B<D> |
1618 InterfaceTypeImpl typeBD = new InterfaceTypeImpl.con1(classB); | 1618 InterfaceTypeImpl typeBD = new InterfaceTypeImpl.con1(classB); |
1619 typeBD.typeArguments = <DartType> [classD.type]; | 1619 typeBD.typeArguments = <DartType> [classD.type]; |
1620 Set<InterfaceType> superinterfacesOfBD = InterfaceTypeImpl.computeSuperinter
faceSet(typeBD); | 1620 Set<InterfaceType> superinterfacesOfBD = InterfaceTypeImpl.computeSuperinter
faceSet(typeBD); |
1621 expect(superinterfacesOfBD, hasLength(2)); | 1621 expect(superinterfacesOfBD, hasLength(2)); |
1622 expect(superinterfacesOfBD.contains(typeObject), isTrue); | 1622 expect(superinterfacesOfBD.contains(typeObject), isTrue); |
1623 expect(superinterfacesOfBD.contains(typeA), isTrue); | 1623 expect(superinterfacesOfBD.contains(typeA), isTrue); |
1624 // C<D> | 1624 // C<D> |
1625 InterfaceTypeImpl typeCD = new InterfaceTypeImpl.con1(classC); | 1625 InterfaceTypeImpl typeCD = new InterfaceTypeImpl.con1(classC); |
1626 typeCD.typeArguments = <DartType> [classD.type]; | 1626 typeCD.typeArguments = <DartType> [classD.type]; |
1627 Set<InterfaceType> superinterfacesOfCD = InterfaceTypeImpl.computeSuperinter
faceSet(typeCD); | 1627 Set<InterfaceType> superinterfacesOfCD = InterfaceTypeImpl.computeSuperinter
faceSet(typeCD); |
1628 expect(superinterfacesOfCD, hasLength(3)); | 1628 expect(superinterfacesOfCD, hasLength(3)); |
1629 expect(superinterfacesOfCD.contains(typeObject), isTrue); | 1629 expect(superinterfacesOfCD.contains(typeObject), isTrue); |
1630 expect(superinterfacesOfCD.contains(typeA), isTrue); | 1630 expect(superinterfacesOfCD.contains(typeA), isTrue); |
1631 expect(superinterfacesOfCD.contains(typeBD), isTrue); | 1631 expect(superinterfacesOfCD.contains(typeBD), isTrue); |
1632 } | 1632 } |
1633 | 1633 |
1634 void test_computeSuperinterfaceSet_multipleInterfacePaths() { | 1634 void test_computeSuperinterfaceSet_multipleInterfacePaths() { |
1635 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1635 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1636 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 1636 ClassElementImpl classB = ElementFactory.classElement2("B"); |
1637 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1637 ClassElementImpl classC = ElementFactory.classElement2("C"); |
1638 ClassElementImpl classD = ElementFactory.classElement2("D", []); | 1638 ClassElementImpl classD = ElementFactory.classElement2("D"); |
1639 ClassElementImpl classE = ElementFactory.classElement2("E", []); | 1639 ClassElementImpl classE = ElementFactory.classElement2("E"); |
1640 classB.interfaces = <InterfaceType> [classA.type]; | 1640 classB.interfaces = <InterfaceType> [classA.type]; |
1641 classC.interfaces = <InterfaceType> [classA.type]; | 1641 classC.interfaces = <InterfaceType> [classA.type]; |
1642 classD.interfaces = <InterfaceType> [classC.type]; | 1642 classD.interfaces = <InterfaceType> [classC.type]; |
1643 classE.interfaces = <InterfaceType> [classB.type, classD.type]; | 1643 classE.interfaces = <InterfaceType> [classB.type, classD.type]; |
1644 // D | 1644 // D |
1645 Set<InterfaceType> superinterfacesOfD = InterfaceTypeImpl.computeSuperinterf
aceSet(classD.type); | 1645 Set<InterfaceType> superinterfacesOfD = InterfaceTypeImpl.computeSuperinterf
aceSet(classD.type); |
1646 expect(superinterfacesOfD, hasLength(3)); | 1646 expect(superinterfacesOfD, hasLength(3)); |
1647 expect(superinterfacesOfD.contains(ElementFactory.object.type), isTrue); | 1647 expect(superinterfacesOfD.contains(ElementFactory.object.type), isTrue); |
1648 expect(superinterfacesOfD.contains(classA.type), isTrue); | 1648 expect(superinterfacesOfD.contains(classA.type), isTrue); |
1649 expect(superinterfacesOfD.contains(classC.type), isTrue); | 1649 expect(superinterfacesOfD.contains(classC.type), isTrue); |
1650 // E | 1650 // E |
1651 Set<InterfaceType> superinterfacesOfE = InterfaceTypeImpl.computeSuperinterf
aceSet(classE.type); | 1651 Set<InterfaceType> superinterfacesOfE = InterfaceTypeImpl.computeSuperinterf
aceSet(classE.type); |
1652 expect(superinterfacesOfE, hasLength(5)); | 1652 expect(superinterfacesOfE, hasLength(5)); |
1653 expect(superinterfacesOfE.contains(ElementFactory.object.type), isTrue); | 1653 expect(superinterfacesOfE.contains(ElementFactory.object.type), isTrue); |
1654 expect(superinterfacesOfE.contains(classA.type), isTrue); | 1654 expect(superinterfacesOfE.contains(classA.type), isTrue); |
1655 expect(superinterfacesOfE.contains(classB.type), isTrue); | 1655 expect(superinterfacesOfE.contains(classB.type), isTrue); |
1656 expect(superinterfacesOfE.contains(classC.type), isTrue); | 1656 expect(superinterfacesOfE.contains(classC.type), isTrue); |
1657 expect(superinterfacesOfE.contains(classD.type), isTrue); | 1657 expect(superinterfacesOfE.contains(classD.type), isTrue); |
1658 } | 1658 } |
1659 | 1659 |
1660 void test_computeSuperinterfaceSet_multipleSuperclassPaths() { | 1660 void test_computeSuperinterfaceSet_multipleSuperclassPaths() { |
1661 ClassElement classA = ElementFactory.classElement2("A", []); | 1661 ClassElement classA = ElementFactory.classElement2("A"); |
1662 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1662 ClassElement classB = ElementFactory.classElement("B", classA.type); |
1663 ClassElement classC = ElementFactory.classElement("C", classA.type, []); | 1663 ClassElement classC = ElementFactory.classElement("C", classA.type); |
1664 ClassElement classD = ElementFactory.classElement("D", classC.type, []); | 1664 ClassElement classD = ElementFactory.classElement("D", classC.type); |
1665 ClassElementImpl classE = ElementFactory.classElement("E", classB.type, []); | 1665 ClassElementImpl classE = ElementFactory.classElement("E", classB.type); |
1666 classE.interfaces = <InterfaceType> [classD.type]; | 1666 classE.interfaces = <InterfaceType> [classD.type]; |
1667 // D | 1667 // D |
1668 Set<InterfaceType> superinterfacesOfD = InterfaceTypeImpl.computeSuperinterf
aceSet(classD.type); | 1668 Set<InterfaceType> superinterfacesOfD = InterfaceTypeImpl.computeSuperinterf
aceSet(classD.type); |
1669 expect(superinterfacesOfD, hasLength(3)); | 1669 expect(superinterfacesOfD, hasLength(3)); |
1670 expect(superinterfacesOfD.contains(ElementFactory.object.type), isTrue); | 1670 expect(superinterfacesOfD.contains(ElementFactory.object.type), isTrue); |
1671 expect(superinterfacesOfD.contains(classA.type), isTrue); | 1671 expect(superinterfacesOfD.contains(classA.type), isTrue); |
1672 expect(superinterfacesOfD.contains(classC.type), isTrue); | 1672 expect(superinterfacesOfD.contains(classC.type), isTrue); |
1673 // E | 1673 // E |
1674 Set<InterfaceType> superinterfacesOfE = InterfaceTypeImpl.computeSuperinterf
aceSet(classE.type); | 1674 Set<InterfaceType> superinterfacesOfE = InterfaceTypeImpl.computeSuperinterf
aceSet(classE.type); |
1675 expect(superinterfacesOfE, hasLength(5)); | 1675 expect(superinterfacesOfE, hasLength(5)); |
1676 expect(superinterfacesOfE.contains(ElementFactory.object.type), isTrue); | 1676 expect(superinterfacesOfE.contains(ElementFactory.object.type), isTrue); |
1677 expect(superinterfacesOfE.contains(classA.type), isTrue); | 1677 expect(superinterfacesOfE.contains(classA.type), isTrue); |
1678 expect(superinterfacesOfE.contains(classB.type), isTrue); | 1678 expect(superinterfacesOfE.contains(classB.type), isTrue); |
1679 expect(superinterfacesOfE.contains(classC.type), isTrue); | 1679 expect(superinterfacesOfE.contains(classC.type), isTrue); |
1680 expect(superinterfacesOfE.contains(classD.type), isTrue); | 1680 expect(superinterfacesOfE.contains(classD.type), isTrue); |
1681 } | 1681 } |
1682 | 1682 |
1683 void test_computeSuperinterfaceSet_recursion() { | 1683 void test_computeSuperinterfaceSet_recursion() { |
1684 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1684 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1685 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 1685 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
1686 classA.supertype = classB.type; | 1686 classA.supertype = classB.type; |
1687 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); | 1687 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); |
1688 expect(superinterfacesOfB, hasLength(2)); | 1688 expect(superinterfacesOfB, hasLength(2)); |
1689 } | 1689 } |
1690 | 1690 |
1691 void test_computeSuperinterfaceSet_singleInterfacePath() { | 1691 void test_computeSuperinterfaceSet_singleInterfacePath() { |
1692 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1692 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1693 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 1693 ClassElementImpl classB = ElementFactory.classElement2("B"); |
1694 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1694 ClassElementImpl classC = ElementFactory.classElement2("C"); |
1695 classB.interfaces = <InterfaceType> [classA.type]; | 1695 classB.interfaces = <InterfaceType> [classA.type]; |
1696 classC.interfaces = <InterfaceType> [classB.type]; | 1696 classC.interfaces = <InterfaceType> [classB.type]; |
1697 // A | 1697 // A |
1698 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(classA.type); | 1698 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(classA.type); |
1699 expect(superinterfacesOfA, hasLength(1)); | 1699 expect(superinterfacesOfA, hasLength(1)); |
1700 expect(superinterfacesOfA.contains(ElementFactory.object.type), isTrue); | 1700 expect(superinterfacesOfA.contains(ElementFactory.object.type), isTrue); |
1701 // B | 1701 // B |
1702 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); | 1702 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); |
1703 expect(superinterfacesOfB, hasLength(2)); | 1703 expect(superinterfacesOfB, hasLength(2)); |
1704 expect(superinterfacesOfB.contains(ElementFactory.object.type), isTrue); | 1704 expect(superinterfacesOfB.contains(ElementFactory.object.type), isTrue); |
1705 expect(superinterfacesOfB.contains(classA.type), isTrue); | 1705 expect(superinterfacesOfB.contains(classA.type), isTrue); |
1706 // C | 1706 // C |
1707 Set<InterfaceType> superinterfacesOfC = InterfaceTypeImpl.computeSuperinterf
aceSet(classC.type); | 1707 Set<InterfaceType> superinterfacesOfC = InterfaceTypeImpl.computeSuperinterf
aceSet(classC.type); |
1708 expect(superinterfacesOfC, hasLength(3)); | 1708 expect(superinterfacesOfC, hasLength(3)); |
1709 expect(superinterfacesOfC.contains(ElementFactory.object.type), isTrue); | 1709 expect(superinterfacesOfC.contains(ElementFactory.object.type), isTrue); |
1710 expect(superinterfacesOfC.contains(classA.type), isTrue); | 1710 expect(superinterfacesOfC.contains(classA.type), isTrue); |
1711 expect(superinterfacesOfC.contains(classB.type), isTrue); | 1711 expect(superinterfacesOfC.contains(classB.type), isTrue); |
1712 } | 1712 } |
1713 | 1713 |
1714 void test_computeSuperinterfaceSet_singleSuperclassPath() { | 1714 void test_computeSuperinterfaceSet_singleSuperclassPath() { |
1715 // | 1715 // |
1716 // A | 1716 // A |
1717 // | | 1717 // | |
1718 // B | 1718 // B |
1719 // | | 1719 // | |
1720 // C | 1720 // C |
1721 // | 1721 // |
1722 ClassElement classA = ElementFactory.classElement2("A", []); | 1722 ClassElement classA = ElementFactory.classElement2("A"); |
1723 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1723 ClassElement classB = ElementFactory.classElement("B", classA.type); |
1724 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | 1724 ClassElement classC = ElementFactory.classElement("C", classB.type); |
1725 // A | 1725 // A |
1726 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(classA.type); | 1726 Set<InterfaceType> superinterfacesOfA = InterfaceTypeImpl.computeSuperinterf
aceSet(classA.type); |
1727 expect(superinterfacesOfA, hasLength(1)); | 1727 expect(superinterfacesOfA, hasLength(1)); |
1728 expect(superinterfacesOfA.contains(ElementFactory.object.type), isTrue); | 1728 expect(superinterfacesOfA.contains(ElementFactory.object.type), isTrue); |
1729 // B | 1729 // B |
1730 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); | 1730 Set<InterfaceType> superinterfacesOfB = InterfaceTypeImpl.computeSuperinterf
aceSet(classB.type); |
1731 expect(superinterfacesOfB, hasLength(2)); | 1731 expect(superinterfacesOfB, hasLength(2)); |
1732 expect(superinterfacesOfB.contains(ElementFactory.object.type), isTrue); | 1732 expect(superinterfacesOfB.contains(ElementFactory.object.type), isTrue); |
1733 expect(superinterfacesOfB.contains(classA.type), isTrue); | 1733 expect(superinterfacesOfB.contains(classA.type), isTrue); |
1734 // C | 1734 // C |
1735 Set<InterfaceType> superinterfacesOfC = InterfaceTypeImpl.computeSuperinterf
aceSet(classC.type); | 1735 Set<InterfaceType> superinterfacesOfC = InterfaceTypeImpl.computeSuperinterf
aceSet(classC.type); |
1736 expect(superinterfacesOfC, hasLength(3)); | 1736 expect(superinterfacesOfC, hasLength(3)); |
1737 expect(superinterfacesOfC.contains(ElementFactory.object.type), isTrue); | 1737 expect(superinterfacesOfC.contains(ElementFactory.object.type), isTrue); |
1738 expect(superinterfacesOfC.contains(classA.type), isTrue); | 1738 expect(superinterfacesOfC.contains(classA.type), isTrue); |
1739 expect(superinterfacesOfC.contains(classB.type), isTrue); | 1739 expect(superinterfacesOfC.contains(classB.type), isTrue); |
1740 } | 1740 } |
1741 | 1741 |
1742 void test_creation() { | 1742 void test_creation() { |
1743 expect(new InterfaceTypeImpl.con1(ElementFactory.classElement2("A", [])), is
NotNull); | 1743 expect(new InterfaceTypeImpl.con1(ElementFactory.classElement2("A")), isNotN
ull); |
1744 } | 1744 } |
1745 | 1745 |
1746 void test_getAccessors() { | 1746 void test_getAccessors() { |
1747 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); | 1747 ClassElementImpl typeElement = ElementFactory.classElement2("A"); |
1748 PropertyAccessorElement getterG = ElementFactory.getterElement("g", false, n
ull); | 1748 PropertyAccessorElement getterG = ElementFactory.getterElement("g", false, n
ull); |
1749 PropertyAccessorElement getterH = ElementFactory.getterElement("h", false, n
ull); | 1749 PropertyAccessorElement getterH = ElementFactory.getterElement("h", false, n
ull); |
1750 typeElement.accessors = <PropertyAccessorElement> [getterG, getterH]; | 1750 typeElement.accessors = <PropertyAccessorElement> [getterG, getterH]; |
1751 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); | 1751 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |
1752 expect(type.accessors.length, 2); | 1752 expect(type.accessors.length, 2); |
1753 } | 1753 } |
1754 | 1754 |
1755 void test_getAccessors_empty() { | 1755 void test_getAccessors_empty() { |
1756 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); | 1756 ClassElementImpl typeElement = ElementFactory.classElement2("A"); |
1757 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); | 1757 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |
1758 expect(type.accessors.length, 0); | 1758 expect(type.accessors.length, 0); |
1759 } | 1759 } |
1760 | 1760 |
1761 void test_getElement() { | 1761 void test_getElement() { |
1762 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); | 1762 ClassElementImpl typeElement = ElementFactory.classElement2("A"); |
1763 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); | 1763 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |
1764 expect(type.element, typeElement); | 1764 expect(type.element, typeElement); |
1765 } | 1765 } |
1766 | 1766 |
1767 void test_getGetter_implemented() { | 1767 void test_getGetter_implemented() { |
1768 // | 1768 // |
1769 // class A { g {} } | 1769 // class A { g {} } |
1770 // | 1770 // |
1771 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1771 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1772 String getterName = "g"; | 1772 String getterName = "g"; |
1773 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); | 1773 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); |
1774 classA.accessors = <PropertyAccessorElement> [getterG]; | 1774 classA.accessors = <PropertyAccessorElement> [getterG]; |
1775 InterfaceType typeA = classA.type; | 1775 InterfaceType typeA = classA.type; |
1776 expect(typeA.getGetter(getterName), same(getterG)); | 1776 expect(typeA.getGetter(getterName), same(getterG)); |
1777 } | 1777 } |
1778 | 1778 |
1779 void test_getGetter_parameterized() { | 1779 void test_getGetter_parameterized() { |
1780 // | 1780 // |
1781 // class A<E> { E get g {} } | 1781 // class A<E> { E get g {} } |
1782 // | 1782 // |
1783 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | 1783 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
1784 DartType typeE = classA.type.typeArguments[0]; | 1784 DartType typeE = classA.type.typeArguments[0]; |
1785 String getterName = "g"; | 1785 String getterName = "g"; |
1786 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, typeE); | 1786 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, typeE); |
1787 classA.accessors = <PropertyAccessorElement> [getterG]; | 1787 classA.accessors = <PropertyAccessorElement> [getterG]; |
1788 (getterG.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; | 1788 (getterG.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; |
1789 // | 1789 // |
1790 // A<I> | 1790 // A<I> |
1791 // | 1791 // |
1792 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | 1792 InterfaceType typeI = ElementFactory.classElement2("I").type; |
1793 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); | 1793 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |
1794 typeAI.typeArguments = <DartType> [typeI]; | 1794 typeAI.typeArguments = <DartType> [typeI]; |
1795 PropertyAccessorElement getter = typeAI.getGetter(getterName); | 1795 PropertyAccessorElement getter = typeAI.getGetter(getterName); |
1796 expect(getter, isNotNull); | 1796 expect(getter, isNotNull); |
1797 FunctionType getterType = getter.type; | 1797 FunctionType getterType = getter.type; |
1798 expect(getterType.returnType, same(typeI)); | 1798 expect(getterType.returnType, same(typeI)); |
1799 } | 1799 } |
1800 | 1800 |
1801 void test_getGetter_unimplemented() { | 1801 void test_getGetter_unimplemented() { |
1802 // | 1802 // |
1803 // class A {} | 1803 // class A {} |
1804 // | 1804 // |
1805 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1805 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1806 InterfaceType typeA = classA.type; | 1806 InterfaceType typeA = classA.type; |
1807 expect(typeA.getGetter("g"), isNull); | 1807 expect(typeA.getGetter("g"), isNull); |
1808 } | 1808 } |
1809 | 1809 |
1810 void test_getInterfaces_nonParameterized() { | 1810 void test_getInterfaces_nonParameterized() { |
1811 // | 1811 // |
1812 // class C implements A, B | 1812 // class C implements A, B |
1813 // | 1813 // |
1814 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1814 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1815 InterfaceType typeA = classA.type; | 1815 InterfaceType typeA = classA.type; |
1816 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 1816 ClassElementImpl classB = ElementFactory.classElement2("B"); |
1817 InterfaceType typeB = classB.type; | 1817 InterfaceType typeB = classB.type; |
1818 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1818 ClassElementImpl classC = ElementFactory.classElement2("C"); |
1819 classC.interfaces = <InterfaceType> [typeA, typeB]; | 1819 classC.interfaces = <InterfaceType> [typeA, typeB]; |
1820 List<InterfaceType> interfaces = classC.type.interfaces; | 1820 List<InterfaceType> interfaces = classC.type.interfaces; |
1821 expect(interfaces, hasLength(2)); | 1821 expect(interfaces, hasLength(2)); |
1822 if (identical(interfaces[0], typeA)) { | 1822 if (identical(interfaces[0], typeA)) { |
1823 expect(interfaces[1], same(typeB)); | 1823 expect(interfaces[1], same(typeB)); |
1824 } else { | 1824 } else { |
1825 expect(interfaces[0], same(typeB)); | 1825 expect(interfaces[0], same(typeB)); |
1826 expect(interfaces[1], same(typeA)); | 1826 expect(interfaces[1], same(typeA)); |
1827 } | 1827 } |
1828 } | 1828 } |
1829 | 1829 |
1830 void test_getInterfaces_parameterized() { | 1830 void test_getInterfaces_parameterized() { |
1831 // | 1831 // |
1832 // class A<E> | 1832 // class A<E> |
1833 // class B<F> implements A<F> | 1833 // class B<F> implements A<F> |
1834 // | 1834 // |
1835 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | 1835 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
1836 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); | 1836 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |
1837 InterfaceType typeB = classB.type; | 1837 InterfaceType typeB = classB.type; |
1838 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); | 1838 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |
1839 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; | 1839 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; |
1840 classB.interfaces = <InterfaceType> [typeAF]; | 1840 classB.interfaces = <InterfaceType> [typeAF]; |
1841 // | 1841 // |
1842 // B<I> | 1842 // B<I> |
1843 // | 1843 // |
1844 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | 1844 InterfaceType typeI = ElementFactory.classElement2("I").type; |
1845 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); | 1845 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |
1846 typeBI.typeArguments = <DartType> [typeI]; | 1846 typeBI.typeArguments = <DartType> [typeI]; |
1847 List<InterfaceType> interfaces = typeBI.interfaces; | 1847 List<InterfaceType> interfaces = typeBI.interfaces; |
1848 expect(interfaces, hasLength(1)); | 1848 expect(interfaces, hasLength(1)); |
1849 InterfaceType result = interfaces[0]; | 1849 InterfaceType result = interfaces[0]; |
1850 expect(result.element, same(classA)); | 1850 expect(result.element, same(classA)); |
1851 expect(result.typeArguments[0], same(typeI)); | 1851 expect(result.typeArguments[0], same(typeI)); |
1852 } | 1852 } |
1853 | 1853 |
1854 void test_getLeastUpperBound_directInterfaceCase() { | 1854 void test_getLeastUpperBound_directInterfaceCase() { |
1855 // | 1855 // |
1856 // class A | 1856 // class A |
1857 // class B implements A | 1857 // class B implements A |
1858 // class C implements B | 1858 // class C implements B |
1859 // | 1859 // |
1860 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1860 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1861 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 1861 ClassElementImpl classB = ElementFactory.classElement2("B"); |
1862 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1862 ClassElementImpl classC = ElementFactory.classElement2("C"); |
1863 InterfaceType typeA = classA.type; | 1863 InterfaceType typeA = classA.type; |
1864 InterfaceType typeB = classB.type; | 1864 InterfaceType typeB = classB.type; |
1865 InterfaceType typeC = classC.type; | 1865 InterfaceType typeC = classC.type; |
1866 classB.interfaces = <InterfaceType> [typeA]; | 1866 classB.interfaces = <InterfaceType> [typeA]; |
1867 classC.interfaces = <InterfaceType> [typeB]; | 1867 classC.interfaces = <InterfaceType> [typeB]; |
1868 expect(typeB.getLeastUpperBound(typeC), typeB); | 1868 expect(typeB.getLeastUpperBound(typeC), typeB); |
1869 expect(typeC.getLeastUpperBound(typeB), typeB); | 1869 expect(typeC.getLeastUpperBound(typeB), typeB); |
1870 } | 1870 } |
1871 | 1871 |
1872 void test_getLeastUpperBound_directSubclassCase() { | 1872 void test_getLeastUpperBound_directSubclassCase() { |
1873 // | 1873 // |
1874 // class A | 1874 // class A |
1875 // class B extends A | 1875 // class B extends A |
1876 // class C extends B | 1876 // class C extends B |
1877 // | 1877 // |
1878 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1878 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1879 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 1879 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
1880 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); | 1880 ClassElementImpl classC = ElementFactory.classElement("C", classB.type); |
1881 InterfaceType typeB = classB.type; | 1881 InterfaceType typeB = classB.type; |
1882 InterfaceType typeC = classC.type; | 1882 InterfaceType typeC = classC.type; |
1883 expect(typeB.getLeastUpperBound(typeC), typeB); | 1883 expect(typeB.getLeastUpperBound(typeC), typeB); |
1884 expect(typeC.getLeastUpperBound(typeB), typeB); | 1884 expect(typeC.getLeastUpperBound(typeB), typeB); |
1885 } | 1885 } |
1886 | 1886 |
1887 void test_getLeastUpperBound_functionType() { | 1887 void test_getLeastUpperBound_functionType() { |
1888 DartType interfaceType = ElementFactory.classElement2("A", []).type; | 1888 DartType interfaceType = ElementFactory.classElement2("A").type; |
1889 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(new FunctionElemen
tImpl.forNode(AstFactory.identifier3("f"))); | 1889 FunctionTypeImpl functionType = new FunctionTypeImpl.con1(new FunctionElemen
tImpl.forNode(AstFactory.identifier3("f"))); |
1890 expect(interfaceType.getLeastUpperBound(functionType), isNull); | 1890 expect(interfaceType.getLeastUpperBound(functionType), isNull); |
1891 } | 1891 } |
1892 | 1892 |
1893 void test_getLeastUpperBound_mixinCase() { | 1893 void test_getLeastUpperBound_mixinCase() { |
1894 // | 1894 // |
1895 // class A | 1895 // class A |
1896 // class B extends A | 1896 // class B extends A |
1897 // class C extends A | 1897 // class C extends A |
1898 // class D extends B with M, N, O, P | 1898 // class D extends B with M, N, O, P |
1899 // | 1899 // |
1900 ClassElement classA = ElementFactory.classElement2("A", []); | 1900 ClassElement classA = ElementFactory.classElement2("A"); |
1901 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 1901 ClassElement classB = ElementFactory.classElement("B", classA.type); |
1902 ClassElement classC = ElementFactory.classElement("C", classA.type, []); | 1902 ClassElement classC = ElementFactory.classElement("C", classA.type); |
1903 ClassElementImpl classD = ElementFactory.classElement("D", classB.type, []); | 1903 ClassElementImpl classD = ElementFactory.classElement("D", classB.type); |
1904 InterfaceType typeA = classA.type; | 1904 InterfaceType typeA = classA.type; |
1905 InterfaceType typeC = classC.type; | 1905 InterfaceType typeC = classC.type; |
1906 InterfaceType typeD = classD.type; | 1906 InterfaceType typeD = classD.type; |
1907 classD.mixins = <InterfaceType> [ | 1907 classD.mixins = <InterfaceType> [ |
1908 ElementFactory.classElement2("M", []).type, | 1908 ElementFactory.classElement2("M").type, |
1909 ElementFactory.classElement2("N", []).type, | 1909 ElementFactory.classElement2("N").type, |
1910 ElementFactory.classElement2("O", []).type, | 1910 ElementFactory.classElement2("O").type, |
1911 ElementFactory.classElement2("P", []).type]; | 1911 ElementFactory.classElement2("P").type]; |
1912 expect(typeD.getLeastUpperBound(typeC), typeA); | 1912 expect(typeD.getLeastUpperBound(typeC), typeA); |
1913 expect(typeC.getLeastUpperBound(typeD), typeA); | 1913 expect(typeC.getLeastUpperBound(typeD), typeA); |
1914 } | 1914 } |
1915 | 1915 |
1916 void test_getLeastUpperBound_null() { | 1916 void test_getLeastUpperBound_null() { |
1917 DartType interfaceType = ElementFactory.classElement2("A", []).type; | 1917 DartType interfaceType = ElementFactory.classElement2("A").type; |
1918 expect(interfaceType.getLeastUpperBound(null), isNull); | 1918 expect(interfaceType.getLeastUpperBound(null), isNull); |
1919 } | 1919 } |
1920 | 1920 |
1921 void test_getLeastUpperBound_object() { | 1921 void test_getLeastUpperBound_object() { |
1922 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1922 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1923 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 1923 ClassElementImpl classB = ElementFactory.classElement2("B"); |
1924 InterfaceType typeA = classA.type; | 1924 InterfaceType typeA = classA.type; |
1925 InterfaceType typeB = classB.type; | 1925 InterfaceType typeB = classB.type; |
1926 DartType typeObject = typeA.element.supertype; | 1926 DartType typeObject = typeA.element.supertype; |
1927 // assert that object does not have a super type | 1927 // assert that object does not have a super type |
1928 expect((typeObject.element as ClassElement).supertype, isNull); | 1928 expect((typeObject.element as ClassElement).supertype, isNull); |
1929 // assert that both A and B have the same super type of Object | 1929 // assert that both A and B have the same super type of Object |
1930 expect(typeB.element.supertype, typeObject); | 1930 expect(typeB.element.supertype, typeObject); |
1931 // finally, assert that the only least upper bound of A and B is Object | 1931 // finally, assert that the only least upper bound of A and B is Object |
1932 expect(typeA.getLeastUpperBound(typeB), typeObject); | 1932 expect(typeA.getLeastUpperBound(typeB), typeObject); |
1933 } | 1933 } |
1934 | 1934 |
1935 void test_getLeastUpperBound_self() { | 1935 void test_getLeastUpperBound_self() { |
1936 ClassElement classA = ElementFactory.classElement2("A", []); | 1936 ClassElement classA = ElementFactory.classElement2("A"); |
1937 InterfaceType typeA = classA.type; | 1937 InterfaceType typeA = classA.type; |
1938 expect(typeA.getLeastUpperBound(typeA), typeA); | 1938 expect(typeA.getLeastUpperBound(typeA), typeA); |
1939 } | 1939 } |
1940 | 1940 |
1941 void test_getLeastUpperBound_sharedSuperclass1() { | 1941 void test_getLeastUpperBound_sharedSuperclass1() { |
1942 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1942 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1943 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 1943 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
1944 ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); | 1944 ClassElementImpl classC = ElementFactory.classElement("C", classA.type); |
1945 InterfaceType typeA = classA.type; | 1945 InterfaceType typeA = classA.type; |
1946 InterfaceType typeB = classB.type; | 1946 InterfaceType typeB = classB.type; |
1947 InterfaceType typeC = classC.type; | 1947 InterfaceType typeC = classC.type; |
1948 expect(typeB.getLeastUpperBound(typeC), typeA); | 1948 expect(typeB.getLeastUpperBound(typeC), typeA); |
1949 expect(typeC.getLeastUpperBound(typeB), typeA); | 1949 expect(typeC.getLeastUpperBound(typeB), typeA); |
1950 } | 1950 } |
1951 | 1951 |
1952 void test_getLeastUpperBound_sharedSuperclass2() { | 1952 void test_getLeastUpperBound_sharedSuperclass2() { |
1953 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1953 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1954 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 1954 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
1955 ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); | 1955 ClassElementImpl classC = ElementFactory.classElement("C", classA.type); |
1956 ClassElementImpl classD = ElementFactory.classElement("D", classC.type, []); | 1956 ClassElementImpl classD = ElementFactory.classElement("D", classC.type); |
1957 InterfaceType typeA = classA.type; | 1957 InterfaceType typeA = classA.type; |
1958 InterfaceType typeB = classB.type; | 1958 InterfaceType typeB = classB.type; |
1959 InterfaceType typeD = classD.type; | 1959 InterfaceType typeD = classD.type; |
1960 expect(typeB.getLeastUpperBound(typeD), typeA); | 1960 expect(typeB.getLeastUpperBound(typeD), typeA); |
1961 expect(typeD.getLeastUpperBound(typeB), typeA); | 1961 expect(typeD.getLeastUpperBound(typeB), typeA); |
1962 } | 1962 } |
1963 | 1963 |
1964 void test_getLeastUpperBound_sharedSuperclass3() { | 1964 void test_getLeastUpperBound_sharedSuperclass3() { |
1965 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1965 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1966 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 1966 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
1967 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); | 1967 ClassElementImpl classC = ElementFactory.classElement("C", classB.type); |
1968 ClassElementImpl classD = ElementFactory.classElement("D", classB.type, []); | 1968 ClassElementImpl classD = ElementFactory.classElement("D", classB.type); |
1969 InterfaceType typeB = classB.type; | 1969 InterfaceType typeB = classB.type; |
1970 InterfaceType typeC = classC.type; | 1970 InterfaceType typeC = classC.type; |
1971 InterfaceType typeD = classD.type; | 1971 InterfaceType typeD = classD.type; |
1972 expect(typeC.getLeastUpperBound(typeD), typeB); | 1972 expect(typeC.getLeastUpperBound(typeD), typeB); |
1973 expect(typeD.getLeastUpperBound(typeC), typeB); | 1973 expect(typeD.getLeastUpperBound(typeC), typeB); |
1974 } | 1974 } |
1975 | 1975 |
1976 void test_getLeastUpperBound_sharedSuperclass4() { | 1976 void test_getLeastUpperBound_sharedSuperclass4() { |
1977 ClassElement classA = ElementFactory.classElement2("A", []); | 1977 ClassElement classA = ElementFactory.classElement2("A"); |
1978 ClassElement classA2 = ElementFactory.classElement2("A2", []); | 1978 ClassElement classA2 = ElementFactory.classElement2("A2"); |
1979 ClassElement classA3 = ElementFactory.classElement2("A3", []); | 1979 ClassElement classA3 = ElementFactory.classElement2("A3"); |
1980 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 1980 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
1981 ClassElementImpl classC = ElementFactory.classElement("C", classA.type, []); | 1981 ClassElementImpl classC = ElementFactory.classElement("C", classA.type); |
1982 InterfaceType typeA = classA.type; | 1982 InterfaceType typeA = classA.type; |
1983 InterfaceType typeA2 = classA2.type; | 1983 InterfaceType typeA2 = classA2.type; |
1984 InterfaceType typeA3 = classA3.type; | 1984 InterfaceType typeA3 = classA3.type; |
1985 InterfaceType typeB = classB.type; | 1985 InterfaceType typeB = classB.type; |
1986 InterfaceType typeC = classC.type; | 1986 InterfaceType typeC = classC.type; |
1987 classB.interfaces = <InterfaceType> [typeA2]; | 1987 classB.interfaces = <InterfaceType> [typeA2]; |
1988 classC.interfaces = <InterfaceType> [typeA3]; | 1988 classC.interfaces = <InterfaceType> [typeA3]; |
1989 expect(typeB.getLeastUpperBound(typeC), typeA); | 1989 expect(typeB.getLeastUpperBound(typeC), typeA); |
1990 expect(typeC.getLeastUpperBound(typeB), typeA); | 1990 expect(typeC.getLeastUpperBound(typeB), typeA); |
1991 } | 1991 } |
1992 | 1992 |
1993 void test_getLeastUpperBound_sharedSuperinterface1() { | 1993 void test_getLeastUpperBound_sharedSuperinterface1() { |
1994 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1994 ClassElementImpl classA = ElementFactory.classElement2("A"); |
1995 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 1995 ClassElementImpl classB = ElementFactory.classElement2("B"); |
1996 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1996 ClassElementImpl classC = ElementFactory.classElement2("C"); |
1997 InterfaceType typeA = classA.type; | 1997 InterfaceType typeA = classA.type; |
1998 InterfaceType typeB = classB.type; | 1998 InterfaceType typeB = classB.type; |
1999 InterfaceType typeC = classC.type; | 1999 InterfaceType typeC = classC.type; |
2000 classB.interfaces = <InterfaceType> [typeA]; | 2000 classB.interfaces = <InterfaceType> [typeA]; |
2001 classC.interfaces = <InterfaceType> [typeA]; | 2001 classC.interfaces = <InterfaceType> [typeA]; |
2002 expect(typeB.getLeastUpperBound(typeC), typeA); | 2002 expect(typeB.getLeastUpperBound(typeC), typeA); |
2003 expect(typeC.getLeastUpperBound(typeB), typeA); | 2003 expect(typeC.getLeastUpperBound(typeB), typeA); |
2004 } | 2004 } |
2005 | 2005 |
2006 void test_getLeastUpperBound_sharedSuperinterface2() { | 2006 void test_getLeastUpperBound_sharedSuperinterface2() { |
2007 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2007 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2008 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 2008 ClassElementImpl classB = ElementFactory.classElement2("B"); |
2009 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2009 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2010 ClassElementImpl classD = ElementFactory.classElement2("D", []); | 2010 ClassElementImpl classD = ElementFactory.classElement2("D"); |
2011 InterfaceType typeA = classA.type; | 2011 InterfaceType typeA = classA.type; |
2012 InterfaceType typeB = classB.type; | 2012 InterfaceType typeB = classB.type; |
2013 InterfaceType typeC = classC.type; | 2013 InterfaceType typeC = classC.type; |
2014 InterfaceType typeD = classD.type; | 2014 InterfaceType typeD = classD.type; |
2015 classB.interfaces = <InterfaceType> [typeA]; | 2015 classB.interfaces = <InterfaceType> [typeA]; |
2016 classC.interfaces = <InterfaceType> [typeA]; | 2016 classC.interfaces = <InterfaceType> [typeA]; |
2017 classD.interfaces = <InterfaceType> [typeC]; | 2017 classD.interfaces = <InterfaceType> [typeC]; |
2018 expect(typeB.getLeastUpperBound(typeD), typeA); | 2018 expect(typeB.getLeastUpperBound(typeD), typeA); |
2019 expect(typeD.getLeastUpperBound(typeB), typeA); | 2019 expect(typeD.getLeastUpperBound(typeB), typeA); |
2020 } | 2020 } |
2021 | 2021 |
2022 void test_getLeastUpperBound_sharedSuperinterface3() { | 2022 void test_getLeastUpperBound_sharedSuperinterface3() { |
2023 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2023 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2024 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 2024 ClassElementImpl classB = ElementFactory.classElement2("B"); |
2025 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2025 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2026 ClassElementImpl classD = ElementFactory.classElement2("D", []); | 2026 ClassElementImpl classD = ElementFactory.classElement2("D"); |
2027 InterfaceType typeA = classA.type; | 2027 InterfaceType typeA = classA.type; |
2028 InterfaceType typeB = classB.type; | 2028 InterfaceType typeB = classB.type; |
2029 InterfaceType typeC = classC.type; | 2029 InterfaceType typeC = classC.type; |
2030 InterfaceType typeD = classD.type; | 2030 InterfaceType typeD = classD.type; |
2031 classB.interfaces = <InterfaceType> [typeA]; | 2031 classB.interfaces = <InterfaceType> [typeA]; |
2032 classC.interfaces = <InterfaceType> [typeB]; | 2032 classC.interfaces = <InterfaceType> [typeB]; |
2033 classD.interfaces = <InterfaceType> [typeB]; | 2033 classD.interfaces = <InterfaceType> [typeB]; |
2034 expect(typeC.getLeastUpperBound(typeD), typeB); | 2034 expect(typeC.getLeastUpperBound(typeD), typeB); |
2035 expect(typeD.getLeastUpperBound(typeC), typeB); | 2035 expect(typeD.getLeastUpperBound(typeC), typeB); |
2036 } | 2036 } |
2037 | 2037 |
2038 void test_getLeastUpperBound_sharedSuperinterface4() { | 2038 void test_getLeastUpperBound_sharedSuperinterface4() { |
2039 ClassElement classA = ElementFactory.classElement2("A", []); | 2039 ClassElement classA = ElementFactory.classElement2("A"); |
2040 ClassElement classA2 = ElementFactory.classElement2("A2", []); | 2040 ClassElement classA2 = ElementFactory.classElement2("A2"); |
2041 ClassElement classA3 = ElementFactory.classElement2("A3", []); | 2041 ClassElement classA3 = ElementFactory.classElement2("A3"); |
2042 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 2042 ClassElementImpl classB = ElementFactory.classElement2("B"); |
2043 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2043 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2044 InterfaceType typeA = classA.type; | 2044 InterfaceType typeA = classA.type; |
2045 InterfaceType typeA2 = classA2.type; | 2045 InterfaceType typeA2 = classA2.type; |
2046 InterfaceType typeA3 = classA3.type; | 2046 InterfaceType typeA3 = classA3.type; |
2047 InterfaceType typeB = classB.type; | 2047 InterfaceType typeB = classB.type; |
2048 InterfaceType typeC = classC.type; | 2048 InterfaceType typeC = classC.type; |
2049 classB.interfaces = <InterfaceType> [typeA, typeA2]; | 2049 classB.interfaces = <InterfaceType> [typeA, typeA2]; |
2050 classC.interfaces = <InterfaceType> [typeA, typeA3]; | 2050 classC.interfaces = <InterfaceType> [typeA, typeA3]; |
2051 expect(typeB.getLeastUpperBound(typeC), typeA); | 2051 expect(typeB.getLeastUpperBound(typeC), typeA); |
2052 expect(typeC.getLeastUpperBound(typeB), typeA); | 2052 expect(typeC.getLeastUpperBound(typeB), typeA); |
2053 } | 2053 } |
(...skipping 25 matching lines...) Expand all Loading... |
2079 InterfaceType listType = _typeProvider.listType; | 2079 InterfaceType listType = _typeProvider.listType; |
2080 InterfaceType intType = _typeProvider.intType; | 2080 InterfaceType intType = _typeProvider.intType; |
2081 InterfaceType listOfIntType = listType.substitute4(<DartType> [intType]); | 2081 InterfaceType listOfIntType = listType.substitute4(<DartType> [intType]); |
2082 expect(listOfIntType.getLeastUpperBound(listOfIntType), listOfIntType); | 2082 expect(listOfIntType.getLeastUpperBound(listOfIntType), listOfIntType); |
2083 } | 2083 } |
2084 | 2084 |
2085 void test_getMethod_implemented() { | 2085 void test_getMethod_implemented() { |
2086 // | 2086 // |
2087 // class A { m() {} } | 2087 // class A { m() {} } |
2088 // | 2088 // |
2089 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2089 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2090 String methodName = "m"; | 2090 String methodName = "m"; |
2091 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
]); | 2091 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null); |
2092 classA.methods = <MethodElement> [methodM]; | 2092 classA.methods = <MethodElement> [methodM]; |
2093 InterfaceType typeA = classA.type; | 2093 InterfaceType typeA = classA.type; |
2094 expect(typeA.getMethod(methodName), same(methodM)); | 2094 expect(typeA.getMethod(methodName), same(methodM)); |
2095 } | 2095 } |
2096 | 2096 |
2097 void test_getMethod_parameterized() { | 2097 void test_getMethod_parameterized() { |
2098 // | 2098 // |
2099 // class A<E> { E m(E p) {} } | 2099 // class A<E> { E m(E p) {} } |
2100 // | 2100 // |
2101 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | 2101 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
2102 DartType typeE = classA.type.typeArguments[0]; | 2102 DartType typeE = classA.type.typeArguments[0]; |
2103 String methodName = "m"; | 2103 String methodName = "m"; |
2104 MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE,
[typeE]); | 2104 MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE,
[typeE]); |
2105 classA.methods = <MethodElement> [methodM]; | 2105 classA.methods = <MethodElement> [methodM]; |
2106 (methodM.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; | 2106 (methodM.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; |
2107 // | 2107 // |
2108 // A<I> | 2108 // A<I> |
2109 // | 2109 // |
2110 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | 2110 InterfaceType typeI = ElementFactory.classElement2("I").type; |
2111 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); | 2111 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |
2112 typeAI.typeArguments = <DartType> [typeI]; | 2112 typeAI.typeArguments = <DartType> [typeI]; |
2113 MethodElement method = typeAI.getMethod(methodName); | 2113 MethodElement method = typeAI.getMethod(methodName); |
2114 expect(method, isNotNull); | 2114 expect(method, isNotNull); |
2115 FunctionType methodType = method.type; | 2115 FunctionType methodType = method.type; |
2116 expect(methodType.returnType, same(typeI)); | 2116 expect(methodType.returnType, same(typeI)); |
2117 List<DartType> parameterTypes = methodType.normalParameterTypes; | 2117 List<DartType> parameterTypes = methodType.normalParameterTypes; |
2118 expect(parameterTypes, hasLength(1)); | 2118 expect(parameterTypes, hasLength(1)); |
2119 expect(parameterTypes[0], same(typeI)); | 2119 expect(parameterTypes[0], same(typeI)); |
2120 } | 2120 } |
2121 | 2121 |
2122 void test_getMethod_unimplemented() { | 2122 void test_getMethod_unimplemented() { |
2123 // | 2123 // |
2124 // class A {} | 2124 // class A {} |
2125 // | 2125 // |
2126 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2126 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2127 InterfaceType typeA = classA.type; | 2127 InterfaceType typeA = classA.type; |
2128 expect(typeA.getMethod("m"), isNull); | 2128 expect(typeA.getMethod("m"), isNull); |
2129 } | 2129 } |
2130 | 2130 |
2131 void test_getMethods() { | 2131 void test_getMethods() { |
2132 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); | 2132 ClassElementImpl typeElement = ElementFactory.classElement2("A"); |
2133 MethodElementImpl methodOne = ElementFactory.methodElement("one", null, []); | 2133 MethodElementImpl methodOne = ElementFactory.methodElement("one", null); |
2134 MethodElementImpl methodTwo = ElementFactory.methodElement("two", null, []); | 2134 MethodElementImpl methodTwo = ElementFactory.methodElement("two", null); |
2135 typeElement.methods = <MethodElement> [methodOne, methodTwo]; | 2135 typeElement.methods = <MethodElement> [methodOne, methodTwo]; |
2136 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); | 2136 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |
2137 expect(type.methods.length, 2); | 2137 expect(type.methods.length, 2); |
2138 } | 2138 } |
2139 | 2139 |
2140 void test_getMethods_empty() { | 2140 void test_getMethods_empty() { |
2141 ClassElementImpl typeElement = ElementFactory.classElement2("A", []); | 2141 ClassElementImpl typeElement = ElementFactory.classElement2("A"); |
2142 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); | 2142 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement); |
2143 expect(type.methods.length, 0); | 2143 expect(type.methods.length, 0); |
2144 } | 2144 } |
2145 | 2145 |
2146 void test_getMixins_nonParameterized() { | 2146 void test_getMixins_nonParameterized() { |
2147 // | 2147 // |
2148 // class C extends Object with A, B | 2148 // class C extends Object with A, B |
2149 // | 2149 // |
2150 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2150 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2151 InterfaceType typeA = classA.type; | 2151 InterfaceType typeA = classA.type; |
2152 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 2152 ClassElementImpl classB = ElementFactory.classElement2("B"); |
2153 InterfaceType typeB = classB.type; | 2153 InterfaceType typeB = classB.type; |
2154 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2154 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2155 classC.mixins = <InterfaceType> [typeA, typeB]; | 2155 classC.mixins = <InterfaceType> [typeA, typeB]; |
2156 List<InterfaceType> interfaces = classC.type.mixins; | 2156 List<InterfaceType> interfaces = classC.type.mixins; |
2157 expect(interfaces, hasLength(2)); | 2157 expect(interfaces, hasLength(2)); |
2158 if (identical(interfaces[0], typeA)) { | 2158 if (identical(interfaces[0], typeA)) { |
2159 expect(interfaces[1], same(typeB)); | 2159 expect(interfaces[1], same(typeB)); |
2160 } else { | 2160 } else { |
2161 expect(interfaces[0], same(typeB)); | 2161 expect(interfaces[0], same(typeB)); |
2162 expect(interfaces[1], same(typeA)); | 2162 expect(interfaces[1], same(typeA)); |
2163 } | 2163 } |
2164 } | 2164 } |
2165 | 2165 |
2166 void test_getMixins_parameterized() { | 2166 void test_getMixins_parameterized() { |
2167 // | 2167 // |
2168 // class A<E> | 2168 // class A<E> |
2169 // class B<F> extends Object with A<F> | 2169 // class B<F> extends Object with A<F> |
2170 // | 2170 // |
2171 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | 2171 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
2172 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); | 2172 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |
2173 InterfaceType typeB = classB.type; | 2173 InterfaceType typeB = classB.type; |
2174 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); | 2174 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |
2175 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; | 2175 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; |
2176 classB.mixins = <InterfaceType> [typeAF]; | 2176 classB.mixins = <InterfaceType> [typeAF]; |
2177 // | 2177 // |
2178 // B<I> | 2178 // B<I> |
2179 // | 2179 // |
2180 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | 2180 InterfaceType typeI = ElementFactory.classElement2("I").type; |
2181 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); | 2181 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |
2182 typeBI.typeArguments = <DartType> [typeI]; | 2182 typeBI.typeArguments = <DartType> [typeI]; |
2183 List<InterfaceType> interfaces = typeBI.mixins; | 2183 List<InterfaceType> interfaces = typeBI.mixins; |
2184 expect(interfaces, hasLength(1)); | 2184 expect(interfaces, hasLength(1)); |
2185 InterfaceType result = interfaces[0]; | 2185 InterfaceType result = interfaces[0]; |
2186 expect(result.element, same(classA)); | 2186 expect(result.element, same(classA)); |
2187 expect(result.typeArguments[0], same(typeI)); | 2187 expect(result.typeArguments[0], same(typeI)); |
2188 } | 2188 } |
2189 | 2189 |
2190 void test_getSetter_implemented() { | 2190 void test_getSetter_implemented() { |
2191 // | 2191 // |
2192 // class A { s() {} } | 2192 // class A { s() {} } |
2193 // | 2193 // |
2194 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2194 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2195 String setterName = "s"; | 2195 String setterName = "s"; |
2196 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); | 2196 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); |
2197 classA.accessors = <PropertyAccessorElement> [setterS]; | 2197 classA.accessors = <PropertyAccessorElement> [setterS]; |
2198 InterfaceType typeA = classA.type; | 2198 InterfaceType typeA = classA.type; |
2199 expect(typeA.getSetter(setterName), same(setterS)); | 2199 expect(typeA.getSetter(setterName), same(setterS)); |
2200 } | 2200 } |
2201 | 2201 |
2202 void test_getSetter_parameterized() { | 2202 void test_getSetter_parameterized() { |
2203 // | 2203 // |
2204 // class A<E> { set s(E p) {} } | 2204 // class A<E> { set s(E p) {} } |
2205 // | 2205 // |
2206 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | 2206 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
2207 DartType typeE = classA.type.typeArguments[0]; | 2207 DartType typeE = classA.type.typeArguments[0]; |
2208 String setterName = "s"; | 2208 String setterName = "s"; |
2209 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, typeE); | 2209 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, typeE); |
2210 classA.accessors = <PropertyAccessorElement> [setterS]; | 2210 classA.accessors = <PropertyAccessorElement> [setterS]; |
2211 (setterS.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; | 2211 (setterS.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; |
2212 // | 2212 // |
2213 // A<I> | 2213 // A<I> |
2214 // | 2214 // |
2215 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | 2215 InterfaceType typeI = ElementFactory.classElement2("I").type; |
2216 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); | 2216 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |
2217 typeAI.typeArguments = <DartType> [typeI]; | 2217 typeAI.typeArguments = <DartType> [typeI]; |
2218 PropertyAccessorElement setter = typeAI.getSetter(setterName); | 2218 PropertyAccessorElement setter = typeAI.getSetter(setterName); |
2219 expect(setter, isNotNull); | 2219 expect(setter, isNotNull); |
2220 FunctionType setterType = setter.type; | 2220 FunctionType setterType = setter.type; |
2221 List<DartType> parameterTypes = setterType.normalParameterTypes; | 2221 List<DartType> parameterTypes = setterType.normalParameterTypes; |
2222 expect(parameterTypes, hasLength(1)); | 2222 expect(parameterTypes, hasLength(1)); |
2223 expect(parameterTypes[0], same(typeI)); | 2223 expect(parameterTypes[0], same(typeI)); |
2224 } | 2224 } |
2225 | 2225 |
2226 void test_getSetter_unimplemented() { | 2226 void test_getSetter_unimplemented() { |
2227 // | 2227 // |
2228 // class A {} | 2228 // class A {} |
2229 // | 2229 // |
2230 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2230 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2231 InterfaceType typeA = classA.type; | 2231 InterfaceType typeA = classA.type; |
2232 expect(typeA.getSetter("s"), isNull); | 2232 expect(typeA.getSetter("s"), isNull); |
2233 } | 2233 } |
2234 | 2234 |
2235 void test_getSuperclass_nonParameterized() { | 2235 void test_getSuperclass_nonParameterized() { |
2236 // | 2236 // |
2237 // class B extends A | 2237 // class B extends A |
2238 // | 2238 // |
2239 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2239 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2240 InterfaceType typeA = classA.type; | 2240 InterfaceType typeA = classA.type; |
2241 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); | 2241 ClassElementImpl classB = ElementFactory.classElement("B", typeA); |
2242 InterfaceType typeB = classB.type; | 2242 InterfaceType typeB = classB.type; |
2243 expect(typeB.superclass, same(typeA)); | 2243 expect(typeB.superclass, same(typeA)); |
2244 } | 2244 } |
2245 | 2245 |
2246 void test_getSuperclass_parameterized() { | 2246 void test_getSuperclass_parameterized() { |
2247 // | 2247 // |
2248 // class A<E> | 2248 // class A<E> |
2249 // class B<F> extends A<F> | 2249 // class B<F> extends A<F> |
2250 // | 2250 // |
2251 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | 2251 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
2252 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); | 2252 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |
2253 InterfaceType typeB = classB.type; | 2253 InterfaceType typeB = classB.type; |
2254 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); | 2254 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |
2255 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; | 2255 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; |
2256 classB.supertype = typeAF; | 2256 classB.supertype = typeAF; |
2257 // | 2257 // |
2258 // B<I> | 2258 // B<I> |
2259 // | 2259 // |
2260 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | 2260 InterfaceType typeI = ElementFactory.classElement2("I").type; |
2261 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); | 2261 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |
2262 typeBI.typeArguments = <DartType> [typeI]; | 2262 typeBI.typeArguments = <DartType> [typeI]; |
2263 InterfaceType superclass = typeBI.superclass; | 2263 InterfaceType superclass = typeBI.superclass; |
2264 expect(superclass.element, same(classA)); | 2264 expect(superclass.element, same(classA)); |
2265 expect(superclass.typeArguments[0], same(typeI)); | 2265 expect(superclass.typeArguments[0], same(typeI)); |
2266 } | 2266 } |
2267 | 2267 |
2268 void test_getTypeArguments_empty() { | 2268 void test_getTypeArguments_empty() { |
2269 InterfaceType type = ElementFactory.classElement2("A", []).type; | 2269 InterfaceType type = ElementFactory.classElement2("A").type; |
2270 expect(type.typeArguments, hasLength(0)); | 2270 expect(type.typeArguments, hasLength(0)); |
2271 } | 2271 } |
2272 | 2272 |
2273 void test_hashCode() { | 2273 void test_hashCode() { |
2274 ClassElement classA = ElementFactory.classElement2("A", []); | 2274 ClassElement classA = ElementFactory.classElement2("A"); |
2275 InterfaceType typeA = classA.type; | 2275 InterfaceType typeA = classA.type; |
2276 expect(0 == typeA.hashCode, isFalse); | 2276 expect(0 == typeA.hashCode, isFalse); |
2277 } | 2277 } |
2278 | 2278 |
2279 void test_isAssignableTo_typeVariables() { | 2279 void test_isAssignableTo_typeVariables() { |
2280 // | 2280 // |
2281 // class A<E> {} | 2281 // class A<E> {} |
2282 // class B<F, G> { | 2282 // class B<F, G> { |
2283 // A<F> af; | 2283 // A<F> af; |
2284 // f (A<G> ag) { | 2284 // f (A<G> ag) { |
2285 // af = ag; | 2285 // af = ag; |
2286 // } | 2286 // } |
2287 // } | 2287 // } |
2288 // | 2288 // |
2289 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 2289 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
2290 ClassElement classB = ElementFactory.classElement2("B", ["F", "G"]); | 2290 ClassElement classB = ElementFactory.classElement2("B", ["F", "G"]); |
2291 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); | 2291 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |
2292 typeAF.typeArguments = <DartType> [classB.typeParameters[0].type]; | 2292 typeAF.typeArguments = <DartType> [classB.typeParameters[0].type]; |
2293 InterfaceTypeImpl typeAG = new InterfaceTypeImpl.con1(classA); | 2293 InterfaceTypeImpl typeAG = new InterfaceTypeImpl.con1(classA); |
2294 typeAG.typeArguments = <DartType> [classB.typeParameters[1].type]; | 2294 typeAG.typeArguments = <DartType> [classB.typeParameters[1].type]; |
2295 expect(typeAG.isAssignableTo(typeAF), isFalse); | 2295 expect(typeAG.isAssignableTo(typeAF), isFalse); |
2296 } | 2296 } |
2297 | 2297 |
2298 void test_isAssignableTo_void() { | 2298 void test_isAssignableTo_void() { |
2299 expect(VoidTypeImpl.instance.isAssignableTo(_typeProvider.intType), isFalse)
; | 2299 expect(VoidTypeImpl.instance.isAssignableTo(_typeProvider.intType), isFalse)
; |
2300 } | 2300 } |
2301 | 2301 |
2302 void test_isDirectSupertypeOf_extends() { | 2302 void test_isDirectSupertypeOf_extends() { |
2303 ClassElement classA = ElementFactory.classElement2("A", []); | 2303 ClassElement classA = ElementFactory.classElement2("A"); |
2304 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2304 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2305 InterfaceType typeA = classA.type; | 2305 InterfaceType typeA = classA.type; |
2306 InterfaceType typeB = classB.type; | 2306 InterfaceType typeB = classB.type; |
2307 expect(typeA.isDirectSupertypeOf(typeB), isTrue); | 2307 expect(typeA.isDirectSupertypeOf(typeB), isTrue); |
2308 } | 2308 } |
2309 | 2309 |
2310 void test_isDirectSupertypeOf_false() { | 2310 void test_isDirectSupertypeOf_false() { |
2311 ClassElement classA = ElementFactory.classElement2("A", []); | 2311 ClassElement classA = ElementFactory.classElement2("A"); |
2312 ClassElement classB = ElementFactory.classElement2("B", []); | 2312 ClassElement classB = ElementFactory.classElement2("B"); |
2313 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | 2313 ClassElement classC = ElementFactory.classElement("C", classB.type); |
2314 InterfaceType typeA = classA.type; | 2314 InterfaceType typeA = classA.type; |
2315 InterfaceType typeC = classC.type; | 2315 InterfaceType typeC = classC.type; |
2316 expect(typeA.isDirectSupertypeOf(typeC), isFalse); | 2316 expect(typeA.isDirectSupertypeOf(typeC), isFalse); |
2317 } | 2317 } |
2318 | 2318 |
2319 void test_isDirectSupertypeOf_implements() { | 2319 void test_isDirectSupertypeOf_implements() { |
2320 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2320 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2321 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 2321 ClassElementImpl classB = ElementFactory.classElement2("B"); |
2322 InterfaceType typeA = classA.type; | 2322 InterfaceType typeA = classA.type; |
2323 InterfaceType typeB = classB.type; | 2323 InterfaceType typeB = classB.type; |
2324 classB.interfaces = <InterfaceType> [typeA]; | 2324 classB.interfaces = <InterfaceType> [typeA]; |
2325 expect(typeA.isDirectSupertypeOf(typeB), isTrue); | 2325 expect(typeA.isDirectSupertypeOf(typeB), isTrue); |
2326 } | 2326 } |
2327 | 2327 |
2328 void test_isDirectSupertypeOf_with() { | 2328 void test_isDirectSupertypeOf_with() { |
2329 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2329 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2330 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 2330 ClassElementImpl classB = ElementFactory.classElement2("B"); |
2331 InterfaceType typeA = classA.type; | 2331 InterfaceType typeA = classA.type; |
2332 InterfaceType typeB = classB.type; | 2332 InterfaceType typeB = classB.type; |
2333 classB.mixins = <InterfaceType> [typeA]; | 2333 classB.mixins = <InterfaceType> [typeA]; |
2334 expect(typeA.isDirectSupertypeOf(typeB), isTrue); | 2334 expect(typeA.isDirectSupertypeOf(typeB), isTrue); |
2335 } | 2335 } |
2336 | 2336 |
2337 void test_isMoreSpecificThan_bottom() { | 2337 void test_isMoreSpecificThan_bottom() { |
2338 DartType type = ElementFactory.classElement2("A", []).type; | 2338 DartType type = ElementFactory.classElement2("A").type; |
2339 expect(BottomTypeImpl.instance.isMoreSpecificThan(type), isTrue); | 2339 expect(BottomTypeImpl.instance.isMoreSpecificThan(type), isTrue); |
2340 } | 2340 } |
2341 | 2341 |
2342 void test_isMoreSpecificThan_covariance() { | 2342 void test_isMoreSpecificThan_covariance() { |
2343 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 2343 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
2344 ClassElement classI = ElementFactory.classElement2("I", []); | 2344 ClassElement classI = ElementFactory.classElement2("I"); |
2345 ClassElement classJ = ElementFactory.classElement("J", classI.type, []); | 2345 ClassElement classJ = ElementFactory.classElement("J", classI.type); |
2346 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); | 2346 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |
2347 InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA); | 2347 InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA); |
2348 typeAI.typeArguments = <DartType> [classI.type]; | 2348 typeAI.typeArguments = <DartType> [classI.type]; |
2349 typeAJ.typeArguments = <DartType> [classJ.type]; | 2349 typeAJ.typeArguments = <DartType> [classJ.type]; |
2350 expect(typeAJ.isMoreSpecificThan(typeAI), isTrue); | 2350 expect(typeAJ.isMoreSpecificThan(typeAI), isTrue); |
2351 expect(typeAI.isMoreSpecificThan(typeAJ), isFalse); | 2351 expect(typeAI.isMoreSpecificThan(typeAJ), isFalse); |
2352 } | 2352 } |
2353 | 2353 |
2354 void test_isMoreSpecificThan_directSupertype() { | 2354 void test_isMoreSpecificThan_directSupertype() { |
2355 ClassElement classA = ElementFactory.classElement2("A", []); | 2355 ClassElement classA = ElementFactory.classElement2("A"); |
2356 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2356 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2357 InterfaceType typeA = classA.type; | 2357 InterfaceType typeA = classA.type; |
2358 InterfaceType typeB = classB.type; | 2358 InterfaceType typeB = classB.type; |
2359 expect(typeB.isMoreSpecificThan(typeA), isTrue); | 2359 expect(typeB.isMoreSpecificThan(typeA), isTrue); |
2360 // the opposite test tests a different branch in isMoreSpecificThan() | 2360 // the opposite test tests a different branch in isMoreSpecificThan() |
2361 expect(typeA.isMoreSpecificThan(typeB), isFalse); | 2361 expect(typeA.isMoreSpecificThan(typeB), isFalse); |
2362 } | 2362 } |
2363 | 2363 |
2364 void test_isMoreSpecificThan_dynamic() { | 2364 void test_isMoreSpecificThan_dynamic() { |
2365 InterfaceType type = ElementFactory.classElement2("A", []).type; | 2365 InterfaceType type = ElementFactory.classElement2("A").type; |
2366 expect(type.isMoreSpecificThan(DynamicTypeImpl.instance), isTrue); | 2366 expect(type.isMoreSpecificThan(DynamicTypeImpl.instance), isTrue); |
2367 } | 2367 } |
2368 | 2368 |
2369 void test_isMoreSpecificThan_generic() { | 2369 void test_isMoreSpecificThan_generic() { |
2370 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 2370 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
2371 ClassElement classB = ElementFactory.classElement2("B", []); | 2371 ClassElement classB = ElementFactory.classElement2("B"); |
2372 DartType dynamicType = DynamicTypeImpl.instance; | 2372 DartType dynamicType = DynamicTypeImpl.instance; |
2373 InterfaceType typeAOfDynamic = classA.type.substitute4(<DartType> [dynamicTy
pe]); | 2373 InterfaceType typeAOfDynamic = classA.type.substitute4(<DartType> [dynamicTy
pe]); |
2374 InterfaceType typeAOfB = classA.type.substitute4(<DartType> [classB.type]); | 2374 InterfaceType typeAOfB = classA.type.substitute4(<DartType> [classB.type]); |
2375 expect(typeAOfDynamic.isMoreSpecificThan(typeAOfB), isFalse); | 2375 expect(typeAOfDynamic.isMoreSpecificThan(typeAOfB), isFalse); |
2376 expect(typeAOfB.isMoreSpecificThan(typeAOfDynamic), isTrue); | 2376 expect(typeAOfB.isMoreSpecificThan(typeAOfDynamic), isTrue); |
2377 } | 2377 } |
2378 | 2378 |
2379 void test_isMoreSpecificThan_self() { | 2379 void test_isMoreSpecificThan_self() { |
2380 InterfaceType type = ElementFactory.classElement2("A", []).type; | 2380 InterfaceType type = ElementFactory.classElement2("A").type; |
2381 expect(type.isMoreSpecificThan(type), isTrue); | 2381 expect(type.isMoreSpecificThan(type), isTrue); |
2382 } | 2382 } |
2383 | 2383 |
2384 void test_isMoreSpecificThan_transitive_interface() { | 2384 void test_isMoreSpecificThan_transitive_interface() { |
2385 // | 2385 // |
2386 // class A {} | 2386 // class A {} |
2387 // class B extends A {} | 2387 // class B extends A {} |
2388 // class C implements B {} | 2388 // class C implements B {} |
2389 // | 2389 // |
2390 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2390 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2391 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 2391 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
2392 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2392 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2393 classC.interfaces = <InterfaceType> [classB.type]; | 2393 classC.interfaces = <InterfaceType> [classB.type]; |
2394 InterfaceType typeA = classA.type; | 2394 InterfaceType typeA = classA.type; |
2395 InterfaceType typeC = classC.type; | 2395 InterfaceType typeC = classC.type; |
2396 expect(typeC.isMoreSpecificThan(typeA), isTrue); | 2396 expect(typeC.isMoreSpecificThan(typeA), isTrue); |
2397 } | 2397 } |
2398 | 2398 |
2399 void test_isMoreSpecificThan_transitive_mixin() { | 2399 void test_isMoreSpecificThan_transitive_mixin() { |
2400 // | 2400 // |
2401 // class A {} | 2401 // class A {} |
2402 // class B extends A {} | 2402 // class B extends A {} |
2403 // class C with B {} | 2403 // class C with B {} |
2404 // | 2404 // |
2405 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2405 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2406 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 2406 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
2407 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2407 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2408 classC.mixins = <InterfaceType> [classB.type]; | 2408 classC.mixins = <InterfaceType> [classB.type]; |
2409 InterfaceType typeA = classA.type; | 2409 InterfaceType typeA = classA.type; |
2410 InterfaceType typeC = classC.type; | 2410 InterfaceType typeC = classC.type; |
2411 expect(typeC.isMoreSpecificThan(typeA), isTrue); | 2411 expect(typeC.isMoreSpecificThan(typeA), isTrue); |
2412 } | 2412 } |
2413 | 2413 |
2414 void test_isMoreSpecificThan_transitive_recursive() { | 2414 void test_isMoreSpecificThan_transitive_recursive() { |
2415 // | 2415 // |
2416 // class A extends B {} | 2416 // class A extends B {} |
2417 // class B extends A {} | 2417 // class B extends A {} |
2418 // class C {} | 2418 // class C {} |
2419 // | 2419 // |
2420 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2420 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2421 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 2421 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
2422 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2422 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2423 InterfaceType typeA = classA.type; | 2423 InterfaceType typeA = classA.type; |
2424 InterfaceType typeC = classC.type; | 2424 InterfaceType typeC = classC.type; |
2425 classA.supertype = classB.type; | 2425 classA.supertype = classB.type; |
2426 expect(typeA.isMoreSpecificThan(typeC), isFalse); | 2426 expect(typeA.isMoreSpecificThan(typeC), isFalse); |
2427 } | 2427 } |
2428 | 2428 |
2429 void test_isMoreSpecificThan_transitive_superclass() { | 2429 void test_isMoreSpecificThan_transitive_superclass() { |
2430 // | 2430 // |
2431 // class A {} | 2431 // class A {} |
2432 // class B extends A {} | 2432 // class B extends A {} |
2433 // class C extends B {} | 2433 // class C extends B {} |
2434 // | 2434 // |
2435 ClassElement classA = ElementFactory.classElement2("A", []); | 2435 ClassElement classA = ElementFactory.classElement2("A"); |
2436 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2436 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2437 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | 2437 ClassElement classC = ElementFactory.classElement("C", classB.type); |
2438 InterfaceType typeA = classA.type; | 2438 InterfaceType typeA = classA.type; |
2439 InterfaceType typeC = classC.type; | 2439 InterfaceType typeC = classC.type; |
2440 expect(typeC.isMoreSpecificThan(typeA), isTrue); | 2440 expect(typeC.isMoreSpecificThan(typeA), isTrue); |
2441 } | 2441 } |
2442 | 2442 |
2443 void test_isMoreSpecificThan_typeParameterType() { | 2443 void test_isMoreSpecificThan_typeParameterType() { |
2444 // | 2444 // |
2445 // class A<E> {} | 2445 // class A<E> {} |
2446 // | 2446 // |
2447 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 2447 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
2448 InterfaceType typeA = classA.type; | 2448 InterfaceType typeA = classA.type; |
2449 TypeParameterType parameterType = classA.typeParameters[0].type; | 2449 TypeParameterType parameterType = classA.typeParameters[0].type; |
2450 DartType objectType = _typeProvider.objectType; | 2450 DartType objectType = _typeProvider.objectType; |
2451 expect(parameterType.isMoreSpecificThan(objectType), isTrue); | 2451 expect(parameterType.isMoreSpecificThan(objectType), isTrue); |
2452 expect(parameterType.isMoreSpecificThan(typeA), isFalse); | 2452 expect(parameterType.isMoreSpecificThan(typeA), isFalse); |
2453 } | 2453 } |
2454 | 2454 |
2455 void test_isMoreSpecificThan_typeParameterType_withBound() { | 2455 void test_isMoreSpecificThan_typeParameterType_withBound() { |
2456 // | 2456 // |
2457 // class A {} | 2457 // class A {} |
2458 // class B<E extends A> {} | 2458 // class B<E extends A> {} |
2459 // | 2459 // |
2460 ClassElement classA = ElementFactory.classElement2("A", []); | 2460 ClassElement classA = ElementFactory.classElement2("A"); |
2461 InterfaceType typeA = classA.type; | 2461 InterfaceType typeA = classA.type; |
2462 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 2462 ClassElementImpl classB = ElementFactory.classElement2("B"); |
2463 TypeParameterElementImpl parameterEA = new TypeParameterElementImpl.forNode(
AstFactory.identifier3("E")); | 2463 TypeParameterElementImpl parameterEA = new TypeParameterElementImpl.forNode(
AstFactory.identifier3("E")); |
2464 TypeParameterType parameterAEType = new TypeParameterTypeImpl(parameterEA); | 2464 TypeParameterType parameterAEType = new TypeParameterTypeImpl(parameterEA); |
2465 parameterEA.bound = typeA; | 2465 parameterEA.bound = typeA; |
2466 parameterEA.type = parameterAEType; | 2466 parameterEA.type = parameterAEType; |
2467 classB.typeParameters = <TypeParameterElementImpl> [parameterEA]; | 2467 classB.typeParameters = <TypeParameterElementImpl> [parameterEA]; |
2468 expect(parameterAEType.isMoreSpecificThan(typeA), isTrue); | 2468 expect(parameterAEType.isMoreSpecificThan(typeA), isTrue); |
2469 } | 2469 } |
2470 | 2470 |
2471 void test_isSubtypeOf_directSubtype() { | 2471 void test_isSubtypeOf_directSubtype() { |
2472 ClassElement classA = ElementFactory.classElement2("A", []); | 2472 ClassElement classA = ElementFactory.classElement2("A"); |
2473 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2473 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2474 InterfaceType typeA = classA.type; | 2474 InterfaceType typeA = classA.type; |
2475 InterfaceType typeB = classB.type; | 2475 InterfaceType typeB = classB.type; |
2476 expect(typeB.isSubtypeOf(typeA), isTrue); | 2476 expect(typeB.isSubtypeOf(typeA), isTrue); |
2477 expect(typeA.isSubtypeOf(typeB), isFalse); | 2477 expect(typeA.isSubtypeOf(typeB), isFalse); |
2478 } | 2478 } |
2479 | 2479 |
2480 void test_isSubtypeOf_dynamic() { | 2480 void test_isSubtypeOf_dynamic() { |
2481 ClassElement classA = ElementFactory.classElement2("A", []); | 2481 ClassElement classA = ElementFactory.classElement2("A"); |
2482 InterfaceType typeA = classA.type; | 2482 InterfaceType typeA = classA.type; |
2483 DartType dynamicType = DynamicTypeImpl.instance; | 2483 DartType dynamicType = DynamicTypeImpl.instance; |
2484 expect(dynamicType.isSubtypeOf(typeA), isTrue); | 2484 expect(dynamicType.isSubtypeOf(typeA), isTrue); |
2485 expect(typeA.isSubtypeOf(dynamicType), isTrue); | 2485 expect(typeA.isSubtypeOf(dynamicType), isTrue); |
2486 } | 2486 } |
2487 | 2487 |
2488 void test_isSubtypeOf_function() { | 2488 void test_isSubtypeOf_function() { |
2489 // | 2489 // |
2490 // void f(String s) {} | 2490 // void f(String s) {} |
2491 // class A { | 2491 // class A { |
2492 // void call(String s) {} | 2492 // void call(String s) {} |
2493 // } | 2493 // } |
2494 // | 2494 // |
2495 InterfaceType stringType = _typeProvider.stringType; | 2495 InterfaceType stringType = _typeProvider.stringType; |
2496 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2496 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2497 classA.methods = <MethodElement> [ElementFactory.methodElement("call", VoidT
ypeImpl.instance, [stringType])]; | 2497 classA.methods = <MethodElement> [ElementFactory.methodElement("call", VoidT
ypeImpl.instance, [stringType])]; |
2498 FunctionType functionType = ElementFactory.functionElement5("f", <ClassEleme
nt> [stringType.element]).type; | 2498 FunctionType functionType = ElementFactory.functionElement5("f", <ClassEleme
nt> [stringType.element]).type; |
2499 expect(classA.type.isSubtypeOf(functionType), isTrue); | 2499 expect(classA.type.isSubtypeOf(functionType), isTrue); |
2500 } | 2500 } |
2501 | 2501 |
2502 void test_isSubtypeOf_generic() { | 2502 void test_isSubtypeOf_generic() { |
2503 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 2503 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
2504 ClassElement classB = ElementFactory.classElement2("B", []); | 2504 ClassElement classB = ElementFactory.classElement2("B"); |
2505 DartType dynamicType = DynamicTypeImpl.instance; | 2505 DartType dynamicType = DynamicTypeImpl.instance; |
2506 InterfaceType typeAOfDynamic = classA.type.substitute4(<DartType> [dynamicTy
pe]); | 2506 InterfaceType typeAOfDynamic = classA.type.substitute4(<DartType> [dynamicTy
pe]); |
2507 InterfaceType typeAOfB = classA.type.substitute4(<DartType> [classB.type]); | 2507 InterfaceType typeAOfB = classA.type.substitute4(<DartType> [classB.type]); |
2508 expect(typeAOfDynamic.isSubtypeOf(typeAOfB), isTrue); | 2508 expect(typeAOfDynamic.isSubtypeOf(typeAOfB), isTrue); |
2509 expect(typeAOfB.isSubtypeOf(typeAOfDynamic), isTrue); | 2509 expect(typeAOfB.isSubtypeOf(typeAOfDynamic), isTrue); |
2510 } | 2510 } |
2511 | 2511 |
2512 void test_isSubtypeOf_interface() { | 2512 void test_isSubtypeOf_interface() { |
2513 ClassElement classA = ElementFactory.classElement2("A", []); | 2513 ClassElement classA = ElementFactory.classElement2("A"); |
2514 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2514 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2515 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2515 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2516 InterfaceType typeObject = classA.supertype; | 2516 InterfaceType typeObject = classA.supertype; |
2517 InterfaceType typeA = classA.type; | 2517 InterfaceType typeA = classA.type; |
2518 InterfaceType typeB = classB.type; | 2518 InterfaceType typeB = classB.type; |
2519 InterfaceType typeC = classC.type; | 2519 InterfaceType typeC = classC.type; |
2520 classC.interfaces = <InterfaceType> [typeB]; | 2520 classC.interfaces = <InterfaceType> [typeB]; |
2521 expect(typeC.isSubtypeOf(typeB), isTrue); | 2521 expect(typeC.isSubtypeOf(typeB), isTrue); |
2522 expect(typeC.isSubtypeOf(typeObject), isTrue); | 2522 expect(typeC.isSubtypeOf(typeObject), isTrue); |
2523 expect(typeC.isSubtypeOf(typeA), isTrue); | 2523 expect(typeC.isSubtypeOf(typeA), isTrue); |
2524 expect(typeA.isSubtypeOf(typeC), isFalse); | 2524 expect(typeA.isSubtypeOf(typeC), isFalse); |
2525 } | 2525 } |
2526 | 2526 |
2527 void test_isSubtypeOf_mixins() { | 2527 void test_isSubtypeOf_mixins() { |
2528 // | 2528 // |
2529 // class A {} | 2529 // class A {} |
2530 // class B extends A {} | 2530 // class B extends A {} |
2531 // class C with B {} | 2531 // class C with B {} |
2532 // | 2532 // |
2533 ClassElement classA = ElementFactory.classElement2("A", []); | 2533 ClassElement classA = ElementFactory.classElement2("A"); |
2534 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2534 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2535 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2535 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2536 InterfaceType typeObject = classA.supertype; | 2536 InterfaceType typeObject = classA.supertype; |
2537 InterfaceType typeA = classA.type; | 2537 InterfaceType typeA = classA.type; |
2538 InterfaceType typeB = classB.type; | 2538 InterfaceType typeB = classB.type; |
2539 InterfaceType typeC = classC.type; | 2539 InterfaceType typeC = classC.type; |
2540 classC.mixins = <InterfaceType> [typeB]; | 2540 classC.mixins = <InterfaceType> [typeB]; |
2541 expect(typeC.isSubtypeOf(typeB), isTrue); | 2541 expect(typeC.isSubtypeOf(typeB), isTrue); |
2542 expect(typeC.isSubtypeOf(typeObject), isTrue); | 2542 expect(typeC.isSubtypeOf(typeObject), isTrue); |
2543 expect(typeC.isSubtypeOf(typeA), isTrue); | 2543 expect(typeC.isSubtypeOf(typeA), isTrue); |
2544 expect(typeA.isSubtypeOf(typeC), isFalse); | 2544 expect(typeA.isSubtypeOf(typeC), isFalse); |
2545 } | 2545 } |
2546 | 2546 |
2547 void test_isSubtypeOf_object() { | 2547 void test_isSubtypeOf_object() { |
2548 ClassElement classA = ElementFactory.classElement2("A", []); | 2548 ClassElement classA = ElementFactory.classElement2("A"); |
2549 InterfaceType typeA = classA.type; | 2549 InterfaceType typeA = classA.type; |
2550 InterfaceType typeObject = classA.supertype; | 2550 InterfaceType typeObject = classA.supertype; |
2551 expect(typeA.isSubtypeOf(typeObject), isTrue); | 2551 expect(typeA.isSubtypeOf(typeObject), isTrue); |
2552 expect(typeObject.isSubtypeOf(typeA), isFalse); | 2552 expect(typeObject.isSubtypeOf(typeA), isFalse); |
2553 } | 2553 } |
2554 | 2554 |
2555 void test_isSubtypeOf_self() { | 2555 void test_isSubtypeOf_self() { |
2556 ClassElement classA = ElementFactory.classElement2("A", []); | 2556 ClassElement classA = ElementFactory.classElement2("A"); |
2557 InterfaceType typeA = classA.type; | 2557 InterfaceType typeA = classA.type; |
2558 expect(typeA.isSubtypeOf(typeA), isTrue); | 2558 expect(typeA.isSubtypeOf(typeA), isTrue); |
2559 } | 2559 } |
2560 | 2560 |
2561 void test_isSubtypeOf_transitive_recursive() { | 2561 void test_isSubtypeOf_transitive_recursive() { |
2562 // | 2562 // |
2563 // class A extends B {} | 2563 // class A extends B {} |
2564 // class B extends A {} | 2564 // class B extends A {} |
2565 // class C {} | 2565 // class C {} |
2566 // | 2566 // |
2567 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2567 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2568 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 2568 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
2569 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2569 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2570 InterfaceType typeA = classA.type; | 2570 InterfaceType typeA = classA.type; |
2571 InterfaceType typeC = classC.type; | 2571 InterfaceType typeC = classC.type; |
2572 classA.supertype = classB.type; | 2572 classA.supertype = classB.type; |
2573 expect(typeA.isSubtypeOf(typeC), isFalse); | 2573 expect(typeA.isSubtypeOf(typeC), isFalse); |
2574 } | 2574 } |
2575 | 2575 |
2576 void test_isSubtypeOf_transitive_superclass() { | 2576 void test_isSubtypeOf_transitive_superclass() { |
2577 ClassElement classA = ElementFactory.classElement2("A", []); | 2577 ClassElement classA = ElementFactory.classElement2("A"); |
2578 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2578 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2579 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | 2579 ClassElement classC = ElementFactory.classElement("C", classB.type); |
2580 InterfaceType typeA = classA.type; | 2580 InterfaceType typeA = classA.type; |
2581 InterfaceType typeC = classC.type; | 2581 InterfaceType typeC = classC.type; |
2582 expect(typeC.isSubtypeOf(typeA), isTrue); | 2582 expect(typeC.isSubtypeOf(typeA), isTrue); |
2583 expect(typeA.isSubtypeOf(typeC), isFalse); | 2583 expect(typeA.isSubtypeOf(typeC), isFalse); |
2584 } | 2584 } |
2585 | 2585 |
2586 void test_isSubtypeOf_typeArguments() { | 2586 void test_isSubtypeOf_typeArguments() { |
2587 DartType dynamicType = DynamicTypeImpl.instance; | 2587 DartType dynamicType = DynamicTypeImpl.instance; |
2588 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 2588 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
2589 ClassElement classI = ElementFactory.classElement2("I", []); | 2589 ClassElement classI = ElementFactory.classElement2("I"); |
2590 ClassElement classJ = ElementFactory.classElement("J", classI.type, []); | 2590 ClassElement classJ = ElementFactory.classElement("J", classI.type); |
2591 ClassElement classK = ElementFactory.classElement2("K", []); | 2591 ClassElement classK = ElementFactory.classElement2("K"); |
2592 InterfaceType typeA = classA.type; | 2592 InterfaceType typeA = classA.type; |
2593 InterfaceType typeA_dynamic = typeA.substitute4(<DartType> [dynamicType]); | 2593 InterfaceType typeA_dynamic = typeA.substitute4(<DartType> [dynamicType]); |
2594 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); | 2594 InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA); |
2595 InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA); | 2595 InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA); |
2596 InterfaceTypeImpl typeAK = new InterfaceTypeImpl.con1(classA); | 2596 InterfaceTypeImpl typeAK = new InterfaceTypeImpl.con1(classA); |
2597 typeAI.typeArguments = <DartType> [classI.type]; | 2597 typeAI.typeArguments = <DartType> [classI.type]; |
2598 typeAJ.typeArguments = <DartType> [classJ.type]; | 2598 typeAJ.typeArguments = <DartType> [classJ.type]; |
2599 typeAK.typeArguments = <DartType> [classK.type]; | 2599 typeAK.typeArguments = <DartType> [classK.type]; |
2600 // A<J> <: A<I> since J <: I | 2600 // A<J> <: A<I> since J <: I |
2601 expect(typeAJ.isSubtypeOf(typeAI), isTrue); | 2601 expect(typeAJ.isSubtypeOf(typeAI), isTrue); |
(...skipping 15 matching lines...) Expand all Loading... |
2617 // | 2617 // |
2618 // class A<E> {} | 2618 // class A<E> {} |
2619 // | 2619 // |
2620 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 2620 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
2621 InterfaceType typeA = classA.type; | 2621 InterfaceType typeA = classA.type; |
2622 TypeParameterType parameterType = classA.typeParameters[0].type; | 2622 TypeParameterType parameterType = classA.typeParameters[0].type; |
2623 expect(typeA.isSubtypeOf(parameterType), isFalse); | 2623 expect(typeA.isSubtypeOf(parameterType), isFalse); |
2624 } | 2624 } |
2625 | 2625 |
2626 void test_isSupertypeOf_directSupertype() { | 2626 void test_isSupertypeOf_directSupertype() { |
2627 ClassElement classA = ElementFactory.classElement2("A", []); | 2627 ClassElement classA = ElementFactory.classElement2("A"); |
2628 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2628 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2629 InterfaceType typeA = classA.type; | 2629 InterfaceType typeA = classA.type; |
2630 InterfaceType typeB = classB.type; | 2630 InterfaceType typeB = classB.type; |
2631 expect(typeB.isSupertypeOf(typeA), isFalse); | 2631 expect(typeB.isSupertypeOf(typeA), isFalse); |
2632 expect(typeA.isSupertypeOf(typeB), isTrue); | 2632 expect(typeA.isSupertypeOf(typeB), isTrue); |
2633 } | 2633 } |
2634 | 2634 |
2635 void test_isSupertypeOf_dynamic() { | 2635 void test_isSupertypeOf_dynamic() { |
2636 ClassElement classA = ElementFactory.classElement2("A", []); | 2636 ClassElement classA = ElementFactory.classElement2("A"); |
2637 InterfaceType typeA = classA.type; | 2637 InterfaceType typeA = classA.type; |
2638 DartType dynamicType = DynamicTypeImpl.instance; | 2638 DartType dynamicType = DynamicTypeImpl.instance; |
2639 expect(dynamicType.isSupertypeOf(typeA), isTrue); | 2639 expect(dynamicType.isSupertypeOf(typeA), isTrue); |
2640 expect(typeA.isSupertypeOf(dynamicType), isTrue); | 2640 expect(typeA.isSupertypeOf(dynamicType), isTrue); |
2641 } | 2641 } |
2642 | 2642 |
2643 void test_isSupertypeOf_indirectSupertype() { | 2643 void test_isSupertypeOf_indirectSupertype() { |
2644 ClassElement classA = ElementFactory.classElement2("A", []); | 2644 ClassElement classA = ElementFactory.classElement2("A"); |
2645 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2645 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2646 ClassElement classC = ElementFactory.classElement("C", classB.type, []); | 2646 ClassElement classC = ElementFactory.classElement("C", classB.type); |
2647 InterfaceType typeA = classA.type; | 2647 InterfaceType typeA = classA.type; |
2648 InterfaceType typeC = classC.type; | 2648 InterfaceType typeC = classC.type; |
2649 expect(typeC.isSupertypeOf(typeA), isFalse); | 2649 expect(typeC.isSupertypeOf(typeA), isFalse); |
2650 expect(typeA.isSupertypeOf(typeC), isTrue); | 2650 expect(typeA.isSupertypeOf(typeC), isTrue); |
2651 } | 2651 } |
2652 | 2652 |
2653 void test_isSupertypeOf_interface() { | 2653 void test_isSupertypeOf_interface() { |
2654 ClassElement classA = ElementFactory.classElement2("A", []); | 2654 ClassElement classA = ElementFactory.classElement2("A"); |
2655 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2655 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2656 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2656 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2657 InterfaceType typeObject = classA.supertype; | 2657 InterfaceType typeObject = classA.supertype; |
2658 InterfaceType typeA = classA.type; | 2658 InterfaceType typeA = classA.type; |
2659 InterfaceType typeB = classB.type; | 2659 InterfaceType typeB = classB.type; |
2660 InterfaceType typeC = classC.type; | 2660 InterfaceType typeC = classC.type; |
2661 classC.interfaces = <InterfaceType> [typeB]; | 2661 classC.interfaces = <InterfaceType> [typeB]; |
2662 expect(typeB.isSupertypeOf(typeC), isTrue); | 2662 expect(typeB.isSupertypeOf(typeC), isTrue); |
2663 expect(typeObject.isSupertypeOf(typeC), isTrue); | 2663 expect(typeObject.isSupertypeOf(typeC), isTrue); |
2664 expect(typeA.isSupertypeOf(typeC), isTrue); | 2664 expect(typeA.isSupertypeOf(typeC), isTrue); |
2665 expect(typeC.isSupertypeOf(typeA), isFalse); | 2665 expect(typeC.isSupertypeOf(typeA), isFalse); |
2666 } | 2666 } |
2667 | 2667 |
2668 void test_isSupertypeOf_mixins() { | 2668 void test_isSupertypeOf_mixins() { |
2669 // | 2669 // |
2670 // class A {} | 2670 // class A {} |
2671 // class B extends A {} | 2671 // class B extends A {} |
2672 // class C with B {} | 2672 // class C with B {} |
2673 // | 2673 // |
2674 ClassElement classA = ElementFactory.classElement2("A", []); | 2674 ClassElement classA = ElementFactory.classElement2("A"); |
2675 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 2675 ClassElement classB = ElementFactory.classElement("B", classA.type); |
2676 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 2676 ClassElementImpl classC = ElementFactory.classElement2("C"); |
2677 InterfaceType typeObject = classA.supertype; | 2677 InterfaceType typeObject = classA.supertype; |
2678 InterfaceType typeA = classA.type; | 2678 InterfaceType typeA = classA.type; |
2679 InterfaceType typeB = classB.type; | 2679 InterfaceType typeB = classB.type; |
2680 InterfaceType typeC = classC.type; | 2680 InterfaceType typeC = classC.type; |
2681 classC.mixins = <InterfaceType> [typeB]; | 2681 classC.mixins = <InterfaceType> [typeB]; |
2682 expect(typeB.isSupertypeOf(typeC), isTrue); | 2682 expect(typeB.isSupertypeOf(typeC), isTrue); |
2683 expect(typeObject.isSupertypeOf(typeC), isTrue); | 2683 expect(typeObject.isSupertypeOf(typeC), isTrue); |
2684 expect(typeA.isSupertypeOf(typeC), isTrue); | 2684 expect(typeA.isSupertypeOf(typeC), isTrue); |
2685 expect(typeC.isSupertypeOf(typeA), isFalse); | 2685 expect(typeC.isSupertypeOf(typeA), isFalse); |
2686 } | 2686 } |
2687 | 2687 |
2688 void test_isSupertypeOf_object() { | 2688 void test_isSupertypeOf_object() { |
2689 ClassElement classA = ElementFactory.classElement2("A", []); | 2689 ClassElement classA = ElementFactory.classElement2("A"); |
2690 InterfaceType typeA = classA.type; | 2690 InterfaceType typeA = classA.type; |
2691 InterfaceType typeObject = classA.supertype; | 2691 InterfaceType typeObject = classA.supertype; |
2692 expect(typeA.isSupertypeOf(typeObject), isFalse); | 2692 expect(typeA.isSupertypeOf(typeObject), isFalse); |
2693 expect(typeObject.isSupertypeOf(typeA), isTrue); | 2693 expect(typeObject.isSupertypeOf(typeA), isTrue); |
2694 } | 2694 } |
2695 | 2695 |
2696 void test_isSupertypeOf_self() { | 2696 void test_isSupertypeOf_self() { |
2697 ClassElement classA = ElementFactory.classElement2("A", []); | 2697 ClassElement classA = ElementFactory.classElement2("A"); |
2698 InterfaceType typeA = classA.type; | 2698 InterfaceType typeA = classA.type; |
2699 expect(typeA.isSupertypeOf(typeA), isTrue); | 2699 expect(typeA.isSupertypeOf(typeA), isTrue); |
2700 } | 2700 } |
2701 | 2701 |
2702 void test_lookUpGetter_implemented() { | 2702 void test_lookUpGetter_implemented() { |
2703 // | 2703 // |
2704 // class A { g {} } | 2704 // class A { g {} } |
2705 // | 2705 // |
2706 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2706 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2707 String getterName = "g"; | 2707 String getterName = "g"; |
2708 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); | 2708 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); |
2709 classA.accessors = <PropertyAccessorElement> [getterG]; | 2709 classA.accessors = <PropertyAccessorElement> [getterG]; |
2710 InterfaceType typeA = classA.type; | 2710 InterfaceType typeA = classA.type; |
2711 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2711 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2712 CompilationUnitElement unit = library.definingCompilationUnit; | 2712 CompilationUnitElement unit = library.definingCompilationUnit; |
2713 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 2713 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
2714 expect(typeA.lookUpGetter(getterName, library), same(getterG)); | 2714 expect(typeA.lookUpGetter(getterName, library), same(getterG)); |
2715 } | 2715 } |
2716 | 2716 |
2717 void test_lookUpGetter_inherited() { | 2717 void test_lookUpGetter_inherited() { |
2718 // | 2718 // |
2719 // class A { g {} } | 2719 // class A { g {} } |
2720 // class B extends A {} | 2720 // class B extends A {} |
2721 // | 2721 // |
2722 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2722 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2723 String getterName = "g"; | 2723 String getterName = "g"; |
2724 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); | 2724 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, null); |
2725 classA.accessors = <PropertyAccessorElement> [getterG]; | 2725 classA.accessors = <PropertyAccessorElement> [getterG]; |
2726 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 2726 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
2727 InterfaceType typeB = classB.type; | 2727 InterfaceType typeB = classB.type; |
2728 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2728 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2729 CompilationUnitElement unit = library.definingCompilationUnit; | 2729 CompilationUnitElement unit = library.definingCompilationUnit; |
2730 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 2730 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
2731 expect(typeB.lookUpGetter(getterName, library), same(getterG)); | 2731 expect(typeB.lookUpGetter(getterName, library), same(getterG)); |
2732 } | 2732 } |
2733 | 2733 |
2734 void test_lookUpGetter_recursive() { | 2734 void test_lookUpGetter_recursive() { |
2735 // | 2735 // |
2736 // class A extends B {} | 2736 // class A extends B {} |
2737 // class B extends A {} | 2737 // class B extends A {} |
2738 // | 2738 // |
2739 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2739 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2740 InterfaceType typeA = classA.type; | 2740 InterfaceType typeA = classA.type; |
2741 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); | 2741 ClassElementImpl classB = ElementFactory.classElement("B", typeA); |
2742 classA.supertype = classB.type; | 2742 classA.supertype = classB.type; |
2743 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2743 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2744 CompilationUnitElement unit = library.definingCompilationUnit; | 2744 CompilationUnitElement unit = library.definingCompilationUnit; |
2745 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 2745 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
2746 expect(typeA.lookUpGetter("g", library), isNull); | 2746 expect(typeA.lookUpGetter("g", library), isNull); |
2747 } | 2747 } |
2748 | 2748 |
2749 void test_lookUpGetter_unimplemented() { | 2749 void test_lookUpGetter_unimplemented() { |
2750 // | 2750 // |
2751 // class A {} | 2751 // class A {} |
2752 // | 2752 // |
2753 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2753 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2754 InterfaceType typeA = classA.type; | 2754 InterfaceType typeA = classA.type; |
2755 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2755 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2756 CompilationUnitElement unit = library.definingCompilationUnit; | 2756 CompilationUnitElement unit = library.definingCompilationUnit; |
2757 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 2757 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
2758 expect(typeA.lookUpGetter("g", library), isNull); | 2758 expect(typeA.lookUpGetter("g", library), isNull); |
2759 } | 2759 } |
2760 | 2760 |
2761 void test_lookUpMethod_implemented() { | 2761 void test_lookUpMethod_implemented() { |
2762 // | 2762 // |
2763 // class A { m() {} } | 2763 // class A { m() {} } |
2764 // | 2764 // |
2765 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2765 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2766 String methodName = "m"; | 2766 String methodName = "m"; |
2767 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
]); | 2767 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null); |
2768 classA.methods = <MethodElement> [methodM]; | 2768 classA.methods = <MethodElement> [methodM]; |
2769 InterfaceType typeA = classA.type; | 2769 InterfaceType typeA = classA.type; |
2770 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2770 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2771 CompilationUnitElement unit = library.definingCompilationUnit; | 2771 CompilationUnitElement unit = library.definingCompilationUnit; |
2772 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 2772 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
2773 expect(typeA.lookUpMethod(methodName, library), same(methodM)); | 2773 expect(typeA.lookUpMethod(methodName, library), same(methodM)); |
2774 } | 2774 } |
2775 | 2775 |
2776 void test_lookUpMethod_inherited() { | 2776 void test_lookUpMethod_inherited() { |
2777 // | 2777 // |
2778 // class A { m() {} } | 2778 // class A { m() {} } |
2779 // class B extends A {} | 2779 // class B extends A {} |
2780 // | 2780 // |
2781 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2781 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2782 String methodName = "m"; | 2782 String methodName = "m"; |
2783 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, [
]); | 2783 MethodElementImpl methodM = ElementFactory.methodElement(methodName, null); |
2784 classA.methods = <MethodElement> [methodM]; | 2784 classA.methods = <MethodElement> [methodM]; |
2785 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 2785 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
2786 InterfaceType typeB = classB.type; | 2786 InterfaceType typeB = classB.type; |
2787 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2787 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2788 CompilationUnitElement unit = library.definingCompilationUnit; | 2788 CompilationUnitElement unit = library.definingCompilationUnit; |
2789 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 2789 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
2790 expect(typeB.lookUpMethod(methodName, library), same(methodM)); | 2790 expect(typeB.lookUpMethod(methodName, library), same(methodM)); |
2791 } | 2791 } |
2792 | 2792 |
2793 void test_lookUpMethod_parameterized() { | 2793 void test_lookUpMethod_parameterized() { |
2794 // | 2794 // |
2795 // class A<E> { E m(E p) {} } | 2795 // class A<E> { E m(E p) {} } |
2796 // class B<F> extends A<F> {} | 2796 // class B<F> extends A<F> {} |
2797 // | 2797 // |
2798 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); | 2798 ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]); |
2799 DartType typeE = classA.type.typeArguments[0]; | 2799 DartType typeE = classA.type.typeArguments[0]; |
2800 String methodName = "m"; | 2800 String methodName = "m"; |
2801 MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE,
[typeE]); | 2801 MethodElementImpl methodM = ElementFactory.methodElement(methodName, typeE,
[typeE]); |
2802 classA.methods = <MethodElement> [methodM]; | 2802 classA.methods = <MethodElement> [methodM]; |
2803 (methodM.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; | 2803 (methodM.type as FunctionTypeImpl).typeArguments = classA.type.typeArguments
; |
2804 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); | 2804 ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]); |
2805 InterfaceType typeB = classB.type; | 2805 InterfaceType typeB = classB.type; |
2806 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); | 2806 InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA); |
2807 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; | 2807 typeAF.typeArguments = <DartType> [typeB.typeArguments[0]]; |
2808 classB.supertype = typeAF; | 2808 classB.supertype = typeAF; |
2809 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2809 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2810 CompilationUnitElement unit = library.definingCompilationUnit; | 2810 CompilationUnitElement unit = library.definingCompilationUnit; |
2811 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 2811 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
2812 // | 2812 // |
2813 // B<I> | 2813 // B<I> |
2814 // | 2814 // |
2815 InterfaceType typeI = ElementFactory.classElement2("I", []).type; | 2815 InterfaceType typeI = ElementFactory.classElement2("I").type; |
2816 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); | 2816 InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB); |
2817 typeBI.typeArguments = <DartType> [typeI]; | 2817 typeBI.typeArguments = <DartType> [typeI]; |
2818 MethodElement method = typeBI.lookUpMethod(methodName, library); | 2818 MethodElement method = typeBI.lookUpMethod(methodName, library); |
2819 expect(method, isNotNull); | 2819 expect(method, isNotNull); |
2820 FunctionType methodType = method.type; | 2820 FunctionType methodType = method.type; |
2821 expect(methodType.returnType, same(typeI)); | 2821 expect(methodType.returnType, same(typeI)); |
2822 List<DartType> parameterTypes = methodType.normalParameterTypes; | 2822 List<DartType> parameterTypes = methodType.normalParameterTypes; |
2823 expect(parameterTypes, hasLength(1)); | 2823 expect(parameterTypes, hasLength(1)); |
2824 expect(parameterTypes[0], same(typeI)); | 2824 expect(parameterTypes[0], same(typeI)); |
2825 } | 2825 } |
2826 | 2826 |
2827 void test_lookUpMethod_recursive() { | 2827 void test_lookUpMethod_recursive() { |
2828 // | 2828 // |
2829 // class A extends B {} | 2829 // class A extends B {} |
2830 // class B extends A {} | 2830 // class B extends A {} |
2831 // | 2831 // |
2832 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2832 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2833 InterfaceType typeA = classA.type; | 2833 InterfaceType typeA = classA.type; |
2834 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); | 2834 ClassElementImpl classB = ElementFactory.classElement("B", typeA); |
2835 classA.supertype = classB.type; | 2835 classA.supertype = classB.type; |
2836 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2836 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2837 CompilationUnitElement unit = library.definingCompilationUnit; | 2837 CompilationUnitElement unit = library.definingCompilationUnit; |
2838 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 2838 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
2839 expect(typeA.lookUpMethod("m", library), isNull); | 2839 expect(typeA.lookUpMethod("m", library), isNull); |
2840 } | 2840 } |
2841 | 2841 |
2842 void test_lookUpMethod_unimplemented() { | 2842 void test_lookUpMethod_unimplemented() { |
2843 // | 2843 // |
2844 // class A {} | 2844 // class A {} |
2845 // | 2845 // |
2846 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2846 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2847 InterfaceType typeA = classA.type; | 2847 InterfaceType typeA = classA.type; |
2848 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2848 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2849 CompilationUnitElement unit = library.definingCompilationUnit; | 2849 CompilationUnitElement unit = library.definingCompilationUnit; |
2850 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 2850 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
2851 expect(typeA.lookUpMethod("m", library), isNull); | 2851 expect(typeA.lookUpMethod("m", library), isNull); |
2852 } | 2852 } |
2853 | 2853 |
2854 void test_lookUpSetter_implemented() { | 2854 void test_lookUpSetter_implemented() { |
2855 // | 2855 // |
2856 // class A { s(x) {} } | 2856 // class A { s(x) {} } |
2857 // | 2857 // |
2858 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2858 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2859 String setterName = "s"; | 2859 String setterName = "s"; |
2860 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); | 2860 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); |
2861 classA.accessors = <PropertyAccessorElement> [setterS]; | 2861 classA.accessors = <PropertyAccessorElement> [setterS]; |
2862 InterfaceType typeA = classA.type; | 2862 InterfaceType typeA = classA.type; |
2863 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2863 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2864 CompilationUnitElement unit = library.definingCompilationUnit; | 2864 CompilationUnitElement unit = library.definingCompilationUnit; |
2865 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 2865 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
2866 expect(typeA.lookUpSetter(setterName, library), same(setterS)); | 2866 expect(typeA.lookUpSetter(setterName, library), same(setterS)); |
2867 } | 2867 } |
2868 | 2868 |
2869 void test_lookUpSetter_inherited() { | 2869 void test_lookUpSetter_inherited() { |
2870 // | 2870 // |
2871 // class A { s(x) {} } | 2871 // class A { s(x) {} } |
2872 // class B extends A {} | 2872 // class B extends A {} |
2873 // | 2873 // |
2874 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2874 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2875 String setterName = "g"; | 2875 String setterName = "g"; |
2876 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); | 2876 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, null); |
2877 classA.accessors = <PropertyAccessorElement> [setterS]; | 2877 classA.accessors = <PropertyAccessorElement> [setterS]; |
2878 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 2878 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
2879 InterfaceType typeB = classB.type; | 2879 InterfaceType typeB = classB.type; |
2880 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2880 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2881 CompilationUnitElement unit = library.definingCompilationUnit; | 2881 CompilationUnitElement unit = library.definingCompilationUnit; |
2882 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 2882 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
2883 expect(typeB.lookUpSetter(setterName, library), same(setterS)); | 2883 expect(typeB.lookUpSetter(setterName, library), same(setterS)); |
2884 } | 2884 } |
2885 | 2885 |
2886 void test_lookUpSetter_recursive() { | 2886 void test_lookUpSetter_recursive() { |
2887 // | 2887 // |
2888 // class A extends B {} | 2888 // class A extends B {} |
2889 // class B extends A {} | 2889 // class B extends A {} |
2890 // | 2890 // |
2891 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2891 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2892 InterfaceType typeA = classA.type; | 2892 InterfaceType typeA = classA.type; |
2893 ClassElementImpl classB = ElementFactory.classElement("B", typeA, []); | 2893 ClassElementImpl classB = ElementFactory.classElement("B", typeA); |
2894 classA.supertype = classB.type; | 2894 classA.supertype = classB.type; |
2895 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2895 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2896 CompilationUnitElement unit = library.definingCompilationUnit; | 2896 CompilationUnitElement unit = library.definingCompilationUnit; |
2897 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; | 2897 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA, classB]
; |
2898 expect(typeA.lookUpSetter("s", library), isNull); | 2898 expect(typeA.lookUpSetter("s", library), isNull); |
2899 } | 2899 } |
2900 | 2900 |
2901 void test_lookUpSetter_unimplemented() { | 2901 void test_lookUpSetter_unimplemented() { |
2902 // | 2902 // |
2903 // class A {} | 2903 // class A {} |
2904 // | 2904 // |
2905 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2905 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2906 InterfaceType typeA = classA.type; | 2906 InterfaceType typeA = classA.type; |
2907 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); | 2907 LibraryElementImpl library = ElementFactory.library(createAnalysisContext(),
"lib"); |
2908 CompilationUnitElement unit = library.definingCompilationUnit; | 2908 CompilationUnitElement unit = library.definingCompilationUnit; |
2909 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; | 2909 (unit as CompilationUnitElementImpl).types = <ClassElement> [classA]; |
2910 expect(typeA.lookUpSetter("s", library), isNull); | 2910 expect(typeA.lookUpSetter("s", library), isNull); |
2911 } | 2911 } |
2912 | 2912 |
2913 void test_setTypeArguments() { | 2913 void test_setTypeArguments() { |
2914 InterfaceTypeImpl type = ElementFactory.classElement2("A", []).type as Inter
faceTypeImpl; | 2914 InterfaceTypeImpl type = ElementFactory.classElement2("A").type as Interface
TypeImpl; |
2915 List<DartType> typeArguments = <DartType> [ | 2915 List<DartType> typeArguments = <DartType> [ |
2916 ElementFactory.classElement2("B", []).type, | 2916 ElementFactory.classElement2("B").type, |
2917 ElementFactory.classElement2("C", []).type]; | 2917 ElementFactory.classElement2("C").type]; |
2918 type.typeArguments = typeArguments; | 2918 type.typeArguments = typeArguments; |
2919 expect(type.typeArguments, typeArguments); | 2919 expect(type.typeArguments, typeArguments); |
2920 } | 2920 } |
2921 | 2921 |
2922 void test_substitute_equal() { | 2922 void test_substitute_equal() { |
2923 ClassElement classAE = ElementFactory.classElement2("A", ["E"]); | 2923 ClassElement classAE = ElementFactory.classElement2("A", ["E"]); |
2924 InterfaceType typeAE = classAE.type; | 2924 InterfaceType typeAE = classAE.type; |
2925 InterfaceType argumentType = ElementFactory.classElement2("B", []).type; | 2925 InterfaceType argumentType = ElementFactory.classElement2("B").type; |
2926 List<DartType> args = [argumentType]; | 2926 List<DartType> args = [argumentType]; |
2927 List<DartType> params = [classAE.typeParameters[0].type]; | 2927 List<DartType> params = [classAE.typeParameters[0].type]; |
2928 InterfaceType typeAESubbed = typeAE.substitute2(args, params); | 2928 InterfaceType typeAESubbed = typeAE.substitute2(args, params); |
2929 expect(typeAESubbed.element, classAE); | 2929 expect(typeAESubbed.element, classAE); |
2930 List<DartType> resultArguments = typeAESubbed.typeArguments; | 2930 List<DartType> resultArguments = typeAESubbed.typeArguments; |
2931 expect(resultArguments, hasLength(1)); | 2931 expect(resultArguments, hasLength(1)); |
2932 expect(resultArguments[0], argumentType); | 2932 expect(resultArguments[0], argumentType); |
2933 } | 2933 } |
2934 | 2934 |
2935 void test_substitute_exception() { | 2935 void test_substitute_exception() { |
2936 try { | 2936 try { |
2937 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2937 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2938 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); | 2938 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); |
2939 InterfaceType argumentType = ElementFactory.classElement2("B", []).type; | 2939 InterfaceType argumentType = ElementFactory.classElement2("B").type; |
2940 type.substitute2(<DartType> [argumentType], <DartType> []); | 2940 type.substitute2(<DartType> [argumentType], <DartType>[]); |
2941 fail("Expected to encounter exception, argument and parameter type array l
engths not equal."); | 2941 fail("Expected to encounter exception, argument and parameter type array l
engths not equal."); |
2942 } catch (e) { | 2942 } catch (e) { |
2943 // Expected result | 2943 // Expected result |
2944 } | 2944 } |
2945 } | 2945 } |
2946 | 2946 |
2947 void test_substitute_notEqual() { | 2947 void test_substitute_notEqual() { |
2948 // The [test_substitute_equals] above has a slightly higher level implementa
tion. | 2948 // The [test_substitute_equals] above has a slightly higher level implementa
tion. |
2949 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 2949 ClassElementImpl classA = ElementFactory.classElement2("A"); |
2950 TypeParameterElementImpl parameterElement = new TypeParameterElementImpl.for
Node(AstFactory.identifier3("E")); | 2950 TypeParameterElementImpl parameterElement = new TypeParameterElementImpl.for
Node(AstFactory.identifier3("E")); |
2951 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); | 2951 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA); |
2952 TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(parameterElement
); | 2952 TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(parameterElement
); |
2953 type.typeArguments = <DartType> [parameter]; | 2953 type.typeArguments = <DartType> [parameter]; |
2954 InterfaceType argumentType = ElementFactory.classElement2("B", []).type; | 2954 InterfaceType argumentType = ElementFactory.classElement2("B").type; |
2955 TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(new TypePara
meterElementImpl.forNode(AstFactory.identifier3("F"))); | 2955 TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(new TypePara
meterElementImpl.forNode(AstFactory.identifier3("F"))); |
2956 InterfaceType result = type.substitute2(<DartType> [argumentType], <DartType
> [parameterType]); | 2956 InterfaceType result = type.substitute2(<DartType> [argumentType], <DartType
> [parameterType]); |
2957 expect(result.element, classA); | 2957 expect(result.element, classA); |
2958 List<DartType> resultArguments = result.typeArguments; | 2958 List<DartType> resultArguments = result.typeArguments; |
2959 expect(resultArguments, hasLength(1)); | 2959 expect(resultArguments, hasLength(1)); |
2960 expect(resultArguments[0], parameter); | 2960 expect(resultArguments[0], parameter); |
2961 } | 2961 } |
2962 } | 2962 } |
2963 | 2963 |
2964 class InterfaceTypeImpl_FunctionTypeImplTest_test_isSubtypeOf_baseCase_classFunc
tion extends InterfaceTypeImpl { | 2964 class InterfaceTypeImpl_FunctionTypeImplTest_test_isSubtypeOf_baseCase_classFunc
tion extends InterfaceTypeImpl { |
(...skipping 10 matching lines...) Expand all Loading... |
2975 | 2975 |
2976 void test_getImportedLibraries() { | 2976 void test_getImportedLibraries() { |
2977 AnalysisContext context = createAnalysisContext(); | 2977 AnalysisContext context = createAnalysisContext(); |
2978 LibraryElementImpl library1 = ElementFactory.library(context, "l1"); | 2978 LibraryElementImpl library1 = ElementFactory.library(context, "l1"); |
2979 LibraryElementImpl library2 = ElementFactory.library(context, "l2"); | 2979 LibraryElementImpl library2 = ElementFactory.library(context, "l2"); |
2980 LibraryElementImpl library3 = ElementFactory.library(context, "l3"); | 2980 LibraryElementImpl library3 = ElementFactory.library(context, "l3"); |
2981 LibraryElementImpl library4 = ElementFactory.library(context, "l4"); | 2981 LibraryElementImpl library4 = ElementFactory.library(context, "l4"); |
2982 PrefixElement prefixA = new PrefixElementImpl.forNode(AstFactory.identifier3
("a")); | 2982 PrefixElement prefixA = new PrefixElementImpl.forNode(AstFactory.identifier3
("a")); |
2983 PrefixElement prefixB = new PrefixElementImpl.forNode(AstFactory.identifier3
("b")); | 2983 PrefixElement prefixB = new PrefixElementImpl.forNode(AstFactory.identifier3
("b")); |
2984 List<ImportElementImpl> imports = [ | 2984 List<ImportElementImpl> imports = [ |
2985 ElementFactory.importFor(library2, null, []), | 2985 ElementFactory.importFor(library2, null), |
2986 ElementFactory.importFor(library2, prefixB, []), | 2986 ElementFactory.importFor(library2, prefixB), |
2987 ElementFactory.importFor(library3, null, []), | 2987 ElementFactory.importFor(library3, null), |
2988 ElementFactory.importFor(library3, prefixA, []), | 2988 ElementFactory.importFor(library3, prefixA), |
2989 ElementFactory.importFor(library3, prefixB, []), | 2989 ElementFactory.importFor(library3, prefixB), |
2990 ElementFactory.importFor(library4, prefixA, [])]; | 2990 ElementFactory.importFor(library4, prefixA)]; |
2991 library1.imports = imports; | 2991 library1.imports = imports; |
2992 List<LibraryElement> libraries = library1.importedLibraries; | 2992 List<LibraryElement> libraries = library1.importedLibraries; |
2993 expect(libraries, unorderedEquals(<LibraryElement> [library2, library3, libr
ary4])); | 2993 expect(libraries, unorderedEquals(<LibraryElement> [library2, library3, libr
ary4])); |
2994 } | 2994 } |
2995 | 2995 |
2996 void test_getPrefixes() { | 2996 void test_getPrefixes() { |
2997 AnalysisContext context = createAnalysisContext(); | 2997 AnalysisContext context = createAnalysisContext(); |
2998 LibraryElementImpl library = ElementFactory.library(context, "l1"); | 2998 LibraryElementImpl library = ElementFactory.library(context, "l1"); |
2999 PrefixElement prefixA = new PrefixElementImpl.forNode(AstFactory.identifier3
("a")); | 2999 PrefixElement prefixA = new PrefixElementImpl.forNode(AstFactory.identifier3
("a")); |
3000 PrefixElement prefixB = new PrefixElementImpl.forNode(AstFactory.identifier3
("b")); | 3000 PrefixElement prefixB = new PrefixElementImpl.forNode(AstFactory.identifier3
("b")); |
3001 List<ImportElementImpl> imports = [ | 3001 List<ImportElementImpl> imports = [ |
3002 ElementFactory.importFor(ElementFactory.library(context, "l2"), null, []
), | 3002 ElementFactory.importFor(ElementFactory.library(context, "l2"), null), |
3003 ElementFactory.importFor(ElementFactory.library(context, "l3"), null, []
), | 3003 ElementFactory.importFor(ElementFactory.library(context, "l3"), null), |
3004 ElementFactory.importFor(ElementFactory.library(context, "l4"), prefixA,
[]), | 3004 ElementFactory.importFor(ElementFactory.library(context, "l4"), prefixA)
, |
3005 ElementFactory.importFor(ElementFactory.library(context, "l5"), prefixA,
[]), | 3005 ElementFactory.importFor(ElementFactory.library(context, "l5"), prefixA)
, |
3006 ElementFactory.importFor(ElementFactory.library(context, "l6"), prefixB,
[])]; | 3006 ElementFactory.importFor(ElementFactory.library(context, "l6"), prefixB)
]; |
3007 library.imports = imports; | 3007 library.imports = imports; |
3008 List<PrefixElement> prefixes = library.prefixes; | 3008 List<PrefixElement> prefixes = library.prefixes; |
3009 expect(prefixes, hasLength(2)); | 3009 expect(prefixes, hasLength(2)); |
3010 if (identical(prefixA, prefixes[0])) { | 3010 if (identical(prefixA, prefixes[0])) { |
3011 expect(prefixes[1], same(prefixB)); | 3011 expect(prefixes[1], same(prefixB)); |
3012 } else { | 3012 } else { |
3013 expect(prefixes[0], same(prefixB)); | 3013 expect(prefixes[0], same(prefixB)); |
3014 expect(prefixes[1], same(prefixA)); | 3014 expect(prefixes[1], same(prefixA)); |
3015 } | 3015 } |
3016 } | 3016 } |
3017 | 3017 |
3018 void test_getUnits() { | 3018 void test_getUnits() { |
3019 AnalysisContext context = createAnalysisContext(); | 3019 AnalysisContext context = createAnalysisContext(); |
3020 LibraryElementImpl library = ElementFactory.library(context, "test"); | 3020 LibraryElementImpl library = ElementFactory.library(context, "test"); |
3021 CompilationUnitElement unitLib = library.definingCompilationUnit; | 3021 CompilationUnitElement unitLib = library.definingCompilationUnit; |
3022 CompilationUnitElementImpl unitA = ElementFactory.compilationUnit("unit_a.da
rt"); | 3022 CompilationUnitElementImpl unitA = ElementFactory.compilationUnit("unit_a.da
rt"); |
3023 CompilationUnitElementImpl unitB = ElementFactory.compilationUnit("unit_b.da
rt"); | 3023 CompilationUnitElementImpl unitB = ElementFactory.compilationUnit("unit_b.da
rt"); |
3024 library.parts = <CompilationUnitElement> [unitA, unitB]; | 3024 library.parts = <CompilationUnitElement> [unitA, unitB]; |
3025 expect(library.units, unorderedEquals(<CompilationUnitElement> [unitLib, uni
tA, unitB])); | 3025 expect(library.units, unorderedEquals(<CompilationUnitElement> [unitLib, uni
tA, unitB])); |
3026 } | 3026 } |
3027 | 3027 |
3028 void test_getVisibleLibraries_cycle() { | 3028 void test_getVisibleLibraries_cycle() { |
3029 AnalysisContext context = createAnalysisContext(); | 3029 AnalysisContext context = createAnalysisContext(); |
3030 LibraryElementImpl library = ElementFactory.library(context, "app"); | 3030 LibraryElementImpl library = ElementFactory.library(context, "app"); |
3031 LibraryElementImpl libraryA = ElementFactory.library(context, "A"); | 3031 LibraryElementImpl libraryA = ElementFactory.library(context, "A"); |
3032 libraryA.imports = <ImportElementImpl> [ElementFactory.importFor(library, nu
ll, [])]; | 3032 libraryA.imports = <ImportElementImpl> [ElementFactory.importFor(library, nu
ll)]; |
3033 library.imports = <ImportElementImpl> [ElementFactory.importFor(libraryA, nu
ll, [])]; | 3033 library.imports = <ImportElementImpl> [ElementFactory.importFor(libraryA, nu
ll)]; |
3034 List<LibraryElement> libraries = library.visibleLibraries; | 3034 List<LibraryElement> libraries = library.visibleLibraries; |
3035 expect(libraries, unorderedEquals(<LibraryElement> [library, libraryA])); | 3035 expect(libraries, unorderedEquals(<LibraryElement> [library, libraryA])); |
3036 } | 3036 } |
3037 | 3037 |
3038 void test_getVisibleLibraries_directExports() { | 3038 void test_getVisibleLibraries_directExports() { |
3039 AnalysisContext context = createAnalysisContext(); | 3039 AnalysisContext context = createAnalysisContext(); |
3040 LibraryElementImpl library = ElementFactory.library(context, "app"); | 3040 LibraryElementImpl library = ElementFactory.library(context, "app"); |
3041 LibraryElementImpl libraryA = ElementFactory.library(context, "A"); | 3041 LibraryElementImpl libraryA = ElementFactory.library(context, "A"); |
3042 library.exports = <ExportElementImpl> [ElementFactory.exportFor(libraryA, []
)]; | 3042 library.exports = <ExportElementImpl> [ElementFactory.exportFor(libraryA)]; |
3043 List<LibraryElement> libraries = library.visibleLibraries; | 3043 List<LibraryElement> libraries = library.visibleLibraries; |
3044 expect(libraries, unorderedEquals(<LibraryElement> [library])); | 3044 expect(libraries, unorderedEquals(<LibraryElement> [library])); |
3045 } | 3045 } |
3046 | 3046 |
3047 void test_getVisibleLibraries_directImports() { | 3047 void test_getVisibleLibraries_directImports() { |
3048 AnalysisContext context = createAnalysisContext(); | 3048 AnalysisContext context = createAnalysisContext(); |
3049 LibraryElementImpl library = ElementFactory.library(context, "app"); | 3049 LibraryElementImpl library = ElementFactory.library(context, "app"); |
3050 LibraryElementImpl libraryA = ElementFactory.library(context, "A"); | 3050 LibraryElementImpl libraryA = ElementFactory.library(context, "A"); |
3051 library.imports = <ImportElementImpl> [ElementFactory.importFor(libraryA, nu
ll, [])]; | 3051 library.imports = <ImportElementImpl> [ElementFactory.importFor(libraryA, nu
ll)]; |
3052 List<LibraryElement> libraries = library.visibleLibraries; | 3052 List<LibraryElement> libraries = library.visibleLibraries; |
3053 expect(libraries, unorderedEquals(<LibraryElement> [library, libraryA])); | 3053 expect(libraries, unorderedEquals(<LibraryElement> [library, libraryA])); |
3054 } | 3054 } |
3055 | 3055 |
3056 void test_getVisibleLibraries_indirectExports() { | 3056 void test_getVisibleLibraries_indirectExports() { |
3057 AnalysisContext context = createAnalysisContext(); | 3057 AnalysisContext context = createAnalysisContext(); |
3058 LibraryElementImpl library = ElementFactory.library(context, "app"); | 3058 LibraryElementImpl library = ElementFactory.library(context, "app"); |
3059 LibraryElementImpl libraryA = ElementFactory.library(context, "A"); | 3059 LibraryElementImpl libraryA = ElementFactory.library(context, "A"); |
3060 LibraryElementImpl libraryAA = ElementFactory.library(context, "AA"); | 3060 LibraryElementImpl libraryAA = ElementFactory.library(context, "AA"); |
3061 libraryA.exports = <ExportElementImpl> [ElementFactory.exportFor(libraryAA,
[])]; | 3061 libraryA.exports = <ExportElementImpl> [ElementFactory.exportFor(libraryAA)]
; |
3062 library.imports = <ImportElementImpl> [ElementFactory.importFor(libraryA, nu
ll, [])]; | 3062 library.imports = <ImportElementImpl> [ElementFactory.importFor(libraryA, nu
ll)]; |
3063 List<LibraryElement> libraries = library.visibleLibraries; | 3063 List<LibraryElement> libraries = library.visibleLibraries; |
3064 expect(libraries, unorderedEquals(<LibraryElement> [library, libraryA, libra
ryAA])); | 3064 expect(libraries, unorderedEquals(<LibraryElement> [library, libraryA, libra
ryAA])); |
3065 } | 3065 } |
3066 | 3066 |
3067 void test_getVisibleLibraries_indirectImports() { | 3067 void test_getVisibleLibraries_indirectImports() { |
3068 AnalysisContext context = createAnalysisContext(); | 3068 AnalysisContext context = createAnalysisContext(); |
3069 LibraryElementImpl library = ElementFactory.library(context, "app"); | 3069 LibraryElementImpl library = ElementFactory.library(context, "app"); |
3070 LibraryElementImpl libraryA = ElementFactory.library(context, "A"); | 3070 LibraryElementImpl libraryA = ElementFactory.library(context, "A"); |
3071 LibraryElementImpl libraryAA = ElementFactory.library(context, "AA"); | 3071 LibraryElementImpl libraryAA = ElementFactory.library(context, "AA"); |
3072 LibraryElementImpl libraryB = ElementFactory.library(context, "B"); | 3072 LibraryElementImpl libraryB = ElementFactory.library(context, "B"); |
3073 libraryA.imports = <ImportElementImpl> [ElementFactory.importFor(libraryAA,
null, [])]; | 3073 libraryA.imports = <ImportElementImpl> [ElementFactory.importFor(libraryAA,
null)]; |
3074 library.imports = <ImportElementImpl> [ | 3074 library.imports = <ImportElementImpl> [ |
3075 ElementFactory.importFor(libraryA, null, []), | 3075 ElementFactory.importFor(libraryA, null), |
3076 ElementFactory.importFor(libraryB, null, [])]; | 3076 ElementFactory.importFor(libraryB, null)]; |
3077 List<LibraryElement> libraries = library.visibleLibraries; | 3077 List<LibraryElement> libraries = library.visibleLibraries; |
3078 expect(libraries, unorderedEquals(<LibraryElement> [library, libraryA, libra
ryAA, libraryB])); | 3078 expect(libraries, unorderedEquals(<LibraryElement> [library, libraryA, libra
ryAA, libraryB])); |
3079 } | 3079 } |
3080 | 3080 |
3081 void test_getVisibleLibraries_noImports() { | 3081 void test_getVisibleLibraries_noImports() { |
3082 AnalysisContext context = createAnalysisContext(); | 3082 AnalysisContext context = createAnalysisContext(); |
3083 LibraryElementImpl library = ElementFactory.library(context, "app"); | 3083 LibraryElementImpl library = ElementFactory.library(context, "app"); |
3084 expect(library.visibleLibraries, unorderedEquals(<LibraryElement> [library])
); | 3084 expect(library.visibleLibraries, unorderedEquals(<LibraryElement> [library])
); |
3085 } | 3085 } |
3086 | 3086 |
3087 void test_isUpToDate() { | 3087 void test_isUpToDate() { |
3088 AnalysisContext context = createAnalysisContext(); | 3088 AnalysisContext context = createAnalysisContext(); |
3089 context.sourceFactory = new SourceFactory([]); | 3089 context.sourceFactory = new SourceFactory([]); |
3090 LibraryElement library = ElementFactory.library(context, "foo"); | 3090 LibraryElement library = ElementFactory.library(context, "foo"); |
3091 context.setContents(library.definingCompilationUnit.source, "sdfsdff"); | 3091 context.setContents(library.definingCompilationUnit.source, "sdfsdff"); |
3092 // Assert that we are not up to date if the target has an old time stamp. | 3092 // Assert that we are not up to date if the target has an old time stamp. |
3093 expect(library.isUpToDate(0), isFalse); | 3093 expect(library.isUpToDate(0), isFalse); |
3094 // Assert that we are up to date with a target modification time in the futu
re. | 3094 // Assert that we are up to date with a target modification time in the futu
re. |
3095 expect(library.isUpToDate(JavaSystem.currentTimeMillis() + 1000), isTrue); | 3095 expect(library.isUpToDate(JavaSystem.currentTimeMillis() + 1000), isTrue); |
3096 } | 3096 } |
3097 | 3097 |
3098 void test_setImports() { | 3098 void test_setImports() { |
3099 AnalysisContext context = createAnalysisContext(); | 3099 AnalysisContext context = createAnalysisContext(); |
3100 LibraryElementImpl library = new LibraryElementImpl.forNode(context, AstFact
ory.libraryIdentifier2(["l1"])); | 3100 LibraryElementImpl library = new LibraryElementImpl.forNode(context, AstFact
ory.libraryIdentifier2(["l1"])); |
3101 List<ImportElementImpl> expectedImports = [ | 3101 List<ImportElementImpl> expectedImports = [ |
3102 ElementFactory.importFor(ElementFactory.library(context, "l2"), null, []
), | 3102 ElementFactory.importFor(ElementFactory.library(context, "l2"), null), |
3103 ElementFactory.importFor(ElementFactory.library(context, "l3"), null, []
)]; | 3103 ElementFactory.importFor(ElementFactory.library(context, "l3"), null)]; |
3104 library.imports = expectedImports; | 3104 library.imports = expectedImports; |
3105 List<ImportElement> actualImports = library.imports; | 3105 List<ImportElement> actualImports = library.imports; |
3106 expect(actualImports, hasLength(expectedImports.length)); | 3106 expect(actualImports, hasLength(expectedImports.length)); |
3107 for (int i = 0; i < actualImports.length; i++) { | 3107 for (int i = 0; i < actualImports.length; i++) { |
3108 expect(actualImports[i], same(expectedImports[i])); | 3108 expect(actualImports[i], same(expectedImports[i])); |
3109 } | 3109 } |
3110 } | 3110 } |
3111 } | 3111 } |
3112 | 3112 |
3113 class MultiplyDefinedElementImplTest extends EngineTestCase { | 3113 class MultiplyDefinedElementImplTest extends EngineTestCase { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3161 } | 3161 } |
3162 | 3162 |
3163 void test_isMoreSpecificThan_typeArguments_object() { | 3163 void test_isMoreSpecificThan_typeArguments_object() { |
3164 TypeParameterElementImpl element = new TypeParameterElementImpl.forNode(AstF
actory.identifier3("E")); | 3164 TypeParameterElementImpl element = new TypeParameterElementImpl.forNode(AstF
actory.identifier3("E")); |
3165 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); | 3165 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |
3166 // E << Object | 3166 // E << Object |
3167 expect(type.isMoreSpecificThan(ElementFactory.object.type), isTrue); | 3167 expect(type.isMoreSpecificThan(ElementFactory.object.type), isTrue); |
3168 } | 3168 } |
3169 | 3169 |
3170 void test_isMoreSpecificThan_typeArguments_resursive() { | 3170 void test_isMoreSpecificThan_typeArguments_resursive() { |
3171 ClassElementImpl classS = ElementFactory.classElement2("A", []); | 3171 ClassElementImpl classS = ElementFactory.classElement2("A"); |
3172 TypeParameterElementImpl typeParameterU = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("U")); | 3172 TypeParameterElementImpl typeParameterU = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("U")); |
3173 TypeParameterTypeImpl typeParameterTypeU = new TypeParameterTypeImpl(typePar
ameterU); | 3173 TypeParameterTypeImpl typeParameterTypeU = new TypeParameterTypeImpl(typePar
ameterU); |
3174 TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("T")); | 3174 TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("T")); |
3175 TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
ameterT); | 3175 TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
ameterT); |
3176 typeParameterT.bound = typeParameterTypeU; | 3176 typeParameterT.bound = typeParameterTypeU; |
3177 typeParameterU.bound = typeParameterTypeU; | 3177 typeParameterU.bound = typeParameterTypeU; |
3178 // <T extends U> and <U extends T> | 3178 // <T extends U> and <U extends T> |
3179 // T << S | 3179 // T << S |
3180 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isFalse); | 3180 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isFalse); |
3181 } | 3181 } |
3182 | 3182 |
3183 void test_isMoreSpecificThan_typeArguments_self() { | 3183 void test_isMoreSpecificThan_typeArguments_self() { |
3184 TypeParameterElementImpl element = new TypeParameterElementImpl.forNode(AstF
actory.identifier3("E")); | 3184 TypeParameterElementImpl element = new TypeParameterElementImpl.forNode(AstF
actory.identifier3("E")); |
3185 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); | 3185 TypeParameterTypeImpl type = new TypeParameterTypeImpl(element); |
3186 // E << E | 3186 // E << E |
3187 expect(type.isMoreSpecificThan(type), isTrue); | 3187 expect(type.isMoreSpecificThan(type), isTrue); |
3188 } | 3188 } |
3189 | 3189 |
3190 void test_isMoreSpecificThan_typeArguments_transitivity_interfaceTypes() { | 3190 void test_isMoreSpecificThan_typeArguments_transitivity_interfaceTypes() { |
3191 // class A {} | 3191 // class A {} |
3192 // class B extends A {} | 3192 // class B extends A {} |
3193 // | 3193 // |
3194 ClassElement classA = ElementFactory.classElement2("A", []); | 3194 ClassElement classA = ElementFactory.classElement2("A"); |
3195 ClassElement classB = ElementFactory.classElement("B", classA.type, []); | 3195 ClassElement classB = ElementFactory.classElement("B", classA.type); |
3196 InterfaceType typeA = classA.type; | 3196 InterfaceType typeA = classA.type; |
3197 InterfaceType typeB = classB.type; | 3197 InterfaceType typeB = classB.type; |
3198 TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("T")); | 3198 TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("T")); |
3199 typeParameterT.bound = typeB; | 3199 typeParameterT.bound = typeB; |
3200 TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
ameterT); | 3200 TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
ameterT); |
3201 // <T extends B> | 3201 // <T extends B> |
3202 // T << A | 3202 // T << A |
3203 expect(typeParameterTypeT.isMoreSpecificThan(typeA), isTrue); | 3203 expect(typeParameterTypeT.isMoreSpecificThan(typeA), isTrue); |
3204 } | 3204 } |
3205 | 3205 |
3206 void test_isMoreSpecificThan_typeArguments_transitivity_typeParameters() { | 3206 void test_isMoreSpecificThan_typeArguments_transitivity_typeParameters() { |
3207 ClassElementImpl classS = ElementFactory.classElement2("A", []); | 3207 ClassElementImpl classS = ElementFactory.classElement2("A"); |
3208 TypeParameterElementImpl typeParameterU = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("U")); | 3208 TypeParameterElementImpl typeParameterU = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("U")); |
3209 typeParameterU.bound = classS.type; | 3209 typeParameterU.bound = classS.type; |
3210 TypeParameterTypeImpl typeParameterTypeU = new TypeParameterTypeImpl(typePar
ameterU); | 3210 TypeParameterTypeImpl typeParameterTypeU = new TypeParameterTypeImpl(typePar
ameterU); |
3211 TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("T")); | 3211 TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("T")); |
3212 typeParameterT.bound = typeParameterTypeU; | 3212 typeParameterT.bound = typeParameterTypeU; |
3213 TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
ameterT); | 3213 TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
ameterT); |
3214 // <T extends U> and <U extends S> | 3214 // <T extends U> and <U extends S> |
3215 // T << S | 3215 // T << S |
3216 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isTrue); | 3216 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isTrue); |
3217 } | 3217 } |
3218 | 3218 |
3219 void test_isMoreSpecificThan_typeArguments_upperBound() { | 3219 void test_isMoreSpecificThan_typeArguments_upperBound() { |
3220 ClassElementImpl classS = ElementFactory.classElement2("A", []); | 3220 ClassElementImpl classS = ElementFactory.classElement2("A"); |
3221 TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("T")); | 3221 TypeParameterElementImpl typeParameterT = new TypeParameterElementImpl.forNo
de(AstFactory.identifier3("T")); |
3222 typeParameterT.bound = classS.type; | 3222 typeParameterT.bound = classS.type; |
3223 TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
ameterT); | 3223 TypeParameterTypeImpl typeParameterTypeT = new TypeParameterTypeImpl(typePar
ameterT); |
3224 // <T extends S> | 3224 // <T extends S> |
3225 // T << S | 3225 // T << S |
3226 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isTrue); | 3226 expect(typeParameterTypeT.isMoreSpecificThan(classS.type), isTrue); |
3227 } | 3227 } |
3228 | 3228 |
3229 void test_substitute_equal() { | 3229 void test_substitute_equal() { |
3230 TypeParameterElementImpl element = new TypeParameterElementImpl.forNode(AstF
actory.identifier3("E")); | 3230 TypeParameterElementImpl element = new TypeParameterElementImpl.forNode(AstF
actory.identifier3("E")); |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3394 expect(_uAB.displayName, s); | 3394 expect(_uAB.displayName, s); |
3395 } | 3395 } |
3396 | 3396 |
3397 void test_toString_singleton() { | 3397 void test_toString_singleton() { |
3398 // Singleton unions collapse to the the single type. | 3398 // Singleton unions collapse to the the single type. |
3399 expect(_uA.toString(), "A"); | 3399 expect(_uA.toString(), "A"); |
3400 } | 3400 } |
3401 | 3401 |
3402 void test_unionTypeIsLessSpecificThan_function() { | 3402 void test_unionTypeIsLessSpecificThan_function() { |
3403 // Based on [FunctionTypeImplTest.test_isAssignableTo_normalAndPositionalArg
s]. | 3403 // Based on [FunctionTypeImplTest.test_isAssignableTo_normalAndPositionalArg
s]. |
3404 ClassElement a = ElementFactory.classElement2("A", []); | 3404 ClassElement a = ElementFactory.classElement2("A"); |
3405 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | 3405 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
3406 DartType uAT = UnionTypeImpl.union([_uA, t]); | 3406 DartType uAT = UnionTypeImpl.union([_uA, t]); |
3407 expect(t.isMoreSpecificThan(uAT), isTrue); | 3407 expect(t.isMoreSpecificThan(uAT), isTrue); |
3408 expect(t.isMoreSpecificThan(_uAB), isFalse); | 3408 expect(t.isMoreSpecificThan(_uAB), isFalse); |
3409 } | 3409 } |
3410 | 3410 |
3411 void test_unionTypeIsSuperTypeOf_function() { | 3411 void test_unionTypeIsSuperTypeOf_function() { |
3412 // Based on [FunctionTypeImplTest.test_isAssignableTo_normalAndPositionalArg
s]. | 3412 // Based on [FunctionTypeImplTest.test_isAssignableTo_normalAndPositionalArg
s]. |
3413 ClassElement a = ElementFactory.classElement2("A", []); | 3413 ClassElement a = ElementFactory.classElement2("A"); |
3414 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; | 3414 FunctionType t = ElementFactory.functionElement6("t", null, <ClassElement> [
a]).type; |
3415 DartType uAT = UnionTypeImpl.union([_uA, t]); | 3415 DartType uAT = UnionTypeImpl.union([_uA, t]); |
3416 expect(t.isSubtypeOf(uAT), isTrue); | 3416 expect(t.isSubtypeOf(uAT), isTrue); |
3417 expect(t.isSubtypeOf(_uAB), isFalse); | 3417 expect(t.isSubtypeOf(_uAB), isFalse); |
3418 } | 3418 } |
3419 | 3419 |
3420 @override | 3420 @override |
3421 void setUp() { | 3421 void setUp() { |
3422 super.setUp(); | 3422 super.setUp(); |
3423 _classA = ElementFactory.classElement2("A", []); | 3423 _classA = ElementFactory.classElement2("A"); |
3424 _typeA = _classA.type; | 3424 _typeA = _classA.type; |
3425 _classB = ElementFactory.classElement("B", _typeA, []); | 3425 _classB = ElementFactory.classElement("B", _typeA); |
3426 _typeB = _classB.type; | 3426 _typeB = _classB.type; |
3427 _uA = UnionTypeImpl.union([_typeA]); | 3427 _uA = UnionTypeImpl.union([_typeA]); |
3428 _uB = UnionTypeImpl.union([_typeB]); | 3428 _uB = UnionTypeImpl.union([_typeB]); |
3429 _uAB = UnionTypeImpl.union([_typeA, _typeB]); | 3429 _uAB = UnionTypeImpl.union([_typeA, _typeB]); |
3430 _uBA = UnionTypeImpl.union([_typeB, _typeA]); | 3430 _uBA = UnionTypeImpl.union([_typeB, _typeA]); |
3431 _us = <DartType> [_uA, _uB, _uAB, _uBA]; | 3431 _us = <DartType> [_uA, _uB, _uAB, _uBA]; |
3432 } | 3432 } |
3433 } | 3433 } |
3434 | 3434 |
3435 class VoidTypeImplTest extends EngineTestCase { | 3435 class VoidTypeImplTest extends EngineTestCase { |
3436 /** | 3436 /** |
3437 * Reference {code VoidTypeImpl.getInstance()}. | 3437 * Reference {code VoidTypeImpl.getInstance()}. |
3438 */ | 3438 */ |
3439 DartType _voidType = VoidTypeImpl.instance; | 3439 DartType _voidType = VoidTypeImpl.instance; |
3440 | 3440 |
3441 void test_isMoreSpecificThan_void_A() { | 3441 void test_isMoreSpecificThan_void_A() { |
3442 ClassElement classA = ElementFactory.classElement2("A", []); | 3442 ClassElement classA = ElementFactory.classElement2("A"); |
3443 expect(_voidType.isMoreSpecificThan(classA.type), isFalse); | 3443 expect(_voidType.isMoreSpecificThan(classA.type), isFalse); |
3444 } | 3444 } |
3445 | 3445 |
3446 void test_isMoreSpecificThan_void_dynamic() { | 3446 void test_isMoreSpecificThan_void_dynamic() { |
3447 expect(_voidType.isMoreSpecificThan(DynamicTypeImpl.instance), isTrue); | 3447 expect(_voidType.isMoreSpecificThan(DynamicTypeImpl.instance), isTrue); |
3448 } | 3448 } |
3449 | 3449 |
3450 void test_isMoreSpecificThan_void_void() { | 3450 void test_isMoreSpecificThan_void_void() { |
3451 expect(_voidType.isMoreSpecificThan(_voidType), isTrue); | 3451 expect(_voidType.isMoreSpecificThan(_voidType), isTrue); |
3452 } | 3452 } |
3453 | 3453 |
3454 void test_isSubtypeOf_void_A() { | 3454 void test_isSubtypeOf_void_A() { |
3455 ClassElement classA = ElementFactory.classElement2("A", []); | 3455 ClassElement classA = ElementFactory.classElement2("A"); |
3456 expect(_voidType.isSubtypeOf(classA.type), isFalse); | 3456 expect(_voidType.isSubtypeOf(classA.type), isFalse); |
3457 } | 3457 } |
3458 | 3458 |
3459 void test_isSubtypeOf_void_dynamic() { | 3459 void test_isSubtypeOf_void_dynamic() { |
3460 expect(_voidType.isSubtypeOf(DynamicTypeImpl.instance), isTrue); | 3460 expect(_voidType.isSubtypeOf(DynamicTypeImpl.instance), isTrue); |
3461 } | 3461 } |
3462 | 3462 |
3463 void test_isSubtypeOf_void_void() { | 3463 void test_isSubtypeOf_void_void() { |
3464 expect(_voidType.isSubtypeOf(_voidType), isTrue); | 3464 expect(_voidType.isSubtypeOf(_voidType), isTrue); |
3465 } | 3465 } |
(...skipping 13 matching lines...) Expand all Loading... |
3479 runReflectiveTests(UnionTypeImplTest); | 3479 runReflectiveTests(UnionTypeImplTest); |
3480 runReflectiveTests(VoidTypeImplTest); | 3480 runReflectiveTests(VoidTypeImplTest); |
3481 runReflectiveTests(ClassElementImplTest); | 3481 runReflectiveTests(ClassElementImplTest); |
3482 runReflectiveTests(CompilationUnitElementImplTest); | 3482 runReflectiveTests(CompilationUnitElementImplTest); |
3483 runReflectiveTests(ElementLocationImplTest); | 3483 runReflectiveTests(ElementLocationImplTest); |
3484 runReflectiveTests(ElementImplTest); | 3484 runReflectiveTests(ElementImplTest); |
3485 runReflectiveTests(HtmlElementImplTest); | 3485 runReflectiveTests(HtmlElementImplTest); |
3486 runReflectiveTests(LibraryElementImplTest); | 3486 runReflectiveTests(LibraryElementImplTest); |
3487 runReflectiveTests(MultiplyDefinedElementImplTest); | 3487 runReflectiveTests(MultiplyDefinedElementImplTest); |
3488 } | 3488 } |
OLD | NEW |