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 library analyzer.test.generated.resolver_test; | 5 library analyzer.test.generated.resolver_test; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 | 8 |
9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
10 import 'package:analyzer/dart/ast/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
11 import 'package:analyzer/dart/ast/visitor.dart'; | 11 import 'package:analyzer/dart/ast/visitor.dart'; |
12 import 'package:analyzer/dart/element/element.dart'; | 12 import 'package:analyzer/dart/element/element.dart'; |
13 import 'package:analyzer/dart/element/type.dart'; | 13 import 'package:analyzer/dart/element/type.dart'; |
14 import 'package:analyzer/file_system/memory_file_system.dart'; | 14 import 'package:analyzer/file_system/memory_file_system.dart'; |
15 import 'package:analyzer/src/dart/element/builder.dart'; | 15 import 'package:analyzer/src/dart/element/builder.dart'; |
16 import 'package:analyzer/src/dart/element/element.dart'; | 16 import 'package:analyzer/src/dart/element/element.dart'; |
17 import 'package:analyzer/src/dart/element/type.dart'; | 17 import 'package:analyzer/src/dart/element/type.dart'; |
18 import 'package:analyzer/src/error/codes.dart'; | 18 import 'package:analyzer/src/error/codes.dart'; |
19 import 'package:analyzer/src/generated/engine.dart'; | 19 import 'package:analyzer/src/generated/engine.dart'; |
20 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode; | 20 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode; |
21 import 'package:analyzer/src/generated/resolver.dart'; | 21 import 'package:analyzer/src/generated/resolver.dart'; |
22 import 'package:analyzer/src/generated/source_io.dart'; | 22 import 'package:analyzer/src/generated/source_io.dart'; |
23 import 'package:analyzer/src/generated/testing/ast_factory.dart'; | 23 import 'package:analyzer/src/generated/testing/ast_test_factory.dart'; |
24 import 'package:analyzer/src/generated/testing/element_factory.dart'; | 24 import 'package:analyzer/src/generated/testing/element_factory.dart'; |
25 import 'package:analyzer/src/generated/testing/test_type_provider.dart'; | 25 import 'package:analyzer/src/generated/testing/test_type_provider.dart'; |
26 import 'package:analyzer/src/generated/utilities_dart.dart'; | 26 import 'package:analyzer/src/generated/utilities_dart.dart'; |
27 import 'package:analyzer/src/source/source_resource.dart'; | 27 import 'package:analyzer/src/source/source_resource.dart'; |
28 import 'package:test/test.dart'; | 28 import 'package:test/test.dart'; |
29 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 29 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
30 | 30 |
31 import 'analysis_context_factory.dart'; | 31 import 'analysis_context_factory.dart'; |
32 import 'parser_test.dart'; | 32 import 'parser_test.dart'; |
33 import 'resolver_test_case.dart'; | 33 import 'resolver_test_case.dart'; |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 .removedContainer(new SourceContainer_ChangeSetTest_test_toString()); | 140 .removedContainer(new SourceContainer_ChangeSetTest_test_toString()); |
141 expect(changeSet.toString(), isNotNull); | 141 expect(changeSet.toString(), isNotNull); |
142 } | 142 } |
143 } | 143 } |
144 | 144 |
145 @reflectiveTest | 145 @reflectiveTest |
146 class EnclosedScopeTest extends ResolverTestCase { | 146 class EnclosedScopeTest extends ResolverTestCase { |
147 void test_define_duplicate() { | 147 void test_define_duplicate() { |
148 Scope rootScope = new _RootScope(); | 148 Scope rootScope = new _RootScope(); |
149 EnclosedScope scope = new EnclosedScope(rootScope); | 149 EnclosedScope scope = new EnclosedScope(rootScope); |
150 SimpleIdentifier identifier = AstFactory.identifier3('v'); | 150 SimpleIdentifier identifier = AstTestFactory.identifier3('v'); |
151 VariableElement element1 = ElementFactory.localVariableElement(identifier); | 151 VariableElement element1 = ElementFactory.localVariableElement(identifier); |
152 VariableElement element2 = ElementFactory.localVariableElement(identifier); | 152 VariableElement element2 = ElementFactory.localVariableElement(identifier); |
153 scope.define(element1); | 153 scope.define(element1); |
154 scope.define(element2); | 154 scope.define(element2); |
155 expect(scope.lookup(identifier, null), same(element1)); | 155 expect(scope.lookup(identifier, null), same(element1)); |
156 } | 156 } |
157 } | 157 } |
158 | 158 |
159 @reflectiveTest | 159 @reflectiveTest |
160 class ErrorResolverTest extends ResolverTestCase { | 160 class ErrorResolverTest extends ResolverTestCase { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 | 250 |
251 @reflectiveTest | 251 @reflectiveTest |
252 class LibraryImportScopeTest extends ResolverTestCase { | 252 class LibraryImportScopeTest extends ResolverTestCase { |
253 void test_creation_empty() { | 253 void test_creation_empty() { |
254 new LibraryImportScope(createDefaultTestLibrary()); | 254 new LibraryImportScope(createDefaultTestLibrary()); |
255 } | 255 } |
256 | 256 |
257 void test_creation_nonEmpty() { | 257 void test_creation_nonEmpty() { |
258 AnalysisContext context = AnalysisContextFactory.contextWithCore(); | 258 AnalysisContext context = AnalysisContextFactory.contextWithCore(); |
259 String importedTypeName = "A"; | 259 String importedTypeName = "A"; |
260 ClassElement importedType = | 260 ClassElement importedType = new ClassElementImpl.forNode( |
261 new ClassElementImpl.forNode(AstFactory.identifier3(importedTypeName)); | 261 AstTestFactory.identifier3(importedTypeName)); |
262 LibraryElement importedLibrary = createTestLibrary(context, "imported"); | 262 LibraryElement importedLibrary = createTestLibrary(context, "imported"); |
263 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl) | 263 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl) |
264 .types = <ClassElement>[importedType]; | 264 .types = <ClassElement>[importedType]; |
265 LibraryElementImpl definingLibrary = | 265 LibraryElementImpl definingLibrary = |
266 createTestLibrary(context, "importing"); | 266 createTestLibrary(context, "importing"); |
267 ImportElementImpl importElement = new ImportElementImpl(0); | 267 ImportElementImpl importElement = new ImportElementImpl(0); |
268 importElement.importedLibrary = importedLibrary; | 268 importElement.importedLibrary = importedLibrary; |
269 definingLibrary.imports = <ImportElement>[importElement]; | 269 definingLibrary.imports = <ImportElement>[importElement]; |
270 Scope scope = new LibraryImportScope(definingLibrary); | 270 Scope scope = new LibraryImportScope(definingLibrary); |
271 expect( | 271 expect( |
272 scope.lookup(AstFactory.identifier3(importedTypeName), definingLibrary), | 272 scope.lookup( |
| 273 AstTestFactory.identifier3(importedTypeName), definingLibrary), |
273 importedType); | 274 importedType); |
274 } | 275 } |
275 | 276 |
276 void test_prefixedAndNonPrefixed() { | 277 void test_prefixedAndNonPrefixed() { |
277 AnalysisContext context = AnalysisContextFactory.contextWithCore(); | 278 AnalysisContext context = AnalysisContextFactory.contextWithCore(); |
278 String typeName = "C"; | 279 String typeName = "C"; |
279 String prefixName = "p"; | 280 String prefixName = "p"; |
280 ClassElement prefixedType = ElementFactory.classElement2(typeName); | 281 ClassElement prefixedType = ElementFactory.classElement2(typeName); |
281 ClassElement nonPrefixedType = ElementFactory.classElement2(typeName); | 282 ClassElement nonPrefixedType = ElementFactory.classElement2(typeName); |
282 LibraryElement prefixedLibrary = | 283 LibraryElement prefixedLibrary = |
283 createTestLibrary(context, "import.prefixed"); | 284 createTestLibrary(context, "import.prefixed"); |
284 (prefixedLibrary.definingCompilationUnit as CompilationUnitElementImpl) | 285 (prefixedLibrary.definingCompilationUnit as CompilationUnitElementImpl) |
285 .types = <ClassElement>[prefixedType]; | 286 .types = <ClassElement>[prefixedType]; |
286 ImportElementImpl prefixedImport = ElementFactory.importFor( | 287 ImportElementImpl prefixedImport = ElementFactory.importFor( |
287 prefixedLibrary, ElementFactory.prefix(prefixName)); | 288 prefixedLibrary, ElementFactory.prefix(prefixName)); |
288 LibraryElement nonPrefixedLibrary = | 289 LibraryElement nonPrefixedLibrary = |
289 createTestLibrary(context, "import.nonPrefixed"); | 290 createTestLibrary(context, "import.nonPrefixed"); |
290 (nonPrefixedLibrary.definingCompilationUnit as CompilationUnitElementImpl) | 291 (nonPrefixedLibrary.definingCompilationUnit as CompilationUnitElementImpl) |
291 .types = <ClassElement>[nonPrefixedType]; | 292 .types = <ClassElement>[nonPrefixedType]; |
292 ImportElementImpl nonPrefixedImport = | 293 ImportElementImpl nonPrefixedImport = |
293 ElementFactory.importFor(nonPrefixedLibrary, null); | 294 ElementFactory.importFor(nonPrefixedLibrary, null); |
294 LibraryElementImpl importingLibrary = | 295 LibraryElementImpl importingLibrary = |
295 createTestLibrary(context, "importing"); | 296 createTestLibrary(context, "importing"); |
296 importingLibrary.imports = <ImportElement>[ | 297 importingLibrary.imports = <ImportElement>[ |
297 prefixedImport, | 298 prefixedImport, |
298 nonPrefixedImport | 299 nonPrefixedImport |
299 ]; | 300 ]; |
300 Scope scope = new LibraryImportScope(importingLibrary); | 301 Scope scope = new LibraryImportScope(importingLibrary); |
301 Element prefixedElement = scope.lookup( | 302 Element prefixedElement = scope.lookup( |
302 AstFactory.identifier5(prefixName, typeName), importingLibrary); | 303 AstTestFactory.identifier5(prefixName, typeName), importingLibrary); |
303 expect(prefixedElement, same(prefixedType)); | 304 expect(prefixedElement, same(prefixedType)); |
304 Element nonPrefixedElement = | 305 Element nonPrefixedElement = |
305 scope.lookup(AstFactory.identifier3(typeName), importingLibrary); | 306 scope.lookup(AstTestFactory.identifier3(typeName), importingLibrary); |
306 expect(nonPrefixedElement, same(nonPrefixedType)); | 307 expect(nonPrefixedElement, same(nonPrefixedType)); |
307 } | 308 } |
308 } | 309 } |
309 | 310 |
310 @reflectiveTest | 311 @reflectiveTest |
311 class LibraryScopeTest extends ResolverTestCase { | 312 class LibraryScopeTest extends ResolverTestCase { |
312 void test_creation_empty() { | 313 void test_creation_empty() { |
313 new LibraryScope(createDefaultTestLibrary()); | 314 new LibraryScope(createDefaultTestLibrary()); |
314 } | 315 } |
315 | 316 |
316 void test_creation_nonEmpty() { | 317 void test_creation_nonEmpty() { |
317 AnalysisContext context = AnalysisContextFactory.contextWithCore(); | 318 AnalysisContext context = AnalysisContextFactory.contextWithCore(); |
318 String importedTypeName = "A"; | 319 String importedTypeName = "A"; |
319 ClassElement importedType = | 320 ClassElement importedType = new ClassElementImpl.forNode( |
320 new ClassElementImpl.forNode(AstFactory.identifier3(importedTypeName)); | 321 AstTestFactory.identifier3(importedTypeName)); |
321 LibraryElement importedLibrary = createTestLibrary(context, "imported"); | 322 LibraryElement importedLibrary = createTestLibrary(context, "imported"); |
322 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl) | 323 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl) |
323 .types = <ClassElement>[importedType]; | 324 .types = <ClassElement>[importedType]; |
324 LibraryElementImpl definingLibrary = | 325 LibraryElementImpl definingLibrary = |
325 createTestLibrary(context, "importing"); | 326 createTestLibrary(context, "importing"); |
326 ImportElementImpl importElement = new ImportElementImpl(0); | 327 ImportElementImpl importElement = new ImportElementImpl(0); |
327 importElement.importedLibrary = importedLibrary; | 328 importElement.importedLibrary = importedLibrary; |
328 definingLibrary.imports = <ImportElement>[importElement]; | 329 definingLibrary.imports = <ImportElement>[importElement]; |
329 Scope scope = new LibraryScope(definingLibrary); | 330 Scope scope = new LibraryScope(definingLibrary); |
330 expect( | 331 expect( |
331 scope.lookup(AstFactory.identifier3(importedTypeName), definingLibrary), | 332 scope.lookup( |
| 333 AstTestFactory.identifier3(importedTypeName), definingLibrary), |
332 importedType); | 334 importedType); |
333 } | 335 } |
334 } | 336 } |
335 | 337 |
336 @reflectiveTest | 338 @reflectiveTest |
337 class PrefixedNamespaceTest extends ResolverTestCase { | 339 class PrefixedNamespaceTest extends ResolverTestCase { |
338 void test_lookup_missing() { | 340 void test_lookup_missing() { |
339 ClassElement element = ElementFactory.classElement2('A'); | 341 ClassElement element = ElementFactory.classElement2('A'); |
340 PrefixedNamespace namespace = new PrefixedNamespace('p', _toMap([element])); | 342 PrefixedNamespace namespace = new PrefixedNamespace('p', _toMap([element])); |
341 expect(namespace.get('p.B'), isNull); | 343 expect(namespace.get('p.B'), isNull); |
(...skipping 17 matching lines...) Expand all Loading... |
359 map[element.name] = element; | 361 map[element.name] = element; |
360 } | 362 } |
361 return map; | 363 return map; |
362 } | 364 } |
363 } | 365 } |
364 | 366 |
365 @reflectiveTest | 367 @reflectiveTest |
366 class ScopeTest extends ResolverTestCase { | 368 class ScopeTest extends ResolverTestCase { |
367 void test_define_duplicate() { | 369 void test_define_duplicate() { |
368 Scope scope = new _RootScope(); | 370 Scope scope = new _RootScope(); |
369 SimpleIdentifier identifier = AstFactory.identifier3('v'); | 371 SimpleIdentifier identifier = AstTestFactory.identifier3('v'); |
370 VariableElement element1 = ElementFactory.localVariableElement(identifier); | 372 VariableElement element1 = ElementFactory.localVariableElement(identifier); |
371 VariableElement element2 = ElementFactory.localVariableElement(identifier); | 373 VariableElement element2 = ElementFactory.localVariableElement(identifier); |
372 scope.define(element1); | 374 scope.define(element1); |
373 scope.define(element2); | 375 scope.define(element2); |
374 expect(scope.localLookup('v', null), same(element1)); | 376 expect(scope.localLookup('v', null), same(element1)); |
375 } | 377 } |
376 | 378 |
377 void test_isPrivateName_nonPrivate() { | 379 void test_isPrivateName_nonPrivate() { |
378 expect(Scope.isPrivateName("Public"), isFalse); | 380 expect(Scope.isPrivateName("Public"), isFalse); |
379 } | 381 } |
(...skipping 2086 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2466 stackTraceType.element, | 2468 stackTraceType.element, |
2467 stringType.element, | 2469 stringType.element, |
2468 symbolType.element, | 2470 symbolType.element, |
2469 typeType.element | 2471 typeType.element |
2470 ]; | 2472 ]; |
2471 CompilationUnitElementImpl asyncUnit = | 2473 CompilationUnitElementImpl asyncUnit = |
2472 new CompilationUnitElementImpl("async.dart"); | 2474 new CompilationUnitElementImpl("async.dart"); |
2473 asyncUnit.types = <ClassElement>[futureType.element, streamType.element]; | 2475 asyncUnit.types = <ClassElement>[futureType.element, streamType.element]; |
2474 AnalysisContext context = AnalysisEngine.instance.createAnalysisContext(); | 2476 AnalysisContext context = AnalysisEngine.instance.createAnalysisContext(); |
2475 LibraryElementImpl coreLibrary = new LibraryElementImpl.forNode( | 2477 LibraryElementImpl coreLibrary = new LibraryElementImpl.forNode( |
2476 context, AstFactory.libraryIdentifier2(["dart.core"])); | 2478 context, AstTestFactory.libraryIdentifier2(["dart.core"])); |
2477 coreLibrary.definingCompilationUnit = coreUnit; | 2479 coreLibrary.definingCompilationUnit = coreUnit; |
2478 LibraryElementImpl asyncLibrary = new LibraryElementImpl.forNode( | 2480 LibraryElementImpl asyncLibrary = new LibraryElementImpl.forNode( |
2479 context, AstFactory.libraryIdentifier2(["dart.async"])); | 2481 context, AstTestFactory.libraryIdentifier2(["dart.async"])); |
2480 asyncLibrary.definingCompilationUnit = asyncUnit; | 2482 asyncLibrary.definingCompilationUnit = asyncUnit; |
2481 // | 2483 // |
2482 // Create a type provider and ensure that it can return the expected types. | 2484 // Create a type provider and ensure that it can return the expected types. |
2483 // | 2485 // |
2484 TypeProviderImpl provider = new TypeProviderImpl(coreLibrary, asyncLibrary); | 2486 TypeProviderImpl provider = new TypeProviderImpl(coreLibrary, asyncLibrary); |
2485 expect(provider.boolType, same(boolType)); | 2487 expect(provider.boolType, same(boolType)); |
2486 expect(provider.bottomType, isNotNull); | 2488 expect(provider.bottomType, isNotNull); |
2487 expect(provider.doubleType, same(doubleType)); | 2489 expect(provider.doubleType, same(doubleType)); |
2488 expect(provider.dynamicType, isNotNull); | 2490 expect(provider.dynamicType, isNotNull); |
2489 expect(provider.functionType, same(functionType)); | 2491 expect(provider.functionType, same(functionType)); |
2490 expect(provider.futureType, same(futureType)); | 2492 expect(provider.futureType, same(futureType)); |
2491 expect(provider.intType, same(intType)); | 2493 expect(provider.intType, same(intType)); |
2492 expect(provider.listType, same(listType)); | 2494 expect(provider.listType, same(listType)); |
2493 expect(provider.mapType, same(mapType)); | 2495 expect(provider.mapType, same(mapType)); |
2494 expect(provider.objectType, same(objectType)); | 2496 expect(provider.objectType, same(objectType)); |
2495 expect(provider.stackTraceType, same(stackTraceType)); | 2497 expect(provider.stackTraceType, same(stackTraceType)); |
2496 expect(provider.streamType, same(streamType)); | 2498 expect(provider.streamType, same(streamType)); |
2497 expect(provider.stringType, same(stringType)); | 2499 expect(provider.stringType, same(stringType)); |
2498 expect(provider.symbolType, same(symbolType)); | 2500 expect(provider.symbolType, same(symbolType)); |
2499 expect(provider.typeType, same(typeType)); | 2501 expect(provider.typeType, same(typeType)); |
2500 } | 2502 } |
2501 | 2503 |
2502 ClassElement _classElement(String typeName, InterfaceType superclassType, | 2504 ClassElement _classElement(String typeName, InterfaceType superclassType, |
2503 [List<String> parameterNames]) { | 2505 [List<String> parameterNames]) { |
2504 ClassElementImpl element = | 2506 ClassElementImpl element = |
2505 new ClassElementImpl.forNode(AstFactory.identifier3(typeName)); | 2507 new ClassElementImpl.forNode(AstTestFactory.identifier3(typeName)); |
2506 element.supertype = superclassType; | 2508 element.supertype = superclassType; |
2507 if (parameterNames != null) { | 2509 if (parameterNames != null) { |
2508 int count = parameterNames.length; | 2510 int count = parameterNames.length; |
2509 if (count > 0) { | 2511 if (count > 0) { |
2510 List<TypeParameterElementImpl> typeParameters = | 2512 List<TypeParameterElementImpl> typeParameters = |
2511 new List<TypeParameterElementImpl>(count); | 2513 new List<TypeParameterElementImpl>(count); |
2512 List<TypeParameterTypeImpl> typeArguments = | 2514 List<TypeParameterTypeImpl> typeArguments = |
2513 new List<TypeParameterTypeImpl>(count); | 2515 new List<TypeParameterTypeImpl>(count); |
2514 for (int i = 0; i < count; i++) { | 2516 for (int i = 0; i < count; i++) { |
2515 TypeParameterElementImpl typeParameter = | 2517 TypeParameterElementImpl typeParameter = |
2516 new TypeParameterElementImpl.forNode( | 2518 new TypeParameterElementImpl.forNode( |
2517 AstFactory.identifier3(parameterNames[i])); | 2519 AstTestFactory.identifier3(parameterNames[i])); |
2518 typeParameters[i] = typeParameter; | 2520 typeParameters[i] = typeParameter; |
2519 typeArguments[i] = new TypeParameterTypeImpl(typeParameter); | 2521 typeArguments[i] = new TypeParameterTypeImpl(typeParameter); |
2520 typeParameter.type = typeArguments[i]; | 2522 typeParameter.type = typeArguments[i]; |
2521 } | 2523 } |
2522 element.typeParameters = typeParameters; | 2524 element.typeParameters = typeParameters; |
2523 } | 2525 } |
2524 } | 2526 } |
2525 return element; | 2527 return element; |
2526 } | 2528 } |
2527 } | 2529 } |
(...skipping 26 matching lines...) Expand all Loading... |
2554 } | 2556 } |
2555 | 2557 |
2556 void fail_visitFunctionTypeAlias() { | 2558 void fail_visitFunctionTypeAlias() { |
2557 fail("Not yet tested"); | 2559 fail("Not yet tested"); |
2558 _listener.assertNoErrors(); | 2560 _listener.assertNoErrors(); |
2559 } | 2561 } |
2560 | 2562 |
2561 void fail_visitVariableDeclaration() { | 2563 void fail_visitVariableDeclaration() { |
2562 fail("Not yet tested"); | 2564 fail("Not yet tested"); |
2563 ClassElement type = ElementFactory.classElement2("A"); | 2565 ClassElement type = ElementFactory.classElement2("A"); |
2564 VariableDeclaration node = AstFactory.variableDeclaration("a"); | 2566 VariableDeclaration node = AstTestFactory.variableDeclaration("a"); |
2565 AstFactory.variableDeclarationList(null, AstFactory.typeName(type), [node]); | 2567 AstTestFactory |
| 2568 .variableDeclarationList(null, AstTestFactory.typeName(type), [node]); |
2566 //resolve(node); | 2569 //resolve(node); |
2567 expect(node.name.staticType, same(type.type)); | 2570 expect(node.name.staticType, same(type.type)); |
2568 _listener.assertNoErrors(); | 2571 _listener.assertNoErrors(); |
2569 } | 2572 } |
2570 | 2573 |
2571 void setUp() { | 2574 void setUp() { |
2572 _listener = new GatheringErrorListener(); | 2575 _listener = new GatheringErrorListener(); |
2573 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); | 2576 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); |
2574 InternalAnalysisContext context = AnalysisContextFactory.contextWithCore( | 2577 InternalAnalysisContext context = AnalysisContextFactory.contextWithCore( |
2575 resourceProvider: resourceProvider); | 2578 resourceProvider: resourceProvider); |
2576 Source librarySource = | 2579 Source librarySource = |
2577 new FileSource(resourceProvider.getFile("/lib.dart")); | 2580 new FileSource(resourceProvider.getFile("/lib.dart")); |
2578 LibraryElementImpl element = new LibraryElementImpl.forNode( | 2581 LibraryElementImpl element = new LibraryElementImpl.forNode( |
2579 context, AstFactory.libraryIdentifier2(["lib"])); | 2582 context, AstTestFactory.libraryIdentifier2(["lib"])); |
2580 element.definingCompilationUnit = | 2583 element.definingCompilationUnit = |
2581 new CompilationUnitElementImpl("lib.dart"); | 2584 new CompilationUnitElementImpl("lib.dart"); |
2582 _typeProvider = new TestTypeProvider(); | 2585 _typeProvider = new TestTypeProvider(); |
2583 libraryScope = new LibraryScope(element); | 2586 libraryScope = new LibraryScope(element); |
2584 _visitor = new TypeResolverVisitor( | 2587 _visitor = new TypeResolverVisitor( |
2585 element, librarySource, _typeProvider, _listener, | 2588 element, librarySource, _typeProvider, _listener, |
2586 nameScope: libraryScope); | 2589 nameScope: libraryScope); |
2587 } | 2590 } |
2588 | 2591 |
2589 void test_modeApi() { | 2592 void test_modeApi() { |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2975 // The type of "v" is not resolved. | 2978 // The type of "v" is not resolved. |
2976 expect(v.variables.type.type, isNull); | 2979 expect(v.variables.type.type, isNull); |
2977 | 2980 |
2978 // The type of "v" initializer is resolved. | 2981 // The type of "v" initializer is resolved. |
2979 var vi = v.variables.variables[0].initializer as InstanceCreationExpression; | 2982 var vi = v.variables.variables[0].initializer as InstanceCreationExpression; |
2980 expect(vi.constructorName.type.type.toString(), 'A'); | 2983 expect(vi.constructorName.type.type.toString(), 'A'); |
2981 } | 2984 } |
2982 | 2985 |
2983 void test_visitCatchClause_exception() { | 2986 void test_visitCatchClause_exception() { |
2984 // catch (e) | 2987 // catch (e) |
2985 CatchClause clause = AstFactory.catchClause("e"); | 2988 CatchClause clause = AstTestFactory.catchClause("e"); |
2986 SimpleIdentifier exceptionParameter = clause.exceptionParameter; | 2989 SimpleIdentifier exceptionParameter = clause.exceptionParameter; |
2987 exceptionParameter.staticElement = | 2990 exceptionParameter.staticElement = |
2988 new LocalVariableElementImpl.forNode(exceptionParameter); | 2991 new LocalVariableElementImpl.forNode(exceptionParameter); |
2989 _resolveCatchClause(clause, _typeProvider.dynamicType, null); | 2992 _resolveCatchClause(clause, _typeProvider.dynamicType, null); |
2990 _listener.assertNoErrors(); | 2993 _listener.assertNoErrors(); |
2991 } | 2994 } |
2992 | 2995 |
2993 void test_visitCatchClause_exception_stackTrace() { | 2996 void test_visitCatchClause_exception_stackTrace() { |
2994 // catch (e, s) | 2997 // catch (e, s) |
2995 CatchClause clause = AstFactory.catchClause2("e", "s"); | 2998 CatchClause clause = AstTestFactory.catchClause2("e", "s"); |
2996 SimpleIdentifier exceptionParameter = clause.exceptionParameter; | 2999 SimpleIdentifier exceptionParameter = clause.exceptionParameter; |
2997 exceptionParameter.staticElement = | 3000 exceptionParameter.staticElement = |
2998 new LocalVariableElementImpl.forNode(exceptionParameter); | 3001 new LocalVariableElementImpl.forNode(exceptionParameter); |
2999 SimpleIdentifier stackTraceParameter = clause.stackTraceParameter; | 3002 SimpleIdentifier stackTraceParameter = clause.stackTraceParameter; |
3000 stackTraceParameter.staticElement = | 3003 stackTraceParameter.staticElement = |
3001 new LocalVariableElementImpl.forNode(stackTraceParameter); | 3004 new LocalVariableElementImpl.forNode(stackTraceParameter); |
3002 _resolveCatchClause( | 3005 _resolveCatchClause( |
3003 clause, _typeProvider.dynamicType, _typeProvider.stackTraceType); | 3006 clause, _typeProvider.dynamicType, _typeProvider.stackTraceType); |
3004 _listener.assertNoErrors(); | 3007 _listener.assertNoErrors(); |
3005 } | 3008 } |
3006 | 3009 |
3007 void test_visitCatchClause_on_exception() { | 3010 void test_visitCatchClause_on_exception() { |
3008 // on E catch (e) | 3011 // on E catch (e) |
3009 ClassElement exceptionElement = ElementFactory.classElement2("E"); | 3012 ClassElement exceptionElement = ElementFactory.classElement2("E"); |
3010 TypeName exceptionType = AstFactory.typeName(exceptionElement); | 3013 TypeName exceptionType = AstTestFactory.typeName(exceptionElement); |
3011 CatchClause clause = AstFactory.catchClause4(exceptionType, "e"); | 3014 CatchClause clause = AstTestFactory.catchClause4(exceptionType, "e"); |
3012 SimpleIdentifier exceptionParameter = clause.exceptionParameter; | 3015 SimpleIdentifier exceptionParameter = clause.exceptionParameter; |
3013 exceptionParameter.staticElement = | 3016 exceptionParameter.staticElement = |
3014 new LocalVariableElementImpl.forNode(exceptionParameter); | 3017 new LocalVariableElementImpl.forNode(exceptionParameter); |
3015 _resolveCatchClause( | 3018 _resolveCatchClause( |
3016 clause, exceptionElement.type, null, [exceptionElement]); | 3019 clause, exceptionElement.type, null, [exceptionElement]); |
3017 _listener.assertNoErrors(); | 3020 _listener.assertNoErrors(); |
3018 } | 3021 } |
3019 | 3022 |
3020 void test_visitCatchClause_on_exception_stackTrace() { | 3023 void test_visitCatchClause_on_exception_stackTrace() { |
3021 // on E catch (e, s) | 3024 // on E catch (e, s) |
3022 ClassElement exceptionElement = ElementFactory.classElement2("E"); | 3025 ClassElement exceptionElement = ElementFactory.classElement2("E"); |
3023 TypeName exceptionType = AstFactory.typeName(exceptionElement); | 3026 TypeName exceptionType = AstTestFactory.typeName(exceptionElement); |
3024 (exceptionType.name as SimpleIdentifier).staticElement = exceptionElement; | 3027 (exceptionType.name as SimpleIdentifier).staticElement = exceptionElement; |
3025 CatchClause clause = AstFactory.catchClause5(exceptionType, "e", "s"); | 3028 CatchClause clause = AstTestFactory.catchClause5(exceptionType, "e", "s"); |
3026 SimpleIdentifier exceptionParameter = clause.exceptionParameter; | 3029 SimpleIdentifier exceptionParameter = clause.exceptionParameter; |
3027 exceptionParameter.staticElement = | 3030 exceptionParameter.staticElement = |
3028 new LocalVariableElementImpl.forNode(exceptionParameter); | 3031 new LocalVariableElementImpl.forNode(exceptionParameter); |
3029 SimpleIdentifier stackTraceParameter = clause.stackTraceParameter; | 3032 SimpleIdentifier stackTraceParameter = clause.stackTraceParameter; |
3030 stackTraceParameter.staticElement = | 3033 stackTraceParameter.staticElement = |
3031 new LocalVariableElementImpl.forNode(stackTraceParameter); | 3034 new LocalVariableElementImpl.forNode(stackTraceParameter); |
3032 _resolveCatchClause(clause, exceptionElement.type, | 3035 _resolveCatchClause(clause, exceptionElement.type, |
3033 _typeProvider.stackTraceType, [exceptionElement]); | 3036 _typeProvider.stackTraceType, [exceptionElement]); |
3034 _listener.assertNoErrors(); | 3037 _listener.assertNoErrors(); |
3035 } | 3038 } |
3036 | 3039 |
3037 void test_visitClassDeclaration() { | 3040 void test_visitClassDeclaration() { |
3038 // class A extends B with C implements D {} | 3041 // class A extends B with C implements D {} |
3039 // class B {} | 3042 // class B {} |
3040 // class C {} | 3043 // class C {} |
3041 // class D {} | 3044 // class D {} |
3042 ClassElement elementA = ElementFactory.classElement2("A"); | 3045 ClassElement elementA = ElementFactory.classElement2("A"); |
3043 ClassElement elementB = ElementFactory.classElement2("B"); | 3046 ClassElement elementB = ElementFactory.classElement2("B"); |
3044 ClassElement elementC = ElementFactory.classElement2("C"); | 3047 ClassElement elementC = ElementFactory.classElement2("C"); |
3045 ClassElement elementD = ElementFactory.classElement2("D"); | 3048 ClassElement elementD = ElementFactory.classElement2("D"); |
3046 ExtendsClause extendsClause = | 3049 ExtendsClause extendsClause = |
3047 AstFactory.extendsClause(AstFactory.typeName(elementB)); | 3050 AstTestFactory.extendsClause(AstTestFactory.typeName(elementB)); |
3048 WithClause withClause = | 3051 WithClause withClause = |
3049 AstFactory.withClause([AstFactory.typeName(elementC)]); | 3052 AstTestFactory.withClause([AstTestFactory.typeName(elementC)]); |
3050 ImplementsClause implementsClause = | 3053 ImplementsClause implementsClause = |
3051 AstFactory.implementsClause([AstFactory.typeName(elementD)]); | 3054 AstTestFactory.implementsClause([AstTestFactory.typeName(elementD)]); |
3052 ClassDeclaration declaration = AstFactory.classDeclaration( | 3055 ClassDeclaration declaration = AstTestFactory.classDeclaration( |
3053 null, "A", null, extendsClause, withClause, implementsClause); | 3056 null, "A", null, extendsClause, withClause, implementsClause); |
3054 declaration.name.staticElement = elementA; | 3057 declaration.name.staticElement = elementA; |
3055 _resolveNode(declaration, [elementA, elementB, elementC, elementD]); | 3058 _resolveNode(declaration, [elementA, elementB, elementC, elementD]); |
3056 expect(elementA.supertype, same(elementB.type)); | 3059 expect(elementA.supertype, same(elementB.type)); |
3057 List<InterfaceType> mixins = elementA.mixins; | 3060 List<InterfaceType> mixins = elementA.mixins; |
3058 expect(mixins, hasLength(1)); | 3061 expect(mixins, hasLength(1)); |
3059 expect(mixins[0], same(elementC.type)); | 3062 expect(mixins[0], same(elementC.type)); |
3060 List<InterfaceType> interfaces = elementA.interfaces; | 3063 List<InterfaceType> interfaces = elementA.interfaces; |
3061 expect(interfaces, hasLength(1)); | 3064 expect(interfaces, hasLength(1)); |
3062 expect(interfaces[0], same(elementD.type)); | 3065 expect(interfaces[0], same(elementD.type)); |
3063 _listener.assertNoErrors(); | 3066 _listener.assertNoErrors(); |
3064 } | 3067 } |
3065 | 3068 |
3066 void test_visitClassDeclaration_instanceMemberCollidesWithClass() { | 3069 void test_visitClassDeclaration_instanceMemberCollidesWithClass() { |
3067 // class A {} | 3070 // class A {} |
3068 // class B extends A { | 3071 // class B extends A { |
3069 // void A() {} | 3072 // void A() {} |
3070 // } | 3073 // } |
3071 ClassElementImpl elementA = ElementFactory.classElement2("A"); | 3074 ClassElementImpl elementA = ElementFactory.classElement2("A"); |
3072 ClassElementImpl elementB = ElementFactory.classElement2("B"); | 3075 ClassElementImpl elementB = ElementFactory.classElement2("B"); |
3073 elementB.methods = <MethodElement>[ | 3076 elementB.methods = <MethodElement>[ |
3074 ElementFactory.methodElement("A", VoidTypeImpl.instance) | 3077 ElementFactory.methodElement("A", VoidTypeImpl.instance) |
3075 ]; | 3078 ]; |
3076 ExtendsClause extendsClause = | 3079 ExtendsClause extendsClause = |
3077 AstFactory.extendsClause(AstFactory.typeName(elementA)); | 3080 AstTestFactory.extendsClause(AstTestFactory.typeName(elementA)); |
3078 ClassDeclaration declaration = | 3081 ClassDeclaration declaration = AstTestFactory.classDeclaration( |
3079 AstFactory.classDeclaration(null, "B", null, extendsClause, null, null); | 3082 null, "B", null, extendsClause, null, null); |
3080 declaration.name.staticElement = elementB; | 3083 declaration.name.staticElement = elementB; |
3081 _resolveNode(declaration, [elementA, elementB]); | 3084 _resolveNode(declaration, [elementA, elementB]); |
3082 expect(elementB.supertype, same(elementA.type)); | 3085 expect(elementB.supertype, same(elementA.type)); |
3083 _listener.assertNoErrors(); | 3086 _listener.assertNoErrors(); |
3084 } | 3087 } |
3085 | 3088 |
3086 void test_visitClassTypeAlias() { | 3089 void test_visitClassTypeAlias() { |
3087 // class A = B with C implements D; | 3090 // class A = B with C implements D; |
3088 ClassElement elementA = ElementFactory.classElement2("A"); | 3091 ClassElement elementA = ElementFactory.classElement2("A"); |
3089 ClassElement elementB = ElementFactory.classElement2("B"); | 3092 ClassElement elementB = ElementFactory.classElement2("B"); |
3090 ClassElement elementC = ElementFactory.classElement2("C"); | 3093 ClassElement elementC = ElementFactory.classElement2("C"); |
3091 ClassElement elementD = ElementFactory.classElement2("D"); | 3094 ClassElement elementD = ElementFactory.classElement2("D"); |
3092 WithClause withClause = | 3095 WithClause withClause = |
3093 AstFactory.withClause([AstFactory.typeName(elementC)]); | 3096 AstTestFactory.withClause([AstTestFactory.typeName(elementC)]); |
3094 ImplementsClause implementsClause = | 3097 ImplementsClause implementsClause = |
3095 AstFactory.implementsClause([AstFactory.typeName(elementD)]); | 3098 AstTestFactory.implementsClause([AstTestFactory.typeName(elementD)]); |
3096 ClassTypeAlias alias = AstFactory.classTypeAlias("A", null, null, | 3099 ClassTypeAlias alias = AstTestFactory.classTypeAlias("A", null, null, |
3097 AstFactory.typeName(elementB), withClause, implementsClause); | 3100 AstTestFactory.typeName(elementB), withClause, implementsClause); |
3098 alias.name.staticElement = elementA; | 3101 alias.name.staticElement = elementA; |
3099 _resolveNode(alias, [elementA, elementB, elementC, elementD]); | 3102 _resolveNode(alias, [elementA, elementB, elementC, elementD]); |
3100 expect(elementA.supertype, same(elementB.type)); | 3103 expect(elementA.supertype, same(elementB.type)); |
3101 List<InterfaceType> mixins = elementA.mixins; | 3104 List<InterfaceType> mixins = elementA.mixins; |
3102 expect(mixins, hasLength(1)); | 3105 expect(mixins, hasLength(1)); |
3103 expect(mixins[0], same(elementC.type)); | 3106 expect(mixins[0], same(elementC.type)); |
3104 List<InterfaceType> interfaces = elementA.interfaces; | 3107 List<InterfaceType> interfaces = elementA.interfaces; |
3105 expect(interfaces, hasLength(1)); | 3108 expect(interfaces, hasLength(1)); |
3106 expect(interfaces[0], same(elementD.type)); | 3109 expect(interfaces[0], same(elementD.type)); |
3107 _listener.assertNoErrors(); | 3110 _listener.assertNoErrors(); |
(...skipping 16 matching lines...) Expand all Loading... |
3124 ElementFactory.constructorElement2(classB, 'c2', [classT.type]); | 3127 ElementFactory.constructorElement2(classB, 'c2', [classT.type]); |
3125 (constructorBc2.parameters[0] as ParameterElementImpl).parameterKind = | 3128 (constructorBc2.parameters[0] as ParameterElementImpl).parameterKind = |
3126 ParameterKind.POSITIONAL; | 3129 ParameterKind.POSITIONAL; |
3127 ConstructorElementImpl constructorBc3 = | 3130 ConstructorElementImpl constructorBc3 = |
3128 ElementFactory.constructorElement2(classB, 'c3', [classT.type]); | 3131 ElementFactory.constructorElement2(classB, 'c3', [classT.type]); |
3129 (constructorBc3.parameters[0] as ParameterElementImpl).parameterKind = | 3132 (constructorBc3.parameters[0] as ParameterElementImpl).parameterKind = |
3130 ParameterKind.NAMED; | 3133 ParameterKind.NAMED; |
3131 classB.constructors = [constructorBc1, constructorBc2, constructorBc3]; | 3134 classB.constructors = [constructorBc1, constructorBc2, constructorBc3]; |
3132 ClassElement classM = ElementFactory.classElement2('M', []); | 3135 ClassElement classM = ElementFactory.classElement2('M', []); |
3133 WithClause withClause = | 3136 WithClause withClause = |
3134 AstFactory.withClause([AstFactory.typeName(classM, [])]); | 3137 AstTestFactory.withClause([AstTestFactory.typeName(classM, [])]); |
3135 ClassElement classC = ElementFactory.classTypeAlias2('C', []); | 3138 ClassElement classC = ElementFactory.classTypeAlias2('C', []); |
3136 ClassTypeAlias alias = AstFactory.classTypeAlias( | 3139 ClassTypeAlias alias = AstTestFactory.classTypeAlias( |
3137 'C', null, null, AstFactory.typeName(classB, []), withClause, null); | 3140 'C', null, null, AstTestFactory.typeName(classB, []), withClause, null); |
3138 alias.name.staticElement = classC; | 3141 alias.name.staticElement = classC; |
3139 _resolveNode(alias, [classT, classB, classM, classC]); | 3142 _resolveNode(alias, [classT, classB, classM, classC]); |
3140 expect(classC.constructors, hasLength(1)); | 3143 expect(classC.constructors, hasLength(1)); |
3141 ConstructorElement constructor = classC.constructors[0]; | 3144 ConstructorElement constructor = classC.constructors[0]; |
3142 expect(constructor.isFactory, isFalse); | 3145 expect(constructor.isFactory, isFalse); |
3143 expect(constructor.isSynthetic, isTrue); | 3146 expect(constructor.isSynthetic, isTrue); |
3144 expect(constructor.name, 'c1'); | 3147 expect(constructor.name, 'c1'); |
3145 expect(constructor.functions, hasLength(0)); | 3148 expect(constructor.functions, hasLength(0)); |
3146 expect(constructor.labels, hasLength(0)); | 3149 expect(constructor.labels, hasLength(0)); |
3147 expect(constructor.localVariables, hasLength(0)); | 3150 expect(constructor.localVariables, hasLength(0)); |
3148 expect(constructor.parameters, isEmpty); | 3151 expect(constructor.parameters, isEmpty); |
3149 } | 3152 } |
3150 | 3153 |
3151 void test_visitClassTypeAlias_constructorWithParams() { | 3154 void test_visitClassTypeAlias_constructorWithParams() { |
3152 // class T {} | 3155 // class T {} |
3153 // class B { | 3156 // class B { |
3154 // B(T a0); | 3157 // B(T a0); |
3155 // } | 3158 // } |
3156 // class M {} | 3159 // class M {} |
3157 // class C = B with M | 3160 // class C = B with M |
3158 ClassElement classT = ElementFactory.classElement2('T', []); | 3161 ClassElement classT = ElementFactory.classElement2('T', []); |
3159 ClassElementImpl classB = ElementFactory.classElement2('B', []); | 3162 ClassElementImpl classB = ElementFactory.classElement2('B', []); |
3160 ConstructorElementImpl constructorB = | 3163 ConstructorElementImpl constructorB = |
3161 ElementFactory.constructorElement2(classB, '', [classT.type]); | 3164 ElementFactory.constructorElement2(classB, '', [classT.type]); |
3162 classB.constructors = [constructorB]; | 3165 classB.constructors = [constructorB]; |
3163 ClassElement classM = ElementFactory.classElement2('M', []); | 3166 ClassElement classM = ElementFactory.classElement2('M', []); |
3164 WithClause withClause = | 3167 WithClause withClause = |
3165 AstFactory.withClause([AstFactory.typeName(classM, [])]); | 3168 AstTestFactory.withClause([AstTestFactory.typeName(classM, [])]); |
3166 ClassElement classC = ElementFactory.classTypeAlias2('C', []); | 3169 ClassElement classC = ElementFactory.classTypeAlias2('C', []); |
3167 ClassTypeAlias alias = AstFactory.classTypeAlias( | 3170 ClassTypeAlias alias = AstTestFactory.classTypeAlias( |
3168 'C', null, null, AstFactory.typeName(classB, []), withClause, null); | 3171 'C', null, null, AstTestFactory.typeName(classB, []), withClause, null); |
3169 alias.name.staticElement = classC; | 3172 alias.name.staticElement = classC; |
3170 _resolveNode(alias, [classT, classB, classM, classC]); | 3173 _resolveNode(alias, [classT, classB, classM, classC]); |
3171 expect(classC.constructors, hasLength(1)); | 3174 expect(classC.constructors, hasLength(1)); |
3172 ConstructorElement constructor = classC.constructors[0]; | 3175 ConstructorElement constructor = classC.constructors[0]; |
3173 expect(constructor.isFactory, isFalse); | 3176 expect(constructor.isFactory, isFalse); |
3174 expect(constructor.isSynthetic, isTrue); | 3177 expect(constructor.isSynthetic, isTrue); |
3175 expect(constructor.name, ''); | 3178 expect(constructor.name, ''); |
3176 expect(constructor.functions, hasLength(0)); | 3179 expect(constructor.functions, hasLength(0)); |
3177 expect(constructor.labels, hasLength(0)); | 3180 expect(constructor.labels, hasLength(0)); |
3178 expect(constructor.localVariables, hasLength(0)); | 3181 expect(constructor.localVariables, hasLength(0)); |
3179 expect(constructor.parameters, hasLength(1)); | 3182 expect(constructor.parameters, hasLength(1)); |
3180 expect(constructor.parameters[0].type, equals(classT.type)); | 3183 expect(constructor.parameters[0].type, equals(classT.type)); |
3181 expect(constructor.parameters[0].name, | 3184 expect(constructor.parameters[0].name, |
3182 equals(constructorB.parameters[0].name)); | 3185 equals(constructorB.parameters[0].name)); |
3183 } | 3186 } |
3184 | 3187 |
3185 void test_visitClassTypeAlias_defaultConstructor() { | 3188 void test_visitClassTypeAlias_defaultConstructor() { |
3186 // class B {} | 3189 // class B {} |
3187 // class M {} | 3190 // class M {} |
3188 // class C = B with M | 3191 // class C = B with M |
3189 ClassElementImpl classB = ElementFactory.classElement2('B', []); | 3192 ClassElementImpl classB = ElementFactory.classElement2('B', []); |
3190 ConstructorElementImpl constructorB = | 3193 ConstructorElementImpl constructorB = |
3191 ElementFactory.constructorElement2(classB, '', []); | 3194 ElementFactory.constructorElement2(classB, '', []); |
3192 constructorB.setModifier(Modifier.SYNTHETIC, true); | 3195 constructorB.setModifier(Modifier.SYNTHETIC, true); |
3193 classB.constructors = [constructorB]; | 3196 classB.constructors = [constructorB]; |
3194 ClassElement classM = ElementFactory.classElement2('M', []); | 3197 ClassElement classM = ElementFactory.classElement2('M', []); |
3195 WithClause withClause = | 3198 WithClause withClause = |
3196 AstFactory.withClause([AstFactory.typeName(classM, [])]); | 3199 AstTestFactory.withClause([AstTestFactory.typeName(classM, [])]); |
3197 ClassElement classC = ElementFactory.classTypeAlias2('C', []); | 3200 ClassElement classC = ElementFactory.classTypeAlias2('C', []); |
3198 ClassTypeAlias alias = AstFactory.classTypeAlias( | 3201 ClassTypeAlias alias = AstTestFactory.classTypeAlias( |
3199 'C', null, null, AstFactory.typeName(classB, []), withClause, null); | 3202 'C', null, null, AstTestFactory.typeName(classB, []), withClause, null); |
3200 alias.name.staticElement = classC; | 3203 alias.name.staticElement = classC; |
3201 _resolveNode(alias, [classB, classM, classC]); | 3204 _resolveNode(alias, [classB, classM, classC]); |
3202 expect(classC.constructors, hasLength(1)); | 3205 expect(classC.constructors, hasLength(1)); |
3203 ConstructorElement constructor = classC.constructors[0]; | 3206 ConstructorElement constructor = classC.constructors[0]; |
3204 expect(constructor.isFactory, isFalse); | 3207 expect(constructor.isFactory, isFalse); |
3205 expect(constructor.isSynthetic, isTrue); | 3208 expect(constructor.isSynthetic, isTrue); |
3206 expect(constructor.name, ''); | 3209 expect(constructor.name, ''); |
3207 expect(constructor.functions, hasLength(0)); | 3210 expect(constructor.functions, hasLength(0)); |
3208 expect(constructor.labels, hasLength(0)); | 3211 expect(constructor.labels, hasLength(0)); |
3209 expect(constructor.localVariables, hasLength(0)); | 3212 expect(constructor.localVariables, hasLength(0)); |
3210 expect(constructor.parameters, isEmpty); | 3213 expect(constructor.parameters, isEmpty); |
3211 } | 3214 } |
3212 | 3215 |
3213 void test_visitFieldFormalParameter_functionType() { | 3216 void test_visitFieldFormalParameter_functionType() { |
3214 InterfaceType intType = _typeProvider.intType; | 3217 InterfaceType intType = _typeProvider.intType; |
3215 TypeName intTypeName = AstFactory.typeName4("int"); | 3218 TypeName intTypeName = AstTestFactory.typeName4("int"); |
3216 String innerParameterName = "a"; | 3219 String innerParameterName = "a"; |
3217 SimpleFormalParameter parameter = | 3220 SimpleFormalParameter parameter = |
3218 AstFactory.simpleFormalParameter3(innerParameterName); | 3221 AstTestFactory.simpleFormalParameter3(innerParameterName); |
3219 parameter.identifier.staticElement = | 3222 parameter.identifier.staticElement = |
3220 ElementFactory.requiredParameter(innerParameterName); | 3223 ElementFactory.requiredParameter(innerParameterName); |
3221 String outerParameterName = "p"; | 3224 String outerParameterName = "p"; |
3222 FormalParameter node = AstFactory.fieldFormalParameter(null, intTypeName, | 3225 FormalParameter node = AstTestFactory.fieldFormalParameter( |
3223 outerParameterName, AstFactory.formalParameterList([parameter])); | 3226 null, |
| 3227 intTypeName, |
| 3228 outerParameterName, |
| 3229 AstTestFactory.formalParameterList([parameter])); |
3224 node.identifier.staticElement = | 3230 node.identifier.staticElement = |
3225 ElementFactory.requiredParameter(outerParameterName); | 3231 ElementFactory.requiredParameter(outerParameterName); |
3226 DartType parameterType = _resolveFormalParameter(node, [intType.element]); | 3232 DartType parameterType = _resolveFormalParameter(node, [intType.element]); |
3227 EngineTestCase.assertInstanceOf( | 3233 EngineTestCase.assertInstanceOf( |
3228 (obj) => obj is FunctionType, FunctionType, parameterType); | 3234 (obj) => obj is FunctionType, FunctionType, parameterType); |
3229 FunctionType functionType = parameterType as FunctionType; | 3235 FunctionType functionType = parameterType as FunctionType; |
3230 expect(functionType.returnType, same(intType)); | 3236 expect(functionType.returnType, same(intType)); |
3231 expect(functionType.parameters, hasLength(1)); | 3237 expect(functionType.parameters, hasLength(1)); |
3232 _listener.assertNoErrors(); | 3238 _listener.assertNoErrors(); |
3233 } | 3239 } |
3234 | 3240 |
3235 void test_visitFieldFormalParameter_noType() { | 3241 void test_visitFieldFormalParameter_noType() { |
3236 String parameterName = "p"; | 3242 String parameterName = "p"; |
3237 FormalParameter node = | 3243 FormalParameter node = |
3238 AstFactory.fieldFormalParameter(Keyword.VAR, null, parameterName); | 3244 AstTestFactory.fieldFormalParameter(Keyword.VAR, null, parameterName); |
3239 node.identifier.staticElement = | 3245 node.identifier.staticElement = |
3240 ElementFactory.requiredParameter(parameterName); | 3246 ElementFactory.requiredParameter(parameterName); |
3241 expect(_resolveFormalParameter(node), same(_typeProvider.dynamicType)); | 3247 expect(_resolveFormalParameter(node), same(_typeProvider.dynamicType)); |
3242 _listener.assertNoErrors(); | 3248 _listener.assertNoErrors(); |
3243 } | 3249 } |
3244 | 3250 |
3245 void test_visitFieldFormalParameter_type() { | 3251 void test_visitFieldFormalParameter_type() { |
3246 InterfaceType intType = _typeProvider.intType; | 3252 InterfaceType intType = _typeProvider.intType; |
3247 TypeName intTypeName = AstFactory.typeName4("int"); | 3253 TypeName intTypeName = AstTestFactory.typeName4("int"); |
3248 String parameterName = "p"; | 3254 String parameterName = "p"; |
3249 FormalParameter node = | 3255 FormalParameter node = |
3250 AstFactory.fieldFormalParameter(null, intTypeName, parameterName); | 3256 AstTestFactory.fieldFormalParameter(null, intTypeName, parameterName); |
3251 node.identifier.staticElement = | 3257 node.identifier.staticElement = |
3252 ElementFactory.requiredParameter(parameterName); | 3258 ElementFactory.requiredParameter(parameterName); |
3253 expect(_resolveFormalParameter(node, [intType.element]), same(intType)); | 3259 expect(_resolveFormalParameter(node, [intType.element]), same(intType)); |
3254 _listener.assertNoErrors(); | 3260 _listener.assertNoErrors(); |
3255 } | 3261 } |
3256 | 3262 |
3257 void test_visitFunctionDeclaration() { | 3263 void test_visitFunctionDeclaration() { |
3258 // R f(P p) {} | 3264 // R f(P p) {} |
3259 // class R {} | 3265 // class R {} |
3260 // class P {} | 3266 // class P {} |
3261 ClassElement elementR = ElementFactory.classElement2('R'); | 3267 ClassElement elementR = ElementFactory.classElement2('R'); |
3262 ClassElement elementP = ElementFactory.classElement2('P'); | 3268 ClassElement elementP = ElementFactory.classElement2('P'); |
3263 FunctionElement elementF = ElementFactory.functionElement('f'); | 3269 FunctionElement elementF = ElementFactory.functionElement('f'); |
3264 FunctionDeclaration declaration = AstFactory.functionDeclaration( | 3270 FunctionDeclaration declaration = AstTestFactory.functionDeclaration( |
3265 AstFactory.typeName4('R'), | 3271 AstTestFactory.typeName4('R'), |
3266 null, | 3272 null, |
3267 'f', | 3273 'f', |
3268 AstFactory.functionExpression2( | 3274 AstTestFactory.functionExpression2( |
3269 AstFactory.formalParameterList([ | 3275 AstTestFactory.formalParameterList([ |
3270 AstFactory.simpleFormalParameter4(AstFactory.typeName4('P'), 'p') | 3276 AstTestFactory.simpleFormalParameter4( |
| 3277 AstTestFactory.typeName4('P'), 'p') |
3271 ]), | 3278 ]), |
3272 null)); | 3279 null)); |
3273 declaration.name.staticElement = elementF; | 3280 declaration.name.staticElement = elementF; |
3274 _resolveNode(declaration, [elementR, elementP]); | 3281 _resolveNode(declaration, [elementR, elementP]); |
3275 expect(declaration.returnType.type, elementR.type); | 3282 expect(declaration.returnType.type, elementR.type); |
3276 SimpleFormalParameter parameter = | 3283 SimpleFormalParameter parameter = |
3277 declaration.functionExpression.parameters.parameters[0]; | 3284 declaration.functionExpression.parameters.parameters[0]; |
3278 expect(parameter.type.type, elementP.type); | 3285 expect(parameter.type.type, elementP.type); |
3279 _listener.assertNoErrors(); | 3286 _listener.assertNoErrors(); |
3280 } | 3287 } |
3281 | 3288 |
3282 void test_visitFunctionDeclaration_typeParameter() { | 3289 void test_visitFunctionDeclaration_typeParameter() { |
3283 // E f<E>(E e) {} | 3290 // E f<E>(E e) {} |
3284 TypeParameterElement elementE = ElementFactory.typeParameterElement('E'); | 3291 TypeParameterElement elementE = ElementFactory.typeParameterElement('E'); |
3285 FunctionElementImpl elementF = ElementFactory.functionElement('f'); | 3292 FunctionElementImpl elementF = ElementFactory.functionElement('f'); |
3286 elementF.typeParameters = <TypeParameterElement>[elementE]; | 3293 elementF.typeParameters = <TypeParameterElement>[elementE]; |
3287 FunctionDeclaration declaration = AstFactory.functionDeclaration( | 3294 FunctionDeclaration declaration = AstTestFactory.functionDeclaration( |
3288 AstFactory.typeName4('E'), | 3295 AstTestFactory.typeName4('E'), |
3289 null, | 3296 null, |
3290 'f', | 3297 'f', |
3291 AstFactory.functionExpression2( | 3298 AstTestFactory.functionExpression2( |
3292 AstFactory.formalParameterList([ | 3299 AstTestFactory.formalParameterList([ |
3293 AstFactory.simpleFormalParameter4(AstFactory.typeName4('E'), 'e') | 3300 AstTestFactory.simpleFormalParameter4( |
| 3301 AstTestFactory.typeName4('E'), 'e') |
3294 ]), | 3302 ]), |
3295 null)); | 3303 null)); |
3296 declaration.name.staticElement = elementF; | 3304 declaration.name.staticElement = elementF; |
3297 _resolveNode(declaration, []); | 3305 _resolveNode(declaration, []); |
3298 expect(declaration.returnType.type, elementE.type); | 3306 expect(declaration.returnType.type, elementE.type); |
3299 SimpleFormalParameter parameter = | 3307 SimpleFormalParameter parameter = |
3300 declaration.functionExpression.parameters.parameters[0]; | 3308 declaration.functionExpression.parameters.parameters[0]; |
3301 expect(parameter.type.type, elementE.type); | 3309 expect(parameter.type.type, elementE.type); |
3302 _listener.assertNoErrors(); | 3310 _listener.assertNoErrors(); |
3303 } | 3311 } |
3304 | 3312 |
3305 void test_visitFunctionTypedFormalParameter() { | 3313 void test_visitFunctionTypedFormalParameter() { |
3306 // R f(R g(P p)) {} | 3314 // R f(R g(P p)) {} |
3307 // class R {} | 3315 // class R {} |
3308 // class P {} | 3316 // class P {} |
3309 ClassElement elementR = ElementFactory.classElement2('R'); | 3317 ClassElement elementR = ElementFactory.classElement2('R'); |
3310 ClassElement elementP = ElementFactory.classElement2('P'); | 3318 ClassElement elementP = ElementFactory.classElement2('P'); |
3311 FunctionElement elementF = ElementFactory.functionElement('f'); | 3319 FunctionElement elementF = ElementFactory.functionElement('f'); |
3312 ParameterElementImpl requiredParameter = | 3320 ParameterElementImpl requiredParameter = |
3313 ElementFactory.requiredParameter('p'); | 3321 ElementFactory.requiredParameter('p'); |
3314 FunctionTypedFormalParameter parameterDeclaration = AstFactory | 3322 FunctionTypedFormalParameter parameterDeclaration = AstTestFactory |
3315 .functionTypedFormalParameter(AstFactory.typeName4('R'), 'g', [ | 3323 .functionTypedFormalParameter(AstTestFactory.typeName4('R'), 'g', [ |
3316 AstFactory.simpleFormalParameter4(AstFactory.typeName4('P'), 'p') | 3324 AstTestFactory.simpleFormalParameter4(AstTestFactory.typeName4('P'), 'p') |
3317 ]); | 3325 ]); |
3318 parameterDeclaration.identifier.staticElement = requiredParameter; | 3326 parameterDeclaration.identifier.staticElement = requiredParameter; |
3319 FunctionDeclaration declaration = AstFactory.functionDeclaration( | 3327 FunctionDeclaration declaration = AstTestFactory.functionDeclaration( |
3320 AstFactory.typeName4('R'), | 3328 AstTestFactory.typeName4('R'), |
3321 null, | 3329 null, |
3322 'f', | 3330 'f', |
3323 AstFactory.functionExpression2( | 3331 AstTestFactory.functionExpression2( |
3324 AstFactory.formalParameterList([parameterDeclaration]), null)); | 3332 AstTestFactory.formalParameterList([parameterDeclaration]), null)); |
3325 declaration.name.staticElement = elementF; | 3333 declaration.name.staticElement = elementF; |
3326 _resolveNode(declaration, [elementR, elementP]); | 3334 _resolveNode(declaration, [elementR, elementP]); |
3327 expect(declaration.returnType.type, elementR.type); | 3335 expect(declaration.returnType.type, elementR.type); |
3328 FunctionTypedFormalParameter parameter = | 3336 FunctionTypedFormalParameter parameter = |
3329 declaration.functionExpression.parameters.parameters[0]; | 3337 declaration.functionExpression.parameters.parameters[0]; |
3330 expect(parameter.returnType.type, elementR.type); | 3338 expect(parameter.returnType.type, elementR.type); |
3331 SimpleFormalParameter innerParameter = parameter.parameters.parameters[0]; | 3339 SimpleFormalParameter innerParameter = parameter.parameters.parameters[0]; |
3332 expect(innerParameter.type.type, elementP.type); | 3340 expect(innerParameter.type.type, elementP.type); |
3333 _listener.assertNoErrors(); | 3341 _listener.assertNoErrors(); |
3334 } | 3342 } |
3335 | 3343 |
3336 void test_visitFunctionTypedFormalParameter_typeParameter() { | 3344 void test_visitFunctionTypedFormalParameter_typeParameter() { |
3337 // R f(R g<E>(E e)) {} | 3345 // R f(R g<E>(E e)) {} |
3338 // class R {} | 3346 // class R {} |
3339 ClassElement elementR = ElementFactory.classElement2('R'); | 3347 ClassElement elementR = ElementFactory.classElement2('R'); |
3340 TypeParameterElement elementE = ElementFactory.typeParameterElement('E'); | 3348 TypeParameterElement elementE = ElementFactory.typeParameterElement('E'); |
3341 FunctionElement elementF = ElementFactory.functionElement('f'); | 3349 FunctionElement elementF = ElementFactory.functionElement('f'); |
3342 ParameterElementImpl requiredParameter = | 3350 ParameterElementImpl requiredParameter = |
3343 ElementFactory.requiredParameter('g'); | 3351 ElementFactory.requiredParameter('g'); |
3344 requiredParameter.typeParameters = <TypeParameterElement>[elementE]; | 3352 requiredParameter.typeParameters = <TypeParameterElement>[elementE]; |
3345 FunctionTypedFormalParameter parameterDeclaration = AstFactory | 3353 FunctionTypedFormalParameter parameterDeclaration = AstTestFactory |
3346 .functionTypedFormalParameter(AstFactory.typeName4('R'), 'g', [ | 3354 .functionTypedFormalParameter(AstTestFactory.typeName4('R'), 'g', [ |
3347 AstFactory.simpleFormalParameter4(AstFactory.typeName4('E'), 'e') | 3355 AstTestFactory.simpleFormalParameter4(AstTestFactory.typeName4('E'), 'e') |
3348 ]); | 3356 ]); |
3349 parameterDeclaration.identifier.staticElement = requiredParameter; | 3357 parameterDeclaration.identifier.staticElement = requiredParameter; |
3350 FunctionDeclaration declaration = AstFactory.functionDeclaration( | 3358 FunctionDeclaration declaration = AstTestFactory.functionDeclaration( |
3351 AstFactory.typeName4('R'), | 3359 AstTestFactory.typeName4('R'), |
3352 null, | 3360 null, |
3353 'f', | 3361 'f', |
3354 AstFactory.functionExpression2( | 3362 AstTestFactory.functionExpression2( |
3355 AstFactory.formalParameterList([parameterDeclaration]), null)); | 3363 AstTestFactory.formalParameterList([parameterDeclaration]), null)); |
3356 declaration.name.staticElement = elementF; | 3364 declaration.name.staticElement = elementF; |
3357 _resolveNode(declaration, [elementR]); | 3365 _resolveNode(declaration, [elementR]); |
3358 expect(declaration.returnType.type, elementR.type); | 3366 expect(declaration.returnType.type, elementR.type); |
3359 FunctionTypedFormalParameter parameter = | 3367 FunctionTypedFormalParameter parameter = |
3360 declaration.functionExpression.parameters.parameters[0]; | 3368 declaration.functionExpression.parameters.parameters[0]; |
3361 expect(parameter.returnType.type, elementR.type); | 3369 expect(parameter.returnType.type, elementR.type); |
3362 SimpleFormalParameter innerParameter = parameter.parameters.parameters[0]; | 3370 SimpleFormalParameter innerParameter = parameter.parameters.parameters[0]; |
3363 expect(innerParameter.type.type, elementE.type); | 3371 expect(innerParameter.type.type, elementE.type); |
3364 _listener.assertNoErrors(); | 3372 _listener.assertNoErrors(); |
3365 } | 3373 } |
3366 | 3374 |
3367 void test_visitMethodDeclaration() { | 3375 void test_visitMethodDeclaration() { |
3368 // class A { | 3376 // class A { |
3369 // R m(P p) {} | 3377 // R m(P p) {} |
3370 // } | 3378 // } |
3371 // class R {} | 3379 // class R {} |
3372 // class P {} | 3380 // class P {} |
3373 ClassElementImpl elementA = ElementFactory.classElement2('A'); | 3381 ClassElementImpl elementA = ElementFactory.classElement2('A'); |
3374 ClassElement elementR = ElementFactory.classElement2('R'); | 3382 ClassElement elementR = ElementFactory.classElement2('R'); |
3375 ClassElement elementP = ElementFactory.classElement2('P'); | 3383 ClassElement elementP = ElementFactory.classElement2('P'); |
3376 MethodElement elementM = ElementFactory.methodElement('m', null); | 3384 MethodElement elementM = ElementFactory.methodElement('m', null); |
3377 elementA.methods = <MethodElement>[elementM]; | 3385 elementA.methods = <MethodElement>[elementM]; |
3378 MethodDeclaration declaration = AstFactory.methodDeclaration( | 3386 MethodDeclaration declaration = AstTestFactory.methodDeclaration( |
3379 null, | 3387 null, |
3380 AstFactory.typeName4('R'), | 3388 AstTestFactory.typeName4('R'), |
3381 null, | 3389 null, |
3382 null, | 3390 null, |
3383 AstFactory.identifier3('m'), | 3391 AstTestFactory.identifier3('m'), |
3384 AstFactory.formalParameterList([ | 3392 AstTestFactory.formalParameterList([ |
3385 AstFactory.simpleFormalParameter4(AstFactory.typeName4('P'), 'p') | 3393 AstTestFactory.simpleFormalParameter4( |
| 3394 AstTestFactory.typeName4('P'), 'p') |
3386 ])); | 3395 ])); |
3387 declaration.name.staticElement = elementM; | 3396 declaration.name.staticElement = elementM; |
3388 _resolveNode(declaration, [elementA, elementR, elementP]); | 3397 _resolveNode(declaration, [elementA, elementR, elementP]); |
3389 expect(declaration.returnType.type, elementR.type); | 3398 expect(declaration.returnType.type, elementR.type); |
3390 SimpleFormalParameter parameter = declaration.parameters.parameters[0]; | 3399 SimpleFormalParameter parameter = declaration.parameters.parameters[0]; |
3391 expect(parameter.type.type, elementP.type); | 3400 expect(parameter.type.type, elementP.type); |
3392 _listener.assertNoErrors(); | 3401 _listener.assertNoErrors(); |
3393 } | 3402 } |
3394 | 3403 |
3395 void test_visitMethodDeclaration_typeParameter() { | 3404 void test_visitMethodDeclaration_typeParameter() { |
3396 // class A { | 3405 // class A { |
3397 // E m<E>(E e) {} | 3406 // E m<E>(E e) {} |
3398 // } | 3407 // } |
3399 ClassElementImpl elementA = ElementFactory.classElement2('A'); | 3408 ClassElementImpl elementA = ElementFactory.classElement2('A'); |
3400 TypeParameterElement elementE = ElementFactory.typeParameterElement('E'); | 3409 TypeParameterElement elementE = ElementFactory.typeParameterElement('E'); |
3401 MethodElementImpl elementM = ElementFactory.methodElement('m', null); | 3410 MethodElementImpl elementM = ElementFactory.methodElement('m', null); |
3402 elementM.typeParameters = <TypeParameterElement>[elementE]; | 3411 elementM.typeParameters = <TypeParameterElement>[elementE]; |
3403 elementA.methods = <MethodElement>[elementM]; | 3412 elementA.methods = <MethodElement>[elementM]; |
3404 MethodDeclaration declaration = AstFactory.methodDeclaration( | 3413 MethodDeclaration declaration = AstTestFactory.methodDeclaration( |
3405 null, | 3414 null, |
3406 AstFactory.typeName4('E'), | 3415 AstTestFactory.typeName4('E'), |
3407 null, | 3416 null, |
3408 null, | 3417 null, |
3409 AstFactory.identifier3('m'), | 3418 AstTestFactory.identifier3('m'), |
3410 AstFactory.formalParameterList([ | 3419 AstTestFactory.formalParameterList([ |
3411 AstFactory.simpleFormalParameter4(AstFactory.typeName4('E'), 'e') | 3420 AstTestFactory.simpleFormalParameter4( |
| 3421 AstTestFactory.typeName4('E'), 'e') |
3412 ])); | 3422 ])); |
3413 declaration.name.staticElement = elementM; | 3423 declaration.name.staticElement = elementM; |
3414 _resolveNode(declaration, [elementA]); | 3424 _resolveNode(declaration, [elementA]); |
3415 expect(declaration.returnType.type, elementE.type); | 3425 expect(declaration.returnType.type, elementE.type); |
3416 SimpleFormalParameter parameter = declaration.parameters.parameters[0]; | 3426 SimpleFormalParameter parameter = declaration.parameters.parameters[0]; |
3417 expect(parameter.type.type, elementE.type); | 3427 expect(parameter.type.type, elementE.type); |
3418 _listener.assertNoErrors(); | 3428 _listener.assertNoErrors(); |
3419 } | 3429 } |
3420 | 3430 |
3421 void test_visitSimpleFormalParameter_noType() { | 3431 void test_visitSimpleFormalParameter_noType() { |
3422 // p | 3432 // p |
3423 FormalParameter node = AstFactory.simpleFormalParameter3("p"); | 3433 FormalParameter node = AstTestFactory.simpleFormalParameter3("p"); |
3424 node.identifier.staticElement = | 3434 node.identifier.staticElement = |
3425 new ParameterElementImpl.forNode(AstFactory.identifier3("p")); | 3435 new ParameterElementImpl.forNode(AstTestFactory.identifier3("p")); |
3426 expect(_resolveFormalParameter(node), same(_typeProvider.dynamicType)); | 3436 expect(_resolveFormalParameter(node), same(_typeProvider.dynamicType)); |
3427 _listener.assertNoErrors(); | 3437 _listener.assertNoErrors(); |
3428 } | 3438 } |
3429 | 3439 |
3430 void test_visitSimpleFormalParameter_type() { | 3440 void test_visitSimpleFormalParameter_type() { |
3431 // int p | 3441 // int p |
3432 InterfaceType intType = _typeProvider.intType; | 3442 InterfaceType intType = _typeProvider.intType; |
3433 ClassElement intElement = intType.element; | 3443 ClassElement intElement = intType.element; |
3434 FormalParameter node = | 3444 FormalParameter node = AstTestFactory.simpleFormalParameter4( |
3435 AstFactory.simpleFormalParameter4(AstFactory.typeName(intElement), "p"); | 3445 AstTestFactory.typeName(intElement), "p"); |
3436 SimpleIdentifier identifier = node.identifier; | 3446 SimpleIdentifier identifier = node.identifier; |
3437 ParameterElementImpl element = new ParameterElementImpl.forNode(identifier); | 3447 ParameterElementImpl element = new ParameterElementImpl.forNode(identifier); |
3438 identifier.staticElement = element; | 3448 identifier.staticElement = element; |
3439 expect(_resolveFormalParameter(node, [intElement]), same(intType)); | 3449 expect(_resolveFormalParameter(node, [intElement]), same(intType)); |
3440 _listener.assertNoErrors(); | 3450 _listener.assertNoErrors(); |
3441 } | 3451 } |
3442 | 3452 |
3443 void test_visitTypeName_noParameters_noArguments() { | 3453 void test_visitTypeName_noParameters_noArguments() { |
3444 ClassElement classA = ElementFactory.classElement2("A"); | 3454 ClassElement classA = ElementFactory.classElement2("A"); |
3445 TypeName typeName = AstFactory.typeName(classA); | 3455 TypeName typeName = AstTestFactory.typeName(classA); |
3446 typeName.type = null; | 3456 typeName.type = null; |
3447 _resolveNode(typeName, [classA]); | 3457 _resolveNode(typeName, [classA]); |
3448 expect(typeName.type, same(classA.type)); | 3458 expect(typeName.type, same(classA.type)); |
3449 _listener.assertNoErrors(); | 3459 _listener.assertNoErrors(); |
3450 } | 3460 } |
3451 | 3461 |
3452 void test_visitTypeName_noParameters_noArguments_undefined() { | 3462 void test_visitTypeName_noParameters_noArguments_undefined() { |
3453 SimpleIdentifier id = AstFactory.identifier3("unknown") | 3463 SimpleIdentifier id = AstTestFactory.identifier3("unknown") |
3454 ..staticElement = new _StaleElement(); | 3464 ..staticElement = new _StaleElement(); |
3455 TypeName typeName = new TypeName(id, null); | 3465 TypeName typeName = new TypeName(id, null); |
3456 _resolveNode(typeName, []); | 3466 _resolveNode(typeName, []); |
3457 expect(typeName.type, UndefinedTypeImpl.instance); | 3467 expect(typeName.type, UndefinedTypeImpl.instance); |
3458 expect(typeName.name.staticElement, null); | 3468 expect(typeName.name.staticElement, null); |
3459 _listener.assertErrorsWithCodes([StaticWarningCode.UNDEFINED_CLASS]); | 3469 _listener.assertErrorsWithCodes([StaticWarningCode.UNDEFINED_CLASS]); |
3460 } | 3470 } |
3461 | 3471 |
3462 void test_visitTypeName_parameters_arguments() { | 3472 void test_visitTypeName_parameters_arguments() { |
3463 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 3473 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
3464 ClassElement classB = ElementFactory.classElement2("B"); | 3474 ClassElement classB = ElementFactory.classElement2("B"); |
3465 TypeName typeName = | 3475 TypeName typeName = |
3466 AstFactory.typeName(classA, [AstFactory.typeName(classB)]); | 3476 AstTestFactory.typeName(classA, [AstTestFactory.typeName(classB)]); |
3467 typeName.type = null; | 3477 typeName.type = null; |
3468 _resolveNode(typeName, [classA, classB]); | 3478 _resolveNode(typeName, [classA, classB]); |
3469 InterfaceType resultType = typeName.type as InterfaceType; | 3479 InterfaceType resultType = typeName.type as InterfaceType; |
3470 expect(resultType.element, same(classA)); | 3480 expect(resultType.element, same(classA)); |
3471 List<DartType> resultArguments = resultType.typeArguments; | 3481 List<DartType> resultArguments = resultType.typeArguments; |
3472 expect(resultArguments, hasLength(1)); | 3482 expect(resultArguments, hasLength(1)); |
3473 expect(resultArguments[0], same(classB.type)); | 3483 expect(resultArguments[0], same(classB.type)); |
3474 _listener.assertNoErrors(); | 3484 _listener.assertNoErrors(); |
3475 } | 3485 } |
3476 | 3486 |
3477 void test_visitTypeName_parameters_noArguments() { | 3487 void test_visitTypeName_parameters_noArguments() { |
3478 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 3488 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
3479 TypeName typeName = AstFactory.typeName(classA); | 3489 TypeName typeName = AstTestFactory.typeName(classA); |
3480 typeName.type = null; | 3490 typeName.type = null; |
3481 _resolveNode(typeName, [classA]); | 3491 _resolveNode(typeName, [classA]); |
3482 InterfaceType resultType = typeName.type as InterfaceType; | 3492 InterfaceType resultType = typeName.type as InterfaceType; |
3483 expect(resultType.element, same(classA)); | 3493 expect(resultType.element, same(classA)); |
3484 List<DartType> resultArguments = resultType.typeArguments; | 3494 List<DartType> resultArguments = resultType.typeArguments; |
3485 expect(resultArguments, hasLength(1)); | 3495 expect(resultArguments, hasLength(1)); |
3486 expect(resultArguments[0], same(DynamicTypeImpl.instance)); | 3496 expect(resultArguments[0], same(DynamicTypeImpl.instance)); |
3487 _listener.assertNoErrors(); | 3497 _listener.assertNoErrors(); |
3488 } | 3498 } |
3489 | 3499 |
3490 void test_visitTypeName_prefixed_noParameters_noArguments_undefined() { | 3500 void test_visitTypeName_prefixed_noParameters_noArguments_undefined() { |
3491 SimpleIdentifier prefix = AstFactory.identifier3("unknownPrefix") | 3501 SimpleIdentifier prefix = AstTestFactory.identifier3("unknownPrefix") |
3492 ..staticElement = new _StaleElement(); | 3502 ..staticElement = new _StaleElement(); |
3493 SimpleIdentifier suffix = AstFactory.identifier3("unknownSuffix") | 3503 SimpleIdentifier suffix = AstTestFactory.identifier3("unknownSuffix") |
3494 ..staticElement = new _StaleElement(); | 3504 ..staticElement = new _StaleElement(); |
3495 TypeName typeName = | 3505 TypeName typeName = |
3496 new TypeName(AstFactory.identifier(prefix, suffix), null); | 3506 new TypeName(AstTestFactory.identifier(prefix, suffix), null); |
3497 _resolveNode(typeName, []); | 3507 _resolveNode(typeName, []); |
3498 expect(typeName.type, UndefinedTypeImpl.instance); | 3508 expect(typeName.type, UndefinedTypeImpl.instance); |
3499 expect(prefix.staticElement, null); | 3509 expect(prefix.staticElement, null); |
3500 expect(suffix.staticElement, null); | 3510 expect(suffix.staticElement, null); |
3501 _listener.assertErrorsWithCodes([StaticWarningCode.UNDEFINED_CLASS]); | 3511 _listener.assertErrorsWithCodes([StaticWarningCode.UNDEFINED_CLASS]); |
3502 } | 3512 } |
3503 | 3513 |
3504 void test_visitTypeName_void() { | 3514 void test_visitTypeName_void() { |
3505 ClassElement classA = ElementFactory.classElement2("A"); | 3515 ClassElement classA = ElementFactory.classElement2("A"); |
3506 TypeName typeName = AstFactory.typeName4("void"); | 3516 TypeName typeName = AstTestFactory.typeName4("void"); |
3507 _resolveNode(typeName, [classA]); | 3517 _resolveNode(typeName, [classA]); |
3508 expect(typeName.type, same(VoidTypeImpl.instance)); | 3518 expect(typeName.type, same(VoidTypeImpl.instance)); |
3509 _listener.assertNoErrors(); | 3519 _listener.assertNoErrors(); |
3510 } | 3520 } |
3511 | 3521 |
3512 /** | 3522 /** |
3513 * Analyze the given catch clause and assert that the types of the parameters
have been set to the | 3523 * Analyze the given catch clause and assert that the types of the parameters
have been set to the |
3514 * given types. The types can be null if the catch clause does not have the co
rresponding | 3524 * given types. The types can be null if the catch clause does not have the co
rresponding |
3515 * parameter. | 3525 * parameter. |
3516 * | 3526 * |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3623 */ | 3633 */ |
3624 class _StaleElement extends ElementImpl { | 3634 class _StaleElement extends ElementImpl { |
3625 _StaleElement() : super("_StaleElement", -1); | 3635 _StaleElement() : super("_StaleElement", -1); |
3626 | 3636 |
3627 @override | 3637 @override |
3628 get kind => throw "_StaleElement's kind shouldn't be accessed"; | 3638 get kind => throw "_StaleElement's kind shouldn't be accessed"; |
3629 | 3639 |
3630 @override | 3640 @override |
3631 accept(_) => throw "_StaleElement shouldn't be visited"; | 3641 accept(_) => throw "_StaleElement shouldn't be visited"; |
3632 } | 3642 } |
OLD | NEW |