| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 test.src.task.dart_test; | 5 library test.src.task.dart_test; |
| 6 | 6 |
| 7 import 'package:analyzer/src/context/cache.dart'; | 7 import 'package:analyzer/src/context/cache.dart'; |
| 8 import 'package:analyzer/src/generated/ast.dart'; | 8 import 'package:analyzer/src/generated/ast.dart'; |
| 9 import 'package:analyzer/src/generated/constant.dart'; | 9 import 'package:analyzer/src/generated/constant.dart'; |
| 10 import 'package:analyzer/src/generated/element.dart'; | 10 import 'package:analyzer/src/generated/element.dart'; |
| (...skipping 1813 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1824 computeResult(part, DART_ERRORS, matcher: isDartErrorsTask); | 1824 computeResult(part, DART_ERRORS, matcher: isDartErrorsTask); |
| 1825 expect(outputs, hasLength(1)); | 1825 expect(outputs, hasLength(1)); |
| 1826 List<AnalysisError> errors = outputs[DART_ERRORS]; | 1826 List<AnalysisError> errors = outputs[DART_ERRORS]; |
| 1827 // This should contain only the errors in the part file, not the ones in the | 1827 // This should contain only the errors in the part file, not the ones in the |
| 1828 // library. | 1828 // library. |
| 1829 expect(errors, hasLength(1)); | 1829 expect(errors, hasLength(1)); |
| 1830 } | 1830 } |
| 1831 } | 1831 } |
| 1832 | 1832 |
| 1833 @reflectiveTest | 1833 @reflectiveTest |
| 1834 class ErrorFilterTest extends _AbstractDartTaskTest { |
| 1835 @override |
| 1836 setUp() { |
| 1837 super.setUp(); |
| 1838 context.setConfigurationData(CONFIGURED_ERROR_FILTERS, [ |
| 1839 (AnalysisError error) => error.errorCode.name == 'INVALID_ASSIGNMENT' |
| 1840 ]); |
| 1841 } |
| 1842 |
| 1843 test_error_filters() { |
| 1844 AnalysisTarget library = newSource( |
| 1845 '/test.dart', |
| 1846 ''' |
| 1847 main() { |
| 1848 int x = ""; // INVALID_ASSIGNMENT (suppressed) |
| 1849 // UNUSED_LOCAL_VARIABLE |
| 1850 }'''); |
| 1851 computeResult(library, DART_ERRORS, matcher: isDartErrorsTask); |
| 1852 expect(outputs, hasLength(1)); |
| 1853 List<AnalysisError> errors = outputs[DART_ERRORS]; |
| 1854 expect(errors, hasLength(1)); |
| 1855 expect(errors.first.errorCode, HintCode.UNUSED_LOCAL_VARIABLE); |
| 1856 } |
| 1857 } |
| 1858 |
| 1859 @reflectiveTest |
| 1834 class EvaluateUnitConstantsTaskTest extends _AbstractDartTaskTest { | 1860 class EvaluateUnitConstantsTaskTest extends _AbstractDartTaskTest { |
| 1835 test_perform() { | 1861 test_perform() { |
| 1836 Source source = newSource( | 1862 Source source = newSource( |
| 1837 '/test.dart', | 1863 '/test.dart', |
| 1838 ''' | 1864 ''' |
| 1839 class C { | 1865 class C { |
| 1840 const C(); | 1866 const C(); |
| 1841 } | 1867 } |
| 1842 | 1868 |
| 1843 @x | 1869 @x |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2234 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2260 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
| 2235 computeResult(target, HINTS, matcher: isGenerateHintsTask); | 2261 computeResult(target, HINTS, matcher: isGenerateHintsTask); |
| 2236 // validate | 2262 // validate |
| 2237 _fillErrorListener(HINTS); | 2263 _fillErrorListener(HINTS); |
| 2238 errorListener.assertErrorsWithCodes( | 2264 errorListener.assertErrorsWithCodes( |
| 2239 <ErrorCode>[HintCode.UNUSED_ELEMENT, HintCode.UNUSED_ELEMENT]); | 2265 <ErrorCode>[HintCode.UNUSED_ELEMENT, HintCode.UNUSED_ELEMENT]); |
| 2240 } | 2266 } |
| 2241 } | 2267 } |
| 2242 | 2268 |
| 2243 @reflectiveTest | 2269 @reflectiveTest |
| 2244 class ErrorFilterTest extends _AbstractDartTaskTest { | |
| 2245 @override | |
| 2246 setUp() { | |
| 2247 super.setUp(); | |
| 2248 context.setConfigurationData(CONFIGURED_ERROR_FILTERS, [ | |
| 2249 (AnalysisError error) => error.errorCode.name == 'INVALID_ASSIGNMENT' | |
| 2250 ]); | |
| 2251 } | |
| 2252 | |
| 2253 test_error_filters() { | |
| 2254 AnalysisTarget library = newSource('/test.dart', ''' | |
| 2255 main() { | |
| 2256 int x = ""; // INVALID_ASSIGNMENT (suppressed) | |
| 2257 // UNUSED_LOCAL_VARIABLE | |
| 2258 }'''); | |
| 2259 computeResult(library, DART_ERRORS, matcher: isDartErrorsTask); | |
| 2260 expect(outputs, hasLength(1)); | |
| 2261 List<AnalysisError> errors = outputs[DART_ERRORS]; | |
| 2262 expect(errors, hasLength(1)); | |
| 2263 expect(errors.first.errorCode, HintCode.UNUSED_LOCAL_VARIABLE); | |
| 2264 } | |
| 2265 } | |
| 2266 | |
| 2267 @reflectiveTest | |
| 2268 class GenerateLintsTaskTest extends _AbstractDartTaskTest { | 2270 class GenerateLintsTaskTest extends _AbstractDartTaskTest { |
| 2269 void enableLints() { | 2271 void enableLints() { |
| 2270 AnalysisOptionsImpl options = context.analysisOptions; | 2272 AnalysisOptionsImpl options = context.analysisOptions; |
| 2271 options.lint = true; | 2273 options.lint = true; |
| 2272 context.analysisOptions = options; | 2274 context.analysisOptions = options; |
| 2273 } | 2275 } |
| 2274 | 2276 |
| 2275 @override | 2277 @override |
| 2276 void setUp() { | 2278 void setUp() { |
| 2277 super.setUp(); | 2279 super.setUp(); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2333 var f; | 2335 var f; |
| 2334 m(x) {} | 2336 m(x) {} |
| 2335 } | 2337 } |
| 2336 class X {} | 2338 class X {} |
| 2337 class Y {} | 2339 class Y {} |
| 2338 class Z {} | 2340 class Z {} |
| 2339 '''); | 2341 '''); |
| 2340 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, | 2342 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, |
| 2341 matcher: isInferInstanceMembersInUnitTask); | 2343 matcher: isInferInstanceMembersInUnitTask); |
| 2342 CompilationUnit unit = outputs[RESOLVED_UNIT8]; | 2344 CompilationUnit unit = outputs[RESOLVED_UNIT8]; |
| 2343 VariableDeclaration field = getFieldInClass(unit, 'B', 'f'); | 2345 VariableDeclaration field = AstFinder.getFieldInClass(unit, 'B', 'f'); |
| 2344 MethodDeclaration method = getMethodInClass(unit, 'B', 'm'); | 2346 MethodDeclaration method = AstFinder.getMethodInClass(unit, 'B', 'm'); |
| 2345 DartType typeX = getClass(unit, 'X').element.type; | 2347 DartType typeX = AstFinder.getClass(unit, 'X').element.type; |
| 2346 DartType typeY = getClass(unit, 'Y').element.type; | 2348 DartType typeY = AstFinder.getClass(unit, 'Y').element.type; |
| 2347 DartType typeZ = getClass(unit, 'Z').element.type; | 2349 DartType typeZ = AstFinder.getClass(unit, 'Z').element.type; |
| 2348 | 2350 |
| 2349 expect(field.element.type, typeX); | 2351 expect(field.element.type, typeX); |
| 2350 expect(method.element.returnType, typeY); | 2352 expect(method.element.returnType, typeY); |
| 2351 expect(method.element.parameters[0].type, typeZ); | 2353 expect(method.element.parameters[0].type, typeZ); |
| 2352 } | 2354 } |
| 2353 | 2355 |
| 2354 void test_perform_cross_library_const() { | 2356 void test_perform_cross_library_const() { |
| 2355 enableStrongMode(); | 2357 enableStrongMode(); |
| 2356 AnalysisTarget firstSource = newSource( | 2358 AnalysisTarget firstSource = newSource( |
| 2357 '/first.dart', | 2359 '/first.dart', |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2371 } | 2373 } |
| 2372 '''); | 2374 '''); |
| 2373 computeResult( | 2375 computeResult( |
| 2374 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8, | 2376 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8, |
| 2375 matcher: isInferInstanceMembersInUnitTask); | 2377 matcher: isInferInstanceMembersInUnitTask); |
| 2376 CompilationUnit firstUnit = outputs[RESOLVED_UNIT8]; | 2378 CompilationUnit firstUnit = outputs[RESOLVED_UNIT8]; |
| 2377 computeResult( | 2379 computeResult( |
| 2378 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8); | 2380 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8); |
| 2379 CompilationUnit secondUnit = outputs[RESOLVED_UNIT8]; | 2381 CompilationUnit secondUnit = outputs[RESOLVED_UNIT8]; |
| 2380 | 2382 |
| 2381 VariableDeclaration variableA = getTopLevelVariable(firstUnit, 'a'); | 2383 VariableDeclaration variableA = |
| 2382 VariableDeclaration variableB = getTopLevelVariable(secondUnit, 'b'); | 2384 AstFinder.getTopLevelVariable(firstUnit, 'a'); |
| 2383 VariableDeclaration variableC = getFieldInClass(secondUnit, 'M', 'c'); | 2385 VariableDeclaration variableB = |
| 2386 AstFinder.getTopLevelVariable(secondUnit, 'b'); |
| 2387 VariableDeclaration variableC = |
| 2388 AstFinder.getFieldInClass(secondUnit, 'M', 'c'); |
| 2384 InterfaceType stringType = context.typeProvider.stringType; | 2389 InterfaceType stringType = context.typeProvider.stringType; |
| 2385 | 2390 |
| 2386 expect(variableA.element.type, stringType); | 2391 expect(variableA.element.type, stringType); |
| 2387 expect(variableB.element.type, stringType); | 2392 expect(variableB.element.type, stringType); |
| 2388 expect(variableB.initializer.staticType, stringType); | 2393 expect(variableB.initializer.staticType, stringType); |
| 2389 expect(variableC.element.type, stringType); | 2394 expect(variableC.element.type, stringType); |
| 2390 expect(variableC.initializer.staticType, stringType); | 2395 expect(variableC.initializer.staticType, stringType); |
| 2391 } | 2396 } |
| 2392 | 2397 |
| 2393 void test_perform_reresolution() { | 2398 void test_perform_reresolution() { |
| 2394 enableStrongMode(); | 2399 enableStrongMode(); |
| 2395 AnalysisTarget source = newSource( | 2400 AnalysisTarget source = newSource( |
| 2396 '/test.dart', | 2401 '/test.dart', |
| 2397 ''' | 2402 ''' |
| 2398 const topLevel = ''; | 2403 const topLevel = ''; |
| 2399 class C { | 2404 class C { |
| 2400 String field = topLevel; | 2405 String field = topLevel; |
| 2401 } | 2406 } |
| 2402 '''); | 2407 '''); |
| 2403 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); | 2408 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); |
| 2404 CompilationUnit unit = outputs[RESOLVED_UNIT8]; | 2409 CompilationUnit unit = outputs[RESOLVED_UNIT8]; |
| 2405 VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel'); | 2410 VariableDeclaration topLevelDecl = |
| 2406 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field'); | 2411 AstFinder.getTopLevelVariable(unit, 'topLevel'); |
| 2412 VariableDeclaration fieldDecl = |
| 2413 AstFinder.getFieldInClass(unit, 'C', 'field'); |
| 2407 VariableElement topLevel = topLevelDecl.name.staticElement; | 2414 VariableElement topLevel = topLevelDecl.name.staticElement; |
| 2408 VariableElement field = fieldDecl.name.staticElement; | 2415 VariableElement field = fieldDecl.name.staticElement; |
| 2409 | 2416 |
| 2410 InterfaceType stringType = context.typeProvider.stringType; | 2417 InterfaceType stringType = context.typeProvider.stringType; |
| 2411 expect(topLevel.type, stringType); | 2418 expect(topLevel.type, stringType); |
| 2412 expect(field.type, stringType); | 2419 expect(field.type, stringType); |
| 2413 expect(fieldDecl.initializer.staticType, stringType); | 2420 expect(fieldDecl.initializer.staticType, stringType); |
| 2414 } | 2421 } |
| 2415 } | 2422 } |
| 2416 | 2423 |
| 2417 @reflectiveTest | 2424 @reflectiveTest |
| 2418 class InferStaticVariableTypesInUnitTaskTest extends _AbstractDartTaskTest { | 2425 class InferStaticVariableTypesInUnitTaskTest extends _AbstractDartTaskTest { |
| 2419 void test_perform_const_field() { | 2426 void test_perform_const_field() { |
| 2420 enableStrongMode(); | 2427 enableStrongMode(); |
| 2421 AnalysisTarget source = newSource( | 2428 AnalysisTarget source = newSource( |
| 2422 '/test.dart', | 2429 '/test.dart', |
| 2423 ''' | 2430 ''' |
| 2424 class M { | 2431 class M { |
| 2425 static const X = ""; | 2432 static const X = ""; |
| 2426 } | 2433 } |
| 2427 '''); | 2434 '''); |
| 2428 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6, | 2435 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6, |
| 2429 matcher: isInferStaticVariableTypesInUnitTask); | 2436 matcher: isInferStaticVariableTypesInUnitTask); |
| 2430 CompilationUnit unit = outputs[RESOLVED_UNIT6]; | 2437 CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
| 2431 VariableDeclaration declaration = getFieldInClass(unit, 'M', 'X'); | 2438 VariableDeclaration declaration = AstFinder.getFieldInClass(unit, 'M', 'X'); |
| 2432 InterfaceType stringType = context.typeProvider.stringType; | 2439 InterfaceType stringType = context.typeProvider.stringType; |
| 2433 expect(declaration.element.type, stringType); | 2440 expect(declaration.element.type, stringType); |
| 2434 } | 2441 } |
| 2435 | 2442 |
| 2436 void test_perform_nestedDeclarations() { | 2443 void test_perform_nestedDeclarations() { |
| 2437 enableStrongMode(); | 2444 enableStrongMode(); |
| 2438 AnalysisTarget source = newSource( | 2445 AnalysisTarget source = newSource( |
| 2439 '/test.dart', | 2446 '/test.dart', |
| 2440 ''' | 2447 ''' |
| 2441 var f = (int x) { | 2448 var f = (int x) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2467 class M {} | 2474 class M {} |
| 2468 '''); | 2475 '''); |
| 2469 computeResult( | 2476 computeResult( |
| 2470 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT6, | 2477 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT6, |
| 2471 matcher: isInferStaticVariableTypesInUnitTask); | 2478 matcher: isInferStaticVariableTypesInUnitTask); |
| 2472 CompilationUnit firstUnit = outputs[RESOLVED_UNIT6]; | 2479 CompilationUnit firstUnit = outputs[RESOLVED_UNIT6]; |
| 2473 computeResult( | 2480 computeResult( |
| 2474 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT6); | 2481 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT6); |
| 2475 CompilationUnit secondUnit = outputs[RESOLVED_UNIT6]; | 2482 CompilationUnit secondUnit = outputs[RESOLVED_UNIT6]; |
| 2476 | 2483 |
| 2477 VariableDeclaration variableA = getTopLevelVariable(firstUnit, 'a'); | 2484 VariableDeclaration variableA = |
| 2478 VariableDeclaration variableB = getTopLevelVariable(secondUnit, 'b'); | 2485 AstFinder.getTopLevelVariable(firstUnit, 'a'); |
| 2479 VariableDeclaration variableC = getTopLevelVariable(firstUnit, 'c'); | 2486 VariableDeclaration variableB = |
| 2480 ClassDeclaration classM = getClass(secondUnit, 'M'); | 2487 AstFinder.getTopLevelVariable(secondUnit, 'b'); |
| 2488 VariableDeclaration variableC = |
| 2489 AstFinder.getTopLevelVariable(firstUnit, 'c'); |
| 2490 ClassDeclaration classM = AstFinder.getClass(secondUnit, 'M'); |
| 2481 DartType typeM = classM.element.type; | 2491 DartType typeM = classM.element.type; |
| 2482 | 2492 |
| 2483 expect(variableA.element.type, typeM); | 2493 expect(variableA.element.type, typeM); |
| 2484 expect(variableB.element.type, typeM); | 2494 expect(variableB.element.type, typeM); |
| 2485 expect(variableB.initializer.staticType, typeM); | 2495 expect(variableB.initializer.staticType, typeM); |
| 2486 expect(variableC.element.type, typeM); | 2496 expect(variableC.element.type, typeM); |
| 2487 expect(variableC.initializer.staticType, typeM); | 2497 expect(variableC.initializer.staticType, typeM); |
| 2488 } | 2498 } |
| 2489 | 2499 |
| 2490 void test_perform_simple() { | 2500 void test_perform_simple() { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2517 void test_getDeclaration_staticField() { | 2527 void test_getDeclaration_staticField() { |
| 2518 AnalysisTarget source = newSource( | 2528 AnalysisTarget source = newSource( |
| 2519 '/test.dart', | 2529 '/test.dart', |
| 2520 ''' | 2530 ''' |
| 2521 class C { | 2531 class C { |
| 2522 var field = ''; | 2532 var field = ''; |
| 2523 } | 2533 } |
| 2524 '''); | 2534 '''); |
| 2525 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2535 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
| 2526 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2536 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
| 2527 VariableDeclaration declaration = getFieldInClass(unit, 'C', 'field'); | 2537 VariableDeclaration declaration = |
| 2538 AstFinder.getFieldInClass(unit, 'C', 'field'); |
| 2528 VariableElement variable = declaration.name.staticElement; | 2539 VariableElement variable = declaration.name.staticElement; |
| 2529 InferStaticVariableTypeTask inferTask = | 2540 InferStaticVariableTypeTask inferTask = |
| 2530 new InferStaticVariableTypeTask(task.context, variable); | 2541 new InferStaticVariableTypeTask(task.context, variable); |
| 2531 expect(inferTask.getDeclaration(unit), declaration); | 2542 expect(inferTask.getDeclaration(unit), declaration); |
| 2532 } | 2543 } |
| 2533 | 2544 |
| 2534 void test_getDeclaration_topLevel() { | 2545 void test_getDeclaration_topLevel() { |
| 2535 AnalysisTarget source = newSource( | 2546 AnalysisTarget source = newSource( |
| 2536 '/test.dart', | 2547 '/test.dart', |
| 2537 ''' | 2548 ''' |
| 2538 var topLevel = ''; | 2549 var topLevel = ''; |
| 2539 '''); | 2550 '''); |
| 2540 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2551 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
| 2541 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2552 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
| 2542 VariableDeclaration declaration = getTopLevelVariable(unit, 'topLevel'); | 2553 VariableDeclaration declaration = |
| 2554 AstFinder.getTopLevelVariable(unit, 'topLevel'); |
| 2543 VariableElement variable = declaration.name.staticElement; | 2555 VariableElement variable = declaration.name.staticElement; |
| 2544 InferStaticVariableTypeTask inferTask = | 2556 InferStaticVariableTypeTask inferTask = |
| 2545 new InferStaticVariableTypeTask(task.context, variable); | 2557 new InferStaticVariableTypeTask(task.context, variable); |
| 2546 expect(inferTask.getDeclaration(unit), declaration); | 2558 expect(inferTask.getDeclaration(unit), declaration); |
| 2547 } | 2559 } |
| 2548 | 2560 |
| 2549 void test_perform() { | 2561 void test_perform() { |
| 2550 enableStrongMode(); | 2562 enableStrongMode(); |
| 2551 AnalysisTarget source = newSource( | 2563 AnalysisTarget source = newSource( |
| 2552 '/test3.dart', | 2564 '/test3.dart', |
| 2553 ''' | 2565 ''' |
| 2554 var topLevel3 = ''; | 2566 var topLevel3 = ''; |
| 2555 class C { | 2567 class C { |
| 2556 var field3 = topLevel3; | 2568 var field3 = topLevel3; |
| 2557 } | 2569 } |
| 2558 '''); | 2570 '''); |
| 2559 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2571 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
| 2560 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2572 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
| 2561 VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel3'); | 2573 VariableDeclaration topLevelDecl = |
| 2562 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field3'); | 2574 AstFinder.getTopLevelVariable(unit, 'topLevel3'); |
| 2575 VariableDeclaration fieldDecl = |
| 2576 AstFinder.getFieldInClass(unit, 'C', 'field3'); |
| 2563 VariableElement topLevel = topLevelDecl.name.staticElement; | 2577 VariableElement topLevel = topLevelDecl.name.staticElement; |
| 2564 VariableElement field = fieldDecl.name.staticElement; | 2578 VariableElement field = fieldDecl.name.staticElement; |
| 2565 | 2579 |
| 2566 computeResult(field, INFERRED_STATIC_VARIABLE, | 2580 computeResult(field, INFERRED_STATIC_VARIABLE, |
| 2567 matcher: isInferStaticVariableTypeTask); | 2581 matcher: isInferStaticVariableTypeTask); |
| 2568 InterfaceType stringType = context.typeProvider.stringType; | 2582 InterfaceType stringType = context.typeProvider.stringType; |
| 2569 expect(topLevel.type, stringType); | 2583 expect(topLevel.type, stringType); |
| 2570 expect(field.type, stringType); | 2584 expect(field.type, stringType); |
| 2571 expect(fieldDecl.initializer.staticType, stringType); | 2585 expect(fieldDecl.initializer.staticType, stringType); |
| 2572 } | 2586 } |
| 2573 | 2587 |
| 2574 void test_perform_const() { | 2588 void test_perform_const() { |
| 2575 enableStrongMode(); | 2589 enableStrongMode(); |
| 2576 AnalysisTarget source = newSource( | 2590 AnalysisTarget source = newSource( |
| 2577 '/test.dart', | 2591 '/test.dart', |
| 2578 ''' | 2592 ''' |
| 2579 const topLevel = "hello"; | 2593 const topLevel = "hello"; |
| 2580 class C { | 2594 class C { |
| 2581 var field = topLevel; | 2595 var field = topLevel; |
| 2582 } | 2596 } |
| 2583 '''); | 2597 '''); |
| 2584 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2598 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
| 2585 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2599 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
| 2586 VariableElement topLevel = | 2600 VariableElement topLevel = |
| 2587 getTopLevelVariable(unit, 'topLevel').name.staticElement; | 2601 AstFinder.getTopLevelVariable(unit, 'topLevel').name.staticElement; |
| 2588 VariableElement field = | 2602 VariableElement field = |
| 2589 getFieldInClass(unit, 'C', 'field').name.staticElement; | 2603 AstFinder.getFieldInClass(unit, 'C', 'field').name.staticElement; |
| 2590 | 2604 |
| 2591 computeResult(field, INFERRED_STATIC_VARIABLE, | 2605 computeResult(field, INFERRED_STATIC_VARIABLE, |
| 2592 matcher: isInferStaticVariableTypeTask); | 2606 matcher: isInferStaticVariableTypeTask); |
| 2593 InterfaceType stringType = context.typeProvider.stringType; | 2607 InterfaceType stringType = context.typeProvider.stringType; |
| 2594 expect(topLevel.type, stringType); | 2608 expect(topLevel.type, stringType); |
| 2595 expect(field.type, stringType); | 2609 expect(field.type, stringType); |
| 2596 } | 2610 } |
| 2597 | 2611 |
| 2598 void test_perform_cycle() { | 2612 void test_perform_cycle() { |
| 2599 enableStrongMode(); | 2613 enableStrongMode(); |
| 2600 AnalysisTarget source = newSource( | 2614 AnalysisTarget source = newSource( |
| 2601 '/test.dart', | 2615 '/test.dart', |
| 2602 ''' | 2616 ''' |
| 2603 var piFirst = true; | 2617 var piFirst = true; |
| 2604 var pi = piFirst ? 3.14 : tau / 2; | 2618 var pi = piFirst ? 3.14 : tau / 2; |
| 2605 var tau = piFirst ? pi * 2 : 6.28; | 2619 var tau = piFirst ? pi * 2 : 6.28; |
| 2606 '''); | 2620 '''); |
| 2607 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2621 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
| 2608 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2622 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
| 2609 VariableElement piFirst = | 2623 VariableElement piFirst = |
| 2610 getTopLevelVariable(unit, 'piFirst').name.staticElement; | 2624 AstFinder.getTopLevelVariable(unit, 'piFirst').name.staticElement; |
| 2611 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; | 2625 VariableElement pi = |
| 2612 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; | 2626 AstFinder.getTopLevelVariable(unit, 'pi').name.staticElement; |
| 2627 VariableElement tau = |
| 2628 AstFinder.getTopLevelVariable(unit, 'tau').name.staticElement; |
| 2613 | 2629 |
| 2614 computeResult(piFirst, INFERRED_STATIC_VARIABLE, | 2630 computeResult(piFirst, INFERRED_STATIC_VARIABLE, |
| 2615 matcher: isInferStaticVariableTypeTask); | 2631 matcher: isInferStaticVariableTypeTask); |
| 2616 expect(piFirst.type, context.typeProvider.boolType); | 2632 expect(piFirst.type, context.typeProvider.boolType); |
| 2617 expect(pi.type.isDynamic, isTrue); | 2633 expect(pi.type.isDynamic, isTrue); |
| 2618 expect(tau.type.isDynamic, isTrue); | 2634 expect(tau.type.isDynamic, isTrue); |
| 2619 } | 2635 } |
| 2620 | 2636 |
| 2621 void test_perform_error() { | 2637 void test_perform_error() { |
| 2622 enableStrongMode(); | 2638 enableStrongMode(); |
| 2623 AnalysisTarget source = newSource( | 2639 AnalysisTarget source = newSource( |
| 2624 '/test.dart', | 2640 '/test.dart', |
| 2625 ''' | 2641 ''' |
| 2626 var a = '' / null; | 2642 var a = '' / null; |
| 2627 '''); | 2643 '''); |
| 2628 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2644 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
| 2629 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2645 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
| 2630 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; | 2646 VariableElement a = |
| 2647 AstFinder.getTopLevelVariable(unit, 'a').name.staticElement; |
| 2631 | 2648 |
| 2632 computeResult(a, INFERRED_STATIC_VARIABLE, | 2649 computeResult(a, INFERRED_STATIC_VARIABLE, |
| 2633 matcher: isInferStaticVariableTypeTask); | 2650 matcher: isInferStaticVariableTypeTask); |
| 2634 expect(a.type.isDynamic, isTrue); | 2651 expect(a.type.isDynamic, isTrue); |
| 2635 } | 2652 } |
| 2636 | 2653 |
| 2637 void test_perform_null() { | 2654 void test_perform_null() { |
| 2638 enableStrongMode(); | 2655 enableStrongMode(); |
| 2639 AnalysisTarget source = newSource( | 2656 AnalysisTarget source = newSource( |
| 2640 '/test.dart', | 2657 '/test.dart', |
| 2641 ''' | 2658 ''' |
| 2642 var a = null; | 2659 var a = null; |
| 2643 '''); | 2660 '''); |
| 2644 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2661 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
| 2645 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2662 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
| 2646 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; | 2663 VariableElement a = |
| 2664 AstFinder.getTopLevelVariable(unit, 'a').name.staticElement; |
| 2647 | 2665 |
| 2648 computeResult(a, INFERRED_STATIC_VARIABLE, | 2666 computeResult(a, INFERRED_STATIC_VARIABLE, |
| 2649 matcher: isInferStaticVariableTypeTask); | 2667 matcher: isInferStaticVariableTypeTask); |
| 2650 expect(a.type.isDynamic, isTrue); | 2668 expect(a.type.isDynamic, isTrue); |
| 2651 } | 2669 } |
| 2652 } | 2670 } |
| 2653 | 2671 |
| 2654 @reflectiveTest | 2672 @reflectiveTest |
| 2655 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { | 2673 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { |
| 2656 test_perform() { | 2674 test_perform() { |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3010 }); | 3028 }); |
| 3011 InterfaceType intType = context.typeProvider.intType; | 3029 InterfaceType intType = context.typeProvider.intType; |
| 3012 DartType dynamicType = context.typeProvider.dynamicType; | 3030 DartType dynamicType = context.typeProvider.dynamicType; |
| 3013 | 3031 |
| 3014 computeResult( | 3032 computeResult( |
| 3015 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT7); | 3033 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT7); |
| 3016 CompilationUnit unit1 = outputs[RESOLVED_UNIT7]; | 3034 CompilationUnit unit1 = outputs[RESOLVED_UNIT7]; |
| 3017 | 3035 |
| 3018 // B.b2 shoud be resolved on the rhs, but not yet inferred. | 3036 // B.b2 shoud be resolved on the rhs, but not yet inferred. |
| 3019 assertVariableDeclarationTypes( | 3037 assertVariableDeclarationTypes( |
| 3020 getFieldInClass(unit1, "B", "b2"), dynamicType, intType); | 3038 AstFinder.getFieldInClass(unit1, "B", "b2"), dynamicType, intType); |
| 3021 | 3039 |
| 3022 computeResult( | 3040 computeResult( |
| 3023 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT7); | 3041 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT7); |
| 3024 CompilationUnit unit0 = outputs[RESOLVED_UNIT7]; | 3042 CompilationUnit unit0 = outputs[RESOLVED_UNIT7]; |
| 3025 | 3043 |
| 3026 // B.b2 should now be fully resolved and inferred. | 3044 // B.b2 should now be fully resolved and inferred. |
| 3027 assertVariableDeclarationTypes( | 3045 assertVariableDeclarationTypes( |
| 3028 getFieldInClass(unit1, "B", "b2"), intType, intType); | 3046 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType); |
| 3029 | 3047 |
| 3030 // A.a2 should now be resolved on the rhs, but not yet inferred. | 3048 // A.a2 should now be resolved on the rhs, but not yet inferred. |
| 3031 assertVariableDeclarationTypes( | 3049 assertVariableDeclarationTypes( |
| 3032 getFieldInClass(unit0, "A", "a2"), dynamicType, intType); | 3050 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, intType); |
| 3033 | 3051 |
| 3034 computeResult( | 3052 computeResult( |
| 3035 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT7); | 3053 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT7); |
| 3036 | 3054 |
| 3037 // A.a2 should now be fully resolved and inferred. | 3055 // A.a2 should now be fully resolved and inferred. |
| 3038 assertVariableDeclarationTypes( | 3056 assertVariableDeclarationTypes( |
| 3039 getFieldInClass(unit0, "A", "a2"), intType, intType); | 3057 AstFinder.getFieldInClass(unit0, "A", "a2"), intType, intType); |
| 3040 | 3058 |
| 3041 assertVariableDeclarationTypes( | 3059 assertVariableDeclarationTypes( |
| 3042 getFieldInClass(unit1, "B", "b2"), intType, intType); | 3060 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType); |
| 3043 } | 3061 } |
| 3044 | 3062 |
| 3045 // Test inference of instance fields across units | 3063 // Test inference of instance fields across units |
| 3046 void test_perform_inference_cross_unit_instance_cyclic() { | 3064 void test_perform_inference_cross_unit_instance_cyclic() { |
| 3047 List<Source> sources = newSources({ | 3065 List<Source> sources = newSources({ |
| 3048 '/a.dart': ''' | 3066 '/a.dart': ''' |
| 3049 import 'b.dart'; | 3067 import 'b.dart'; |
| 3050 class A { | 3068 class A { |
| 3051 final a2 = new B().b2; | 3069 final a2 = new B().b2; |
| 3052 } | 3070 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3067 ''' | 3085 ''' |
| 3068 }); | 3086 }); |
| 3069 DartType dynamicType = context.typeProvider.dynamicType; | 3087 DartType dynamicType = context.typeProvider.dynamicType; |
| 3070 | 3088 |
| 3071 computeResult( | 3089 computeResult( |
| 3072 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT7); | 3090 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT7); |
| 3073 CompilationUnit unit0 = outputs[RESOLVED_UNIT7]; | 3091 CompilationUnit unit0 = outputs[RESOLVED_UNIT7]; |
| 3074 | 3092 |
| 3075 // A.a2 should now be resolved on the rhs, but not yet inferred. | 3093 // A.a2 should now be resolved on the rhs, but not yet inferred. |
| 3076 assertVariableDeclarationTypes( | 3094 assertVariableDeclarationTypes( |
| 3077 getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); | 3095 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); |
| 3078 | 3096 |
| 3079 computeResult( | 3097 computeResult( |
| 3080 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT7); | 3098 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT7); |
| 3081 | 3099 |
| 3082 // A.a2 should now be fully resolved and inferred. | 3100 // A.a2 should now be fully resolved and inferred. |
| 3083 assertVariableDeclarationTypes( | 3101 assertVariableDeclarationTypes( |
| 3084 getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); | 3102 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); |
| 3085 } | 3103 } |
| 3086 | 3104 |
| 3087 // Test inference of instance fields across units with cycles | 3105 // Test inference of instance fields across units with cycles |
| 3088 void test_perform_inference_cross_unit_static_instance() { | 3106 void test_perform_inference_cross_unit_static_instance() { |
| 3089 List<Source> sources = newSources({ | 3107 List<Source> sources = newSources({ |
| 3090 '/a.dart': ''' | 3108 '/a.dart': ''' |
| 3091 import 'b.dart'; | 3109 import 'b.dart'; |
| 3092 class A { | 3110 class A { |
| 3093 static final a1 = B.b1; | 3111 static final a1 = B.b1; |
| 3094 final a2 = new B().b2; | 3112 final a2 = new B().b2; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3112 ''' | 3130 ''' |
| 3113 }); | 3131 }); |
| 3114 InterfaceType intType = context.typeProvider.intType; | 3132 InterfaceType intType = context.typeProvider.intType; |
| 3115 DartType dynamicType = context.typeProvider.dynamicType; | 3133 DartType dynamicType = context.typeProvider.dynamicType; |
| 3116 | 3134 |
| 3117 computeResult( | 3135 computeResult( |
| 3118 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT7); | 3136 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT7); |
| 3119 CompilationUnit unit1 = outputs[RESOLVED_UNIT7]; | 3137 CompilationUnit unit1 = outputs[RESOLVED_UNIT7]; |
| 3120 | 3138 |
| 3121 assertVariableDeclarationTypes( | 3139 assertVariableDeclarationTypes( |
| 3122 getFieldInClass(unit1, "B", "b1"), intType, intType); | 3140 AstFinder.getFieldInClass(unit1, "B", "b1"), intType, intType); |
| 3123 assertVariableDeclarationTypes( | 3141 assertVariableDeclarationTypes( |
| 3124 getFieldInClass(unit1, "B", "b2"), dynamicType, intType); | 3142 AstFinder.getFieldInClass(unit1, "B", "b2"), dynamicType, intType); |
| 3125 | 3143 |
| 3126 computeResult( | 3144 computeResult( |
| 3127 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT7); | 3145 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT7); |
| 3128 CompilationUnit unit0 = outputs[RESOLVED_UNIT7]; | 3146 CompilationUnit unit0 = outputs[RESOLVED_UNIT7]; |
| 3129 | 3147 |
| 3130 assertVariableDeclarationTypes( | 3148 assertVariableDeclarationTypes( |
| 3131 getFieldInClass(unit0, "A", "a1"), intType, intType); | 3149 AstFinder.getFieldInClass(unit0, "A", "a1"), intType, intType); |
| 3132 assertVariableDeclarationTypes( | 3150 assertVariableDeclarationTypes( |
| 3133 getFieldInClass(unit0, "A", "a2"), dynamicType, intType); | 3151 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, intType); |
| 3134 | 3152 |
| 3135 assertVariableDeclarationTypes( | 3153 assertVariableDeclarationTypes( |
| 3136 getFieldInClass(unit1, "B", "b1"), intType, intType); | 3154 AstFinder.getFieldInClass(unit1, "B", "b1"), intType, intType); |
| 3137 assertVariableDeclarationTypes( | 3155 assertVariableDeclarationTypes( |
| 3138 getFieldInClass(unit1, "B", "b2"), intType, intType); | 3156 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType); |
| 3139 | 3157 |
| 3140 computeResult( | 3158 computeResult( |
| 3141 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT7); | 3159 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT7); |
| 3142 | 3160 |
| 3143 assertVariableDeclarationTypes( | 3161 assertVariableDeclarationTypes( |
| 3144 getFieldInClass(unit0, "A", "a1"), intType, intType); | 3162 AstFinder.getFieldInClass(unit0, "A", "a1"), intType, intType); |
| 3145 assertVariableDeclarationTypes( | 3163 assertVariableDeclarationTypes( |
| 3146 getFieldInClass(unit0, "A", "a2"), intType, intType); | 3164 AstFinder.getFieldInClass(unit0, "A", "a2"), intType, intType); |
| 3147 | 3165 |
| 3148 assertVariableDeclarationTypes( | 3166 assertVariableDeclarationTypes( |
| 3149 getFieldInClass(unit1, "B", "b1"), intType, intType); | 3167 AstFinder.getFieldInClass(unit1, "B", "b1"), intType, intType); |
| 3150 assertVariableDeclarationTypes( | 3168 assertVariableDeclarationTypes( |
| 3151 getFieldInClass(unit1, "B", "b2"), intType, intType); | 3169 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType); |
| 3152 } | 3170 } |
| 3153 | 3171 |
| 3154 // Test inference between static and instance fields | 3172 // Test inference between static and instance fields |
| 3155 void test_perform_inference_instance() { | 3173 void test_perform_inference_instance() { |
| 3156 List<Source> sources = newSources({ | 3174 List<Source> sources = newSources({ |
| 3157 '/a.dart': ''' | 3175 '/a.dart': ''' |
| 3158 import 'b.dart'; | 3176 import 'b.dart'; |
| 3159 class A { | 3177 class A { |
| 3160 final a2 = new B().b2; | 3178 final a2 = new B().b2; |
| 3161 } | 3179 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3175 }); | 3193 }); |
| 3176 InterfaceType intType = context.typeProvider.intType; | 3194 InterfaceType intType = context.typeProvider.intType; |
| 3177 DartType dynamicType = context.typeProvider.dynamicType; | 3195 DartType dynamicType = context.typeProvider.dynamicType; |
| 3178 | 3196 |
| 3179 computeResult( | 3197 computeResult( |
| 3180 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT7); | 3198 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT7); |
| 3181 CompilationUnit unit0 = outputs[RESOLVED_UNIT7]; | 3199 CompilationUnit unit0 = outputs[RESOLVED_UNIT7]; |
| 3182 | 3200 |
| 3183 // A.a2 should now be resolved on the rhs, but not yet inferred. | 3201 // A.a2 should now be resolved on the rhs, but not yet inferred. |
| 3184 assertVariableDeclarationTypes( | 3202 assertVariableDeclarationTypes( |
| 3185 getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); | 3203 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); |
| 3186 | 3204 |
| 3187 // B.b2 shoud be resolved on the rhs, but not yet inferred. | 3205 // B.b2 shoud be resolved on the rhs, but not yet inferred. |
| 3188 assertVariableDeclarationTypes( | 3206 assertVariableDeclarationTypes( |
| 3189 getFieldInClass(unit0, "B", "b2"), dynamicType, intType); | 3207 AstFinder.getFieldInClass(unit0, "B", "b2"), dynamicType, intType); |
| 3190 | 3208 |
| 3191 computeResult( | 3209 computeResult( |
| 3192 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT7); | 3210 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT7); |
| 3193 | 3211 |
| 3194 // A.a2 should now be fully resolved and inferred. | 3212 // A.a2 should now be fully resolved and inferred. |
| 3195 assertVariableDeclarationTypes( | 3213 assertVariableDeclarationTypes( |
| 3196 getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); | 3214 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); |
| 3197 | 3215 |
| 3198 // B.b2 should now be fully resolved and inferred. | 3216 // B.b2 should now be fully resolved and inferred. |
| 3199 assertVariableDeclarationTypes( | 3217 assertVariableDeclarationTypes( |
| 3200 getFieldInClass(unit0, "B", "b2"), intType, intType); | 3218 AstFinder.getFieldInClass(unit0, "B", "b2"), intType, intType); |
| 3201 } | 3219 } |
| 3202 } | 3220 } |
| 3203 | 3221 |
| 3204 @reflectiveTest | 3222 @reflectiveTest |
| 3205 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest { | 3223 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest { |
| 3206 test_perform() { | 3224 test_perform() { |
| 3207 Source sourceLib = newSource( | 3225 Source sourceLib = newSource( |
| 3208 '/my_lib.dart', | 3226 '/my_lib.dart', |
| 3209 ''' | 3227 ''' |
| 3210 library my_lib; | 3228 library my_lib; |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3530 AnalysisTarget source = newSource( | 3548 AnalysisTarget source = newSource( |
| 3531 '/test.dart', | 3549 '/test.dart', |
| 3532 ''' | 3550 ''' |
| 3533 var piFirst = true; | 3551 var piFirst = true; |
| 3534 var pi = piFirst ? 3.14 : tau / 2; | 3552 var pi = piFirst ? 3.14 : tau / 2; |
| 3535 var tau = piFirst ? pi * 2 : 6.28; | 3553 var tau = piFirst ? pi * 2 : 6.28; |
| 3536 '''); | 3554 '''); |
| 3537 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); | 3555 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
| 3538 CompilationUnit unit = outputs[RESOLVED_UNIT9]; | 3556 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
| 3539 VariableElement piFirst = | 3557 VariableElement piFirst = |
| 3540 getTopLevelVariable(unit, 'piFirst').name.staticElement; | 3558 AstFinder.getTopLevelVariable(unit, 'piFirst').name.staticElement; |
| 3541 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; | 3559 VariableElement pi = |
| 3542 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; | 3560 AstFinder.getTopLevelVariable(unit, 'pi').name.staticElement; |
| 3543 Expression piFirstUse = (getTopLevelVariable(unit, 'tau').initializer | 3561 VariableElement tau = |
| 3544 as ConditionalExpression).condition; | 3562 AstFinder.getTopLevelVariable(unit, 'tau').name.staticElement; |
| 3563 Expression piFirstUse = (AstFinder |
| 3564 .getTopLevelVariable(unit, 'tau') |
| 3565 .initializer as ConditionalExpression).condition; |
| 3545 | 3566 |
| 3546 expect(piFirstUse.staticType, context.typeProvider.boolType); | 3567 expect(piFirstUse.staticType, context.typeProvider.boolType); |
| 3547 expect(piFirst.type, context.typeProvider.boolType); | 3568 expect(piFirst.type, context.typeProvider.boolType); |
| 3548 expect(pi.type.isDynamic, isTrue); | 3569 expect(pi.type.isDynamic, isTrue); |
| 3549 expect(tau.type.isDynamic, isTrue); | 3570 expect(tau.type.isDynamic, isTrue); |
| 3550 } | 3571 } |
| 3551 | 3572 |
| 3552 void test_perform_inference_cross_unit_cyclic() { | 3573 void test_perform_inference_cross_unit_cyclic() { |
| 3553 AnalysisTarget firstSource = newSource( | 3574 AnalysisTarget firstSource = newSource( |
| 3554 '/a.dart', | 3575 '/a.dart', |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3575 computeResult( | 3596 computeResult( |
| 3576 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9); | 3597 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9); |
| 3577 CompilationUnit unit1 = outputs[RESOLVED_UNIT9]; | 3598 CompilationUnit unit1 = outputs[RESOLVED_UNIT9]; |
| 3578 computeResult( | 3599 computeResult( |
| 3579 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9); | 3600 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9); |
| 3580 CompilationUnit unit2 = outputs[RESOLVED_UNIT9]; | 3601 CompilationUnit unit2 = outputs[RESOLVED_UNIT9]; |
| 3581 | 3602 |
| 3582 InterfaceType intType = context.typeProvider.intType; | 3603 InterfaceType intType = context.typeProvider.intType; |
| 3583 | 3604 |
| 3584 assertVariableDeclarationTypes( | 3605 assertVariableDeclarationTypes( |
| 3585 getTopLevelVariable(unit1, "x"), intType, intType); | 3606 AstFinder.getTopLevelVariable(unit1, "x"), intType, intType); |
| 3586 assertVariableDeclarationTypes( | 3607 assertVariableDeclarationTypes( |
| 3587 getFieldInClass(unit1, "A", "x"), intType, intType); | 3608 AstFinder.getFieldInClass(unit1, "A", "x"), intType, intType); |
| 3588 | 3609 |
| 3589 assertVariableDeclarationTypes( | 3610 assertVariableDeclarationTypes( |
| 3590 getTopLevelVariable(unit2, "y"), intType, intType); | 3611 AstFinder.getTopLevelVariable(unit2, "y"), intType, intType); |
| 3591 assertVariableDeclarationTypes( | 3612 assertVariableDeclarationTypes( |
| 3592 getFieldInClass(unit2, "B", "y"), intType, intType); | 3613 AstFinder.getFieldInClass(unit2, "B", "y"), intType, intType); |
| 3593 | 3614 |
| 3594 List<Statement> statements = | 3615 List<Statement> statements = |
| 3595 getStatementsInTopLevelFunction(unit2, "test1"); | 3616 AstFinder.getStatementsInTopLevelFunction(unit2, "test1"); |
| 3596 | 3617 |
| 3597 assertAssignmentStatementTypes(statements[1], intType, intType); | 3618 assertAssignmentStatementTypes(statements[1], intType, intType); |
| 3598 assertAssignmentStatementTypes(statements[2], intType, intType); | 3619 assertAssignmentStatementTypes(statements[2], intType, intType); |
| 3599 assertAssignmentStatementTypes(statements[3], intType, intType); | 3620 assertAssignmentStatementTypes(statements[3], intType, intType); |
| 3600 assertAssignmentStatementTypes(statements[4], intType, intType); | 3621 assertAssignmentStatementTypes(statements[4], intType, intType); |
| 3601 } | 3622 } |
| 3602 | 3623 |
| 3603 // Test that local variables in method bodies are inferred appropriately | 3624 // Test that local variables in method bodies are inferred appropriately |
| 3604 void test_perform_inference_cross_unit_instance() { | 3625 void test_perform_inference_cross_unit_instance() { |
| 3605 List<Source> sources = newSources({ | 3626 List<Source> sources = newSources({ |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3625 }); | 3646 }); |
| 3626 List<dynamic> units = | 3647 List<dynamic> units = |
| 3627 computeLibraryResults(sources, RESOLVED_UNIT9).toList(); | 3648 computeLibraryResults(sources, RESOLVED_UNIT9).toList(); |
| 3628 CompilationUnit unit0 = units[0]; | 3649 CompilationUnit unit0 = units[0]; |
| 3629 CompilationUnit unit1 = units[1]; | 3650 CompilationUnit unit1 = units[1]; |
| 3630 CompilationUnit unit2 = units[2]; | 3651 CompilationUnit unit2 = units[2]; |
| 3631 | 3652 |
| 3632 InterfaceType intType = context.typeProvider.intType; | 3653 InterfaceType intType = context.typeProvider.intType; |
| 3633 | 3654 |
| 3634 assertVariableDeclarationTypes( | 3655 assertVariableDeclarationTypes( |
| 3635 getFieldInClass(unit0, "A", "a2"), intType, intType); | 3656 AstFinder.getFieldInClass(unit0, "A", "a2"), intType, intType); |
| 3636 | 3657 |
| 3637 assertVariableDeclarationTypes( | 3658 assertVariableDeclarationTypes( |
| 3638 getFieldInClass(unit1, "B", "b2"), intType, intType); | 3659 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType); |
| 3639 | 3660 |
| 3640 List<Statement> statements = | 3661 List<Statement> statements = |
| 3641 getStatementsInTopLevelFunction(unit2, "test1"); | 3662 AstFinder.getStatementsInTopLevelFunction(unit2, "test1"); |
| 3642 | 3663 |
| 3643 assertAssignmentStatementTypes(statements[1], intType, intType); | 3664 assertAssignmentStatementTypes(statements[1], intType, intType); |
| 3644 } | 3665 } |
| 3645 | 3666 |
| 3646 // Test inference interactions between local variables and fields | 3667 // Test inference interactions between local variables and fields |
| 3647 void test_perform_inference_cross_unit_instance_member() { | 3668 void test_perform_inference_cross_unit_instance_member() { |
| 3648 List<Source> sources = newSources({ | 3669 List<Source> sources = newSources({ |
| 3649 '/a.dart': ''' | 3670 '/a.dart': ''' |
| 3650 import 'b.dart'; | 3671 import 'b.dart'; |
| 3651 var bar = new B(); | 3672 var bar = new B(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3672 }); | 3693 }); |
| 3673 List<dynamic> units = | 3694 List<dynamic> units = |
| 3674 computeLibraryResults(sources, RESOLVED_UNIT9).toList(); | 3695 computeLibraryResults(sources, RESOLVED_UNIT9).toList(); |
| 3675 CompilationUnit unit0 = units[0]; | 3696 CompilationUnit unit0 = units[0]; |
| 3676 CompilationUnit unit2 = units[2]; | 3697 CompilationUnit unit2 = units[2]; |
| 3677 | 3698 |
| 3678 InterfaceType intType = context.typeProvider.intType; | 3699 InterfaceType intType = context.typeProvider.intType; |
| 3679 InterfaceType stringType = context.typeProvider.stringType; | 3700 InterfaceType stringType = context.typeProvider.stringType; |
| 3680 | 3701 |
| 3681 assertVariableDeclarationStatementTypes( | 3702 assertVariableDeclarationStatementTypes( |
| 3682 getStatementsInTopLevelFunction(unit0, "foo")[0], stringType, intType); | 3703 AstFinder.getStatementsInTopLevelFunction(unit0, "foo")[0], |
| 3704 stringType, |
| 3705 intType); |
| 3683 assertVariableDeclarationStatementTypes( | 3706 assertVariableDeclarationStatementTypes( |
| 3684 getStatementsInTopLevelFunction(unit2, "foo")[0], stringType, intType); | 3707 AstFinder.getStatementsInTopLevelFunction(unit2, "foo")[0], |
| 3708 stringType, |
| 3709 intType); |
| 3685 } | 3710 } |
| 3686 | 3711 |
| 3687 // Test inference interactions between local variables and top level | 3712 // Test inference interactions between local variables and top level |
| 3688 // variables | 3713 // variables |
| 3689 void test_perform_inference_cross_unit_non_cyclic() { | 3714 void test_perform_inference_cross_unit_non_cyclic() { |
| 3690 AnalysisTarget firstSource = newSource( | 3715 AnalysisTarget firstSource = newSource( |
| 3691 '/a.dart', | 3716 '/a.dart', |
| 3692 ''' | 3717 ''' |
| 3693 var x = 2; | 3718 var x = 2; |
| 3694 class A { static var x = 2; } | 3719 class A { static var x = 2; } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3711 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9); | 3736 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9); |
| 3712 CompilationUnit unit1 = outputs[RESOLVED_UNIT9]; | 3737 CompilationUnit unit1 = outputs[RESOLVED_UNIT9]; |
| 3713 computeResult( | 3738 computeResult( |
| 3714 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9); | 3739 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9); |
| 3715 CompilationUnit unit2 = outputs[RESOLVED_UNIT9]; | 3740 CompilationUnit unit2 = outputs[RESOLVED_UNIT9]; |
| 3716 | 3741 |
| 3717 InterfaceType intType = context.typeProvider.intType; | 3742 InterfaceType intType = context.typeProvider.intType; |
| 3718 InterfaceType stringType = context.typeProvider.stringType; | 3743 InterfaceType stringType = context.typeProvider.stringType; |
| 3719 | 3744 |
| 3720 assertVariableDeclarationTypes( | 3745 assertVariableDeclarationTypes( |
| 3721 getTopLevelVariable(unit1, "x"), intType, intType); | 3746 AstFinder.getTopLevelVariable(unit1, "x"), intType, intType); |
| 3722 assertVariableDeclarationTypes( | 3747 assertVariableDeclarationTypes( |
| 3723 getFieldInClass(unit1, "A", "x"), intType, intType); | 3748 AstFinder.getFieldInClass(unit1, "A", "x"), intType, intType); |
| 3724 | 3749 |
| 3725 assertVariableDeclarationTypes( | 3750 assertVariableDeclarationTypes( |
| 3726 getTopLevelVariable(unit2, "y"), intType, intType); | 3751 AstFinder.getTopLevelVariable(unit2, "y"), intType, intType); |
| 3727 assertVariableDeclarationTypes( | 3752 assertVariableDeclarationTypes( |
| 3728 getFieldInClass(unit2, "B", "y"), intType, intType); | 3753 AstFinder.getFieldInClass(unit2, "B", "y"), intType, intType); |
| 3729 | 3754 |
| 3730 List<Statement> statements = | 3755 List<Statement> statements = |
| 3731 getStatementsInTopLevelFunction(unit2, "test1"); | 3756 AstFinder.getStatementsInTopLevelFunction(unit2, "test1"); |
| 3732 | 3757 |
| 3733 assertAssignmentStatementTypes(statements[0], intType, stringType); | 3758 assertAssignmentStatementTypes(statements[0], intType, stringType); |
| 3734 assertAssignmentStatementTypes(statements[1], intType, stringType); | 3759 assertAssignmentStatementTypes(statements[1], intType, stringType); |
| 3735 } | 3760 } |
| 3736 | 3761 |
| 3737 // Test that inference does not propagate from null | 3762 // Test that inference does not propagate from null |
| 3738 void test_perform_inference_cross_unit_static_instance() { | 3763 void test_perform_inference_cross_unit_static_instance() { |
| 3739 List<Source> sources = newSources({ | 3764 List<Source> sources = newSources({ |
| 3740 '/a.dart': ''' | 3765 '/a.dart': ''' |
| 3741 import 'b.dart'; | 3766 import 'b.dart'; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3763 }); | 3788 }); |
| 3764 List<dynamic> units = | 3789 List<dynamic> units = |
| 3765 computeLibraryResults(sources, RESOLVED_UNIT9).toList(); | 3790 computeLibraryResults(sources, RESOLVED_UNIT9).toList(); |
| 3766 CompilationUnit unit0 = units[0]; | 3791 CompilationUnit unit0 = units[0]; |
| 3767 CompilationUnit unit1 = units[1]; | 3792 CompilationUnit unit1 = units[1]; |
| 3768 CompilationUnit unit2 = units[2]; | 3793 CompilationUnit unit2 = units[2]; |
| 3769 | 3794 |
| 3770 InterfaceType intType = context.typeProvider.intType; | 3795 InterfaceType intType = context.typeProvider.intType; |
| 3771 | 3796 |
| 3772 assertVariableDeclarationTypes( | 3797 assertVariableDeclarationTypes( |
| 3773 getFieldInClass(unit0, "A", "a1"), intType, intType); | 3798 AstFinder.getFieldInClass(unit0, "A", "a1"), intType, intType); |
| 3774 assertVariableDeclarationTypes( | 3799 assertVariableDeclarationTypes( |
| 3775 getFieldInClass(unit0, "A", "a2"), intType, intType); | 3800 AstFinder.getFieldInClass(unit0, "A", "a2"), intType, intType); |
| 3776 | 3801 |
| 3777 assertVariableDeclarationTypes( | 3802 assertVariableDeclarationTypes( |
| 3778 getFieldInClass(unit1, "B", "b1"), intType, intType); | 3803 AstFinder.getFieldInClass(unit1, "B", "b1"), intType, intType); |
| 3779 assertVariableDeclarationTypes( | 3804 assertVariableDeclarationTypes( |
| 3780 getFieldInClass(unit1, "B", "b2"), intType, intType); | 3805 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType); |
| 3781 | 3806 |
| 3782 List<Statement> statements = | 3807 List<Statement> statements = |
| 3783 getStatementsInTopLevelFunction(unit2, "test1"); | 3808 AstFinder.getStatementsInTopLevelFunction(unit2, "test1"); |
| 3784 | 3809 |
| 3785 assertAssignmentStatementTypes(statements[1], intType, intType); | 3810 assertAssignmentStatementTypes(statements[1], intType, intType); |
| 3786 assertAssignmentStatementTypes(statements[2], intType, intType); | 3811 assertAssignmentStatementTypes(statements[2], intType, intType); |
| 3787 } | 3812 } |
| 3788 | 3813 |
| 3789 // Test inference across units (non-cyclic) | 3814 // Test inference across units (non-cyclic) |
| 3790 void test_perform_inference_local_variables() { | 3815 void test_perform_inference_local_variables() { |
| 3791 AnalysisTarget source = newSource( | 3816 AnalysisTarget source = newSource( |
| 3792 '/test.dart', | 3817 '/test.dart', |
| 3793 ''' | 3818 ''' |
| 3794 test() { | 3819 test() { |
| 3795 int x = 3; | 3820 int x = 3; |
| 3796 x = "hi"; | 3821 x = "hi"; |
| 3797 var y = 3; | 3822 var y = 3; |
| 3798 y = "hi"; | 3823 y = "hi"; |
| 3799 } | 3824 } |
| 3800 '''); | 3825 '''); |
| 3801 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); | 3826 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
| 3802 CompilationUnit unit = outputs[RESOLVED_UNIT9]; | 3827 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
| 3803 | 3828 |
| 3804 InterfaceType intType = context.typeProvider.intType; | 3829 InterfaceType intType = context.typeProvider.intType; |
| 3805 InterfaceType stringType = context.typeProvider.stringType; | 3830 InterfaceType stringType = context.typeProvider.stringType; |
| 3806 | 3831 |
| 3807 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); | 3832 List<Statement> statements = |
| 3833 AstFinder.getStatementsInTopLevelFunction(unit, "test"); |
| 3808 | 3834 |
| 3809 assertVariableDeclarationStatementTypes(statements[0], intType, intType); | 3835 assertVariableDeclarationStatementTypes(statements[0], intType, intType); |
| 3810 assertAssignmentStatementTypes(statements[1], intType, stringType); | 3836 assertAssignmentStatementTypes(statements[1], intType, stringType); |
| 3811 assertVariableDeclarationStatementTypes(statements[2], intType, intType); | 3837 assertVariableDeclarationStatementTypes(statements[2], intType, intType); |
| 3812 assertAssignmentStatementTypes(statements[3], intType, stringType); | 3838 assertAssignmentStatementTypes(statements[3], intType, stringType); |
| 3813 } | 3839 } |
| 3814 | 3840 |
| 3815 // Test inference across units (cyclic) | 3841 // Test inference across units (cyclic) |
| 3816 void test_perform_inference_local_variables_fields() { | 3842 void test_perform_inference_local_variables_fields() { |
| 3817 AnalysisTarget source = newSource( | 3843 AnalysisTarget source = newSource( |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3835 int y; // field def after use | 3861 int y; // field def after use |
| 3836 final z = 42; // should infer `int` | 3862 final z = 42; // should infer `int` |
| 3837 } | 3863 } |
| 3838 '''); | 3864 '''); |
| 3839 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); | 3865 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
| 3840 CompilationUnit unit = outputs[RESOLVED_UNIT9]; | 3866 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
| 3841 | 3867 |
| 3842 InterfaceType intType = context.typeProvider.intType; | 3868 InterfaceType intType = context.typeProvider.intType; |
| 3843 InterfaceType stringType = context.typeProvider.stringType; | 3869 InterfaceType stringType = context.typeProvider.stringType; |
| 3844 | 3870 |
| 3845 List<Statement> statements = getStatementsInMethod(unit, "A", "test1"); | 3871 List<Statement> statements = |
| 3872 AstFinder.getStatementsInMethod(unit, "A", "test1"); |
| 3846 | 3873 |
| 3847 assertVariableDeclarationStatementTypes(statements[0], intType, intType); | 3874 assertVariableDeclarationStatementTypes(statements[0], intType, intType); |
| 3848 assertAssignmentStatementTypes(statements[1], intType, stringType); | 3875 assertAssignmentStatementTypes(statements[1], intType, stringType); |
| 3849 assertAssignmentStatementTypes(statements[2], intType, intType); | 3876 assertAssignmentStatementTypes(statements[2], intType, intType); |
| 3850 | 3877 |
| 3851 assertVariableDeclarationStatementTypes(statements[3], intType, intType); | 3878 assertVariableDeclarationStatementTypes(statements[3], intType, intType); |
| 3852 assertAssignmentStatementTypes(statements[4], intType, stringType); | 3879 assertAssignmentStatementTypes(statements[4], intType, stringType); |
| 3853 assertAssignmentStatementTypes(statements[5], intType, intType); | 3880 assertAssignmentStatementTypes(statements[5], intType, intType); |
| 3854 | 3881 |
| 3855 assertVariableDeclarationStatementTypes(statements[6], intType, intType); | 3882 assertVariableDeclarationStatementTypes(statements[6], intType, intType); |
| 3856 assertAssignmentStatementTypes(statements[7], intType, stringType); | 3883 assertAssignmentStatementTypes(statements[7], intType, stringType); |
| 3857 assertAssignmentStatementTypes(statements[8], intType, intType); | 3884 assertAssignmentStatementTypes(statements[8], intType, intType); |
| 3858 | 3885 |
| 3859 assertVariableDeclarationTypes( | 3886 assertVariableDeclarationTypes( |
| 3860 getFieldInClass(unit, "A", "x"), intType, intType); | 3887 AstFinder.getFieldInClass(unit, "A", "x"), intType, intType); |
| 3861 assertVariableDeclarationTypes( | 3888 assertVariableDeclarationTypes( |
| 3862 getFieldInClass(unit, "A", "z"), intType, intType); | 3889 AstFinder.getFieldInClass(unit, "A", "z"), intType, intType); |
| 3863 } | 3890 } |
| 3864 | 3891 |
| 3865 // Test inference of instance fields across units | 3892 // Test inference of instance fields across units |
| 3866 void test_perform_inference_local_variables_topLevel() { | 3893 void test_perform_inference_local_variables_topLevel() { |
| 3867 AnalysisTarget source = newSource( | 3894 AnalysisTarget source = newSource( |
| 3868 '/test.dart', | 3895 '/test.dart', |
| 3869 ''' | 3896 ''' |
| 3870 int x = 0; | 3897 int x = 0; |
| 3871 | 3898 |
| 3872 test1() { | 3899 test1() { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 3883 | 3910 |
| 3884 int y = 0; // field def after use | 3911 int y = 0; // field def after use |
| 3885 final z = 42; // should infer `int` | 3912 final z = 42; // should infer `int` |
| 3886 '''); | 3913 '''); |
| 3887 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); | 3914 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
| 3888 CompilationUnit unit = outputs[RESOLVED_UNIT9]; | 3915 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
| 3889 | 3916 |
| 3890 InterfaceType intType = context.typeProvider.intType; | 3917 InterfaceType intType = context.typeProvider.intType; |
| 3891 InterfaceType stringType = context.typeProvider.stringType; | 3918 InterfaceType stringType = context.typeProvider.stringType; |
| 3892 | 3919 |
| 3893 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test1"); | 3920 List<Statement> statements = |
| 3921 AstFinder.getStatementsInTopLevelFunction(unit, "test1"); |
| 3894 | 3922 |
| 3895 assertVariableDeclarationStatementTypes(statements[0], intType, intType); | 3923 assertVariableDeclarationStatementTypes(statements[0], intType, intType); |
| 3896 assertAssignmentStatementTypes(statements[1], intType, stringType); | 3924 assertAssignmentStatementTypes(statements[1], intType, stringType); |
| 3897 assertAssignmentStatementTypes(statements[2], intType, intType); | 3925 assertAssignmentStatementTypes(statements[2], intType, intType); |
| 3898 | 3926 |
| 3899 assertVariableDeclarationStatementTypes(statements[3], intType, intType); | 3927 assertVariableDeclarationStatementTypes(statements[3], intType, intType); |
| 3900 assertAssignmentStatementTypes(statements[4], intType, stringType); | 3928 assertAssignmentStatementTypes(statements[4], intType, stringType); |
| 3901 assertAssignmentStatementTypes(statements[5], intType, intType); | 3929 assertAssignmentStatementTypes(statements[5], intType, intType); |
| 3902 | 3930 |
| 3903 assertVariableDeclarationStatementTypes(statements[6], intType, intType); | 3931 assertVariableDeclarationStatementTypes(statements[6], intType, intType); |
| 3904 assertAssignmentStatementTypes(statements[7], intType, stringType); | 3932 assertAssignmentStatementTypes(statements[7], intType, stringType); |
| 3905 assertAssignmentStatementTypes(statements[8], intType, intType); | 3933 assertAssignmentStatementTypes(statements[8], intType, intType); |
| 3906 | 3934 |
| 3907 assertVariableDeclarationTypes( | 3935 assertVariableDeclarationTypes( |
| 3908 getTopLevelVariable(unit, "x"), intType, intType); | 3936 AstFinder.getTopLevelVariable(unit, "x"), intType, intType); |
| 3909 assertVariableDeclarationTypes( | 3937 assertVariableDeclarationTypes( |
| 3910 getTopLevelVariable(unit, "y"), intType, intType); | 3938 AstFinder.getTopLevelVariable(unit, "y"), intType, intType); |
| 3911 assertVariableDeclarationTypes( | 3939 assertVariableDeclarationTypes( |
| 3912 getTopLevelVariable(unit, "z"), intType, intType); | 3940 AstFinder.getTopLevelVariable(unit, "z"), intType, intType); |
| 3913 } | 3941 } |
| 3914 | 3942 |
| 3915 // Test inference between static and instance fields | 3943 // Test inference between static and instance fields |
| 3916 void test_perform_inference_null() { | 3944 void test_perform_inference_null() { |
| 3917 AnalysisTarget source = newSource( | 3945 AnalysisTarget source = newSource( |
| 3918 '/test.dart', | 3946 '/test.dart', |
| 3919 ''' | 3947 ''' |
| 3920 var x = null; | 3948 var x = null; |
| 3921 var y = 3; | 3949 var y = 3; |
| 3922 class A { | 3950 class A { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 3938 '''); | 3966 '''); |
| 3939 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); | 3967 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
| 3940 CompilationUnit unit = outputs[RESOLVED_UNIT9]; | 3968 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
| 3941 | 3969 |
| 3942 InterfaceType intType = context.typeProvider.intType; | 3970 InterfaceType intType = context.typeProvider.intType; |
| 3943 InterfaceType stringType = context.typeProvider.stringType; | 3971 InterfaceType stringType = context.typeProvider.stringType; |
| 3944 DartType bottomType = context.typeProvider.bottomType; | 3972 DartType bottomType = context.typeProvider.bottomType; |
| 3945 DartType dynamicType = context.typeProvider.dynamicType; | 3973 DartType dynamicType = context.typeProvider.dynamicType; |
| 3946 | 3974 |
| 3947 assertVariableDeclarationTypes( | 3975 assertVariableDeclarationTypes( |
| 3948 getTopLevelVariable(unit, "x"), dynamicType, bottomType); | 3976 AstFinder.getTopLevelVariable(unit, "x"), dynamicType, bottomType); |
| 3949 assertVariableDeclarationTypes( | 3977 assertVariableDeclarationTypes( |
| 3950 getTopLevelVariable(unit, "y"), intType, intType); | 3978 AstFinder.getTopLevelVariable(unit, "y"), intType, intType); |
| 3951 assertVariableDeclarationTypes( | 3979 assertVariableDeclarationTypes( |
| 3952 getFieldInClass(unit, "A", "x"), dynamicType, bottomType); | 3980 AstFinder.getFieldInClass(unit, "A", "x"), dynamicType, bottomType); |
| 3953 assertVariableDeclarationTypes( | 3981 assertVariableDeclarationTypes( |
| 3954 getFieldInClass(unit, "A", "y"), intType, intType); | 3982 AstFinder.getFieldInClass(unit, "A", "y"), intType, intType); |
| 3955 assertVariableDeclarationTypes( | 3983 assertVariableDeclarationTypes( |
| 3956 getFieldInClass(unit, "A", "x2"), dynamicType, bottomType); | 3984 AstFinder.getFieldInClass(unit, "A", "x2"), dynamicType, bottomType); |
| 3957 assertVariableDeclarationTypes( | 3985 assertVariableDeclarationTypes( |
| 3958 getFieldInClass(unit, "A", "y2"), intType, intType); | 3986 AstFinder.getFieldInClass(unit, "A", "y2"), intType, intType); |
| 3959 | 3987 |
| 3960 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); | 3988 List<Statement> statements = |
| 3989 AstFinder.getStatementsInTopLevelFunction(unit, "test"); |
| 3961 | 3990 |
| 3962 assertAssignmentStatementTypes(statements[0], dynamicType, stringType); | 3991 assertAssignmentStatementTypes(statements[0], dynamicType, stringType); |
| 3963 assertAssignmentStatementTypes(statements[1], intType, stringType); | 3992 assertAssignmentStatementTypes(statements[1], intType, stringType); |
| 3964 assertAssignmentStatementTypes(statements[2], dynamicType, stringType); | 3993 assertAssignmentStatementTypes(statements[2], dynamicType, stringType); |
| 3965 assertAssignmentStatementTypes(statements[3], intType, stringType); | 3994 assertAssignmentStatementTypes(statements[3], intType, stringType); |
| 3966 assertAssignmentStatementTypes(statements[4], dynamicType, stringType); | 3995 assertAssignmentStatementTypes(statements[4], dynamicType, stringType); |
| 3967 assertAssignmentStatementTypes(statements[5], intType, stringType); | 3996 assertAssignmentStatementTypes(statements[5], intType, stringType); |
| 3968 } | 3997 } |
| 3969 | 3998 |
| 3970 // Test inference between fields and method bodies | 3999 // Test inference between fields and method bodies |
| 3971 void test_perform_local_explicit_disabled() { | 4000 void test_perform_local_explicit_disabled() { |
| 3972 AnalysisTarget source = newSource( | 4001 AnalysisTarget source = newSource( |
| 3973 '/test.dart', | 4002 '/test.dart', |
| 3974 ''' | 4003 ''' |
| 3975 test() { | 4004 test() { |
| 3976 int x = 3; | 4005 int x = 3; |
| 3977 x = "hi"; | 4006 x = "hi"; |
| 3978 } | 4007 } |
| 3979 '''); | 4008 '''); |
| 3980 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); | 4009 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
| 3981 CompilationUnit unit = outputs[RESOLVED_UNIT9]; | 4010 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
| 3982 | 4011 |
| 3983 InterfaceType intType = context.typeProvider.intType; | 4012 InterfaceType intType = context.typeProvider.intType; |
| 3984 InterfaceType stringType = context.typeProvider.stringType; | 4013 InterfaceType stringType = context.typeProvider.stringType; |
| 3985 | 4014 |
| 3986 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); | 4015 List<Statement> statements = |
| 4016 AstFinder.getStatementsInTopLevelFunction(unit, "test"); |
| 3987 VariableDeclaration decl = | 4017 VariableDeclaration decl = |
| 3988 (statements[0] as VariableDeclarationStatement).variables.variables[0]; | 4018 (statements[0] as VariableDeclarationStatement).variables.variables[0]; |
| 3989 expect(decl.element.type, intType); | 4019 expect(decl.element.type, intType); |
| 3990 expect(decl.initializer.staticType, intType); | 4020 expect(decl.initializer.staticType, intType); |
| 3991 | 4021 |
| 3992 ExpressionStatement statement = statements[1]; | 4022 ExpressionStatement statement = statements[1]; |
| 3993 AssignmentExpression assgn = statement.expression; | 4023 AssignmentExpression assgn = statement.expression; |
| 3994 expect(assgn.leftHandSide.staticType, intType); | 4024 expect(assgn.leftHandSide.staticType, intType); |
| 3995 expect(assgn.rightHandSide.staticType, stringType); | 4025 expect(assgn.rightHandSide.staticType, stringType); |
| 3996 } | 4026 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 4014 a[0]; | 4044 a[0]; |
| 4015 } | 4045 } |
| 4016 '''); | 4046 '''); |
| 4017 computeResult(new LibrarySpecificUnit(source, source), STRONG_MODE_ERRORS); | 4047 computeResult(new LibrarySpecificUnit(source, source), STRONG_MODE_ERRORS); |
| 4018 CompilationUnit unit = outputs[RESOLVED_UNIT]; | 4048 CompilationUnit unit = outputs[RESOLVED_UNIT]; |
| 4019 | 4049 |
| 4020 // validate | 4050 // validate |
| 4021 _fillErrorListener(STRONG_MODE_ERRORS); | 4051 _fillErrorListener(STRONG_MODE_ERRORS); |
| 4022 expect(errorListener.errors, isEmpty); | 4052 expect(errorListener.errors, isEmpty); |
| 4023 | 4053 |
| 4024 List<Statement> statements = getStatementsInTopLevelFunction(unit, "main"); | 4054 List<Statement> statements = |
| 4055 AstFinder.getStatementsInTopLevelFunction(unit, "main"); |
| 4025 ExpressionStatement statement = statements[1]; | 4056 ExpressionStatement statement = statements[1]; |
| 4026 IndexExpression idx = statement.expression; | 4057 IndexExpression idx = statement.expression; |
| 4027 expect(DynamicInvoke.get(idx.target), isNotNull); | 4058 expect(DynamicInvoke.get(idx.target), isNotNull); |
| 4028 expect(DynamicInvoke.get(idx.target), isNotNull); | 4059 expect(DynamicInvoke.get(idx.target), isNotNull); |
| 4029 expect(DynamicInvoke.get(idx.target), isTrue); | 4060 expect(DynamicInvoke.get(idx.target), isTrue); |
| 4030 } | 4061 } |
| 4031 | 4062 |
| 4032 void test_perform_verifyError() { | 4063 void test_perform_verifyError() { |
| 4033 enableStrongMode(); | 4064 enableStrongMode(); |
| 4034 AnalysisTarget source = newSource( | 4065 AnalysisTarget source = newSource( |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4207 | 4238 |
| 4208 /** | 4239 /** |
| 4209 * Enable strong mode in the current analysis context. | 4240 * Enable strong mode in the current analysis context. |
| 4210 */ | 4241 */ |
| 4211 void enableStrongMode() { | 4242 void enableStrongMode() { |
| 4212 AnalysisOptionsImpl options = context.analysisOptions; | 4243 AnalysisOptionsImpl options = context.analysisOptions; |
| 4213 options.strongMode = true; | 4244 options.strongMode = true; |
| 4214 context.analysisOptions = options; | 4245 context.analysisOptions = options; |
| 4215 } | 4246 } |
| 4216 | 4247 |
| 4217 /** | |
| 4218 * Return the declaration of the class with the given [className] in the given | |
| 4219 * compilation [unit]. | |
| 4220 */ | |
| 4221 ClassDeclaration getClass(CompilationUnit unit, String className) { | |
| 4222 NodeList<CompilationUnitMember> unitMembers = unit.declarations; | |
| 4223 for (CompilationUnitMember unitMember in unitMembers) { | |
| 4224 if (unitMember is ClassDeclaration && unitMember.name.name == className) { | |
| 4225 return unitMember; | |
| 4226 } | |
| 4227 } | |
| 4228 fail('No class named $className in ${unit.element.source}'); | |
| 4229 return null; | |
| 4230 } | |
| 4231 | |
| 4232 /** | |
| 4233 * Return the declaration of the field with the given [fieldName] in the class | |
| 4234 * with the given [className] in the given compilation [unit]. | |
| 4235 */ | |
| 4236 VariableDeclaration getFieldInClass( | |
| 4237 CompilationUnit unit, String className, String fieldName) { | |
| 4238 ClassDeclaration unitMember = getClass(unit, className); | |
| 4239 NodeList<ClassMember> classMembers = unitMember.members; | |
| 4240 for (ClassMember classMember in classMembers) { | |
| 4241 if (classMember is FieldDeclaration) { | |
| 4242 NodeList<VariableDeclaration> fields = classMember.fields.variables; | |
| 4243 for (VariableDeclaration field in fields) { | |
| 4244 if (field.name.name == fieldName) { | |
| 4245 return field; | |
| 4246 } | |
| 4247 } | |
| 4248 } | |
| 4249 } | |
| 4250 fail('No field named $fieldName in $className'); | |
| 4251 return null; | |
| 4252 } | |
| 4253 | |
| 4254 /** | |
| 4255 * Return the declaration of the method with the given [methodName] in the | |
| 4256 * class with the given [className] in the given compilation [unit]. | |
| 4257 */ | |
| 4258 MethodDeclaration getMethodInClass( | |
| 4259 CompilationUnit unit, String className, String methodName) { | |
| 4260 ClassDeclaration unitMember = getClass(unit, className); | |
| 4261 NodeList<ClassMember> classMembers = unitMember.members; | |
| 4262 for (ClassMember classMember in classMembers) { | |
| 4263 if (classMember is MethodDeclaration) { | |
| 4264 if (classMember.name.name == methodName) { | |
| 4265 return classMember; | |
| 4266 } | |
| 4267 } | |
| 4268 } | |
| 4269 fail('No method named $methodName in $className'); | |
| 4270 return null; | |
| 4271 } | |
| 4272 | |
| 4273 List<Statement> getStatementsInMethod( | |
| 4274 CompilationUnit unit, String className, String methodName) { | |
| 4275 MethodDeclaration method = getMethodInClass(unit, className, methodName); | |
| 4276 BlockFunctionBody body = method.body; | |
| 4277 return body.block.statements; | |
| 4278 } | |
| 4279 | |
| 4280 List<Statement> getStatementsInTopLevelFunction( | |
| 4281 CompilationUnit unit, String functionName) { | |
| 4282 FunctionDeclaration function = getTopLevelFunction(unit, functionName); | |
| 4283 BlockFunctionBody body = function.functionExpression.body; | |
| 4284 return body.block.statements; | |
| 4285 } | |
| 4286 | |
| 4287 /** | |
| 4288 * Return the declaration of the top-level function with the given | |
| 4289 * [functionName] in the given compilation [unit]. | |
| 4290 */ | |
| 4291 FunctionDeclaration getTopLevelFunction( | |
| 4292 CompilationUnit unit, String functionName) { | |
| 4293 NodeList<CompilationUnitMember> unitMembers = unit.declarations; | |
| 4294 for (CompilationUnitMember unitMember in unitMembers) { | |
| 4295 if (unitMember is FunctionDeclaration) { | |
| 4296 if (unitMember.name.name == functionName) { | |
| 4297 return unitMember; | |
| 4298 } | |
| 4299 } | |
| 4300 } | |
| 4301 return null; | |
| 4302 } | |
| 4303 | |
| 4304 /** | |
| 4305 * Return the declaration of the top-level variable with the given | |
| 4306 * [variableName] in the given compilation [unit]. | |
| 4307 */ | |
| 4308 VariableDeclaration getTopLevelVariable( | |
| 4309 CompilationUnit unit, String variableName) { | |
| 4310 NodeList<CompilationUnitMember> unitMembers = unit.declarations; | |
| 4311 for (CompilationUnitMember unitMember in unitMembers) { | |
| 4312 if (unitMember is TopLevelVariableDeclaration) { | |
| 4313 NodeList<VariableDeclaration> variables = | |
| 4314 unitMember.variables.variables; | |
| 4315 for (VariableDeclaration variable in variables) { | |
| 4316 if (variable.name.name == variableName) { | |
| 4317 return variable; | |
| 4318 } | |
| 4319 } | |
| 4320 } | |
| 4321 } | |
| 4322 return null; | |
| 4323 } | |
| 4324 | |
| 4325 void setUp() { | 4248 void setUp() { |
| 4326 super.setUp(); | 4249 super.setUp(); |
| 4327 emptySource = newSource('/test.dart'); | 4250 emptySource = newSource('/test.dart'); |
| 4328 } | 4251 } |
| 4329 | 4252 |
| 4330 /** | 4253 /** |
| 4331 * Fill [errorListener] with [result] errors in the current [task]. | 4254 * Fill [errorListener] with [result] errors in the current [task]. |
| 4332 */ | 4255 */ |
| 4333 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { | 4256 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { |
| 4334 List<AnalysisError> errors = task.outputs[result]; | 4257 List<AnalysisError> errors = task.outputs[result]; |
| 4335 expect(errors, isNotNull, reason: result.name); | 4258 expect(errors, isNotNull, reason: result.name); |
| 4336 errorListener = new GatheringErrorListener(); | 4259 errorListener = new GatheringErrorListener(); |
| 4337 errorListener.addAll(errors); | 4260 errorListener.addAll(errors); |
| 4338 } | 4261 } |
| 4339 } | 4262 } |
| OLD | NEW |