Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Side by Side Diff: pkg/analyzer/test/src/task/dart_test.dart

Issue 1462133005: Downwards inference. This adds support to the resolver for downwards (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address comments 2 Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 1266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 1277
1278 void _checkCircularities( 1278 void _checkCircularities(
1279 String variableName, List<String> otherVariables, String content) { 1279 String variableName, List<String> otherVariables, String content) {
1280 // Evaluating the first constant should produce an error. 1280 // Evaluating the first constant should produce an error.
1281 CompilationUnit unit = _resolveUnit(content); 1281 CompilationUnit unit = _resolveUnit(content);
1282 _expectCircularityError(_evaluateConstant(unit, variableName)); 1282 _expectCircularityError(_evaluateConstant(unit, variableName));
1283 // And all the other constants involved in the strongly connected component 1283 // And all the other constants involved in the strongly connected component
1284 // should be set to the same error state. 1284 // should be set to the same error state.
1285 for (String otherVariableName in otherVariables) { 1285 for (String otherVariableName in otherVariables) {
1286 PropertyInducingElement otherVariableElement = 1286 PropertyInducingElement otherVariableElement =
1287 getTopLevelVariableElement(unit, otherVariableName); 1287 AstFinder.getTopLevelVariableElement(unit, otherVariableName);
1288 _expectCircularityError((otherVariableElement 1288 _expectCircularityError((otherVariableElement
1289 as TopLevelVariableElementImpl).evaluationResult); 1289 as TopLevelVariableElementImpl).evaluationResult);
1290 } 1290 }
1291 } 1291 }
1292 1292
1293 EvaluationResultImpl _computeTopLevelVariableConstValue( 1293 EvaluationResultImpl _computeTopLevelVariableConstValue(
1294 String variableName, String content) { 1294 String variableName, String content) {
1295 return _evaluateConstant(_resolveUnit(content), variableName); 1295 return _evaluateConstant(_resolveUnit(content), variableName);
1296 } 1296 }
1297 1297
1298 EvaluationResultImpl _evaluateConstant( 1298 EvaluationResultImpl _evaluateConstant(
1299 CompilationUnit unit, String variableName) { 1299 CompilationUnit unit, String variableName) {
1300 // Find the element for the given constant. 1300 // Find the element for the given constant.
1301 PropertyInducingElement variableElement = 1301 PropertyInducingElement variableElement =
1302 getTopLevelVariableElement(unit, variableName); 1302 AstFinder.getTopLevelVariableElement(unit, variableName);
1303 // Now compute the value of the constant. 1303 // Now compute the value of the constant.
1304 computeResult(variableElement, CONSTANT_VALUE, 1304 computeResult(variableElement, CONSTANT_VALUE,
1305 matcher: isComputeConstantValueTask); 1305 matcher: isComputeConstantValueTask);
1306 expect(outputs[CONSTANT_VALUE], same(variableElement)); 1306 expect(outputs[CONSTANT_VALUE], same(variableElement));
1307 EvaluationResultImpl evaluationResult = 1307 EvaluationResultImpl evaluationResult =
1308 (variableElement as TopLevelVariableElementImpl).evaluationResult; 1308 (variableElement as TopLevelVariableElementImpl).evaluationResult;
1309 return evaluationResult; 1309 return evaluationResult;
1310 } 1310 }
1311 1311
1312 void _expectCircularityError(EvaluationResultImpl evaluationResult) { 1312 void _expectCircularityError(EvaluationResultImpl evaluationResult) {
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 class B { 1780 class B {
1781 static const b1 = 1; 1781 static const b1 = 1;
1782 static final b2 = 2; 1782 static final b2 = 2;
1783 static final b3; 1783 static final b3;
1784 static var b4 = 4; 1784 static var b4 = 4;
1785 } 1785 }
1786 '''); 1786 ''');
1787 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); 1787 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source);
1788 computeResult(target, RESOLVED_UNIT5); 1788 computeResult(target, RESOLVED_UNIT5);
1789 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 1789 CompilationUnit unit = outputs[RESOLVED_UNIT5];
1790 FieldElement elementA = getFieldInClassElement(unit, 'A', 'a'); 1790 FieldElement elementA = AstFinder.getFieldInClassElement(unit, 'A', 'a');
1791 // compute 1791 // compute
1792 computeResult(elementA, PROPAGABLE_VARIABLE_DEPENDENCIES, 1792 computeResult(elementA, PROPAGABLE_VARIABLE_DEPENDENCIES,
1793 matcher: isComputePropagableVariableDependenciesTask); 1793 matcher: isComputePropagableVariableDependenciesTask);
1794 // verify 1794 // verify
1795 expect(outputs, hasLength(1)); 1795 expect(outputs, hasLength(1));
1796 List<VariableElement> dependencies = 1796 List<VariableElement> dependencies =
1797 outputs[PROPAGABLE_VARIABLE_DEPENDENCIES]; 1797 outputs[PROPAGABLE_VARIABLE_DEPENDENCIES];
1798 expect( 1798 expect(
1799 dependencies, 1799 dependencies,
1800 unorderedEquals([ 1800 unorderedEquals([
1801 getFieldInClassElement(unit, 'A', 'a1'), 1801 AstFinder.getFieldInClassElement(unit, 'A', 'a1'),
1802 getFieldInClassElement(unit, 'A', 'a2'), 1802 AstFinder.getFieldInClassElement(unit, 'A', 'a2'),
1803 getFieldInClassElement(unit, 'B', 'b1'), 1803 AstFinder.getFieldInClassElement(unit, 'B', 'b1'),
1804 getFieldInClassElement(unit, 'B', 'b2') 1804 AstFinder.getFieldInClassElement(unit, 'B', 'b2')
1805 ])); 1805 ]));
1806 } 1806 }
1807 1807
1808 test_perform_topLevel() { 1808 test_perform_topLevel() {
1809 AnalysisTarget source = newSource( 1809 AnalysisTarget source = newSource(
1810 '/test.dart', 1810 '/test.dart',
1811 ''' 1811 '''
1812 const a = d1 + d2 + d3 + d4; 1812 const a = d1 + d2 + d3 + d4;
1813 const d1 = 1; 1813 const d1 = 1;
1814 final d2 = 2; 1814 final d2 = 2;
1815 final d3; 1815 final d3;
1816 var d4 = 4; 1816 var d4 = 4;
1817 '''); 1817 ''');
1818 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); 1818 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source);
1819 computeResult(target, RESOLVED_UNIT5); 1819 computeResult(target, RESOLVED_UNIT5);
1820 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 1820 CompilationUnit unit = outputs[RESOLVED_UNIT5];
1821 TopLevelVariableElement elementA = getTopLevelVariableElement(unit, 'a'); 1821 TopLevelVariableElement elementA =
1822 AstFinder.getTopLevelVariableElement(unit, 'a');
1822 // compute 1823 // compute
1823 computeResult(elementA, PROPAGABLE_VARIABLE_DEPENDENCIES, 1824 computeResult(elementA, PROPAGABLE_VARIABLE_DEPENDENCIES,
1824 matcher: isComputePropagableVariableDependenciesTask); 1825 matcher: isComputePropagableVariableDependenciesTask);
1825 // verify 1826 // verify
1826 expect(outputs, hasLength(1)); 1827 expect(outputs, hasLength(1));
1827 List<VariableElement> dependencies = 1828 List<VariableElement> dependencies =
1828 outputs[PROPAGABLE_VARIABLE_DEPENDENCIES]; 1829 outputs[PROPAGABLE_VARIABLE_DEPENDENCIES];
1829 expect( 1830 expect(
1830 dependencies, 1831 dependencies,
1831 unorderedEquals([ 1832 unorderedEquals([
1832 getTopLevelVariableElement(unit, 'd1'), 1833 AstFinder.getTopLevelVariableElement(unit, 'd1'),
1833 getTopLevelVariableElement(unit, 'd2') 1834 AstFinder.getTopLevelVariableElement(unit, 'd2')
1834 ])); 1835 ]));
1835 } 1836 }
1836 1837
1837 test_perform_topLevel_ignoreLocal() { 1838 test_perform_topLevel_ignoreLocal() {
1838 AnalysisTarget source = newSource( 1839 AnalysisTarget source = newSource(
1839 '/test.dart', 1840 '/test.dart',
1840 ''' 1841 '''
1841 final a = () { 1842 final a = () {
1842 const b = 2; 1843 const b = 2;
1843 const c = 3; 1844 const c = 3;
1844 return b + c; 1845 return b + c;
1845 }() + d; 1846 }() + d;
1846 final d = 4; 1847 final d = 4;
1847 '''); 1848 ''');
1848 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); 1849 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source);
1849 computeResult(target, RESOLVED_UNIT5); 1850 computeResult(target, RESOLVED_UNIT5);
1850 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 1851 CompilationUnit unit = outputs[RESOLVED_UNIT5];
1851 TopLevelVariableElement elementA = getTopLevelVariableElement(unit, 'a'); 1852 TopLevelVariableElement elementA =
1853 AstFinder.getTopLevelVariableElement(unit, 'a');
1852 // compute 1854 // compute
1853 computeResult(elementA, PROPAGABLE_VARIABLE_DEPENDENCIES, 1855 computeResult(elementA, PROPAGABLE_VARIABLE_DEPENDENCIES,
1854 matcher: isComputePropagableVariableDependenciesTask); 1856 matcher: isComputePropagableVariableDependenciesTask);
1855 // verify 1857 // verify
1856 expect(outputs, hasLength(1)); 1858 expect(outputs, hasLength(1));
1857 List<VariableElement> dependencies = 1859 List<VariableElement> dependencies =
1858 outputs[PROPAGABLE_VARIABLE_DEPENDENCIES]; 1860 outputs[PROPAGABLE_VARIABLE_DEPENDENCIES];
1859 expect( 1861 expect(dependencies,
1860 dependencies, unorderedEquals([getTopLevelVariableElement(unit, 'd')])); 1862 unorderedEquals([AstFinder.getTopLevelVariableElement(unit, 'd')]));
1861 } 1863 }
1862 1864
1863 test_perform_topLevel_withoutSpaceAfterType() { 1865 test_perform_topLevel_withoutSpaceAfterType() {
1864 AnalysisTarget source = newSource( 1866 AnalysisTarget source = newSource(
1865 '/test.dart', 1867 '/test.dart',
1866 ''' 1868 '''
1867 const List<int>a=[b, c]; 1869 const List<int>a=[b, c];
1868 const b = 1; 1870 const b = 1;
1869 const c = 2; 1871 const c = 2;
1870 '''); 1872 ''');
1871 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); 1873 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source);
1872 computeResult(target, RESOLVED_UNIT5); 1874 computeResult(target, RESOLVED_UNIT5);
1873 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 1875 CompilationUnit unit = outputs[RESOLVED_UNIT5];
1874 TopLevelVariableElement elementA = getTopLevelVariableElement(unit, 'a'); 1876 TopLevelVariableElement elementA =
1877 AstFinder.getTopLevelVariableElement(unit, 'a');
1875 // compute 1878 // compute
1876 computeResult(elementA, PROPAGABLE_VARIABLE_DEPENDENCIES, 1879 computeResult(elementA, PROPAGABLE_VARIABLE_DEPENDENCIES,
1877 matcher: isComputePropagableVariableDependenciesTask); 1880 matcher: isComputePropagableVariableDependenciesTask);
1878 // verify 1881 // verify
1879 expect(outputs, hasLength(1)); 1882 expect(outputs, hasLength(1));
1880 List<VariableElement> dependencies = 1883 List<VariableElement> dependencies =
1881 outputs[PROPAGABLE_VARIABLE_DEPENDENCIES]; 1884 outputs[PROPAGABLE_VARIABLE_DEPENDENCIES];
1882 expect( 1885 expect(
1883 dependencies, 1886 dependencies,
1884 unorderedEquals([ 1887 unorderedEquals([
1885 getTopLevelVariableElement(unit, 'b'), 1888 AstFinder.getTopLevelVariableElement(unit, 'b'),
1886 getTopLevelVariableElement(unit, 'c') 1889 AstFinder.getTopLevelVariableElement(unit, 'c')
1887 ])); 1890 ]));
1888 } 1891 }
1889 } 1892 }
1890 1893
1891 @reflectiveTest 1894 @reflectiveTest
1892 class ContainingLibrariesTaskTest extends _AbstractDartTaskTest { 1895 class ContainingLibrariesTaskTest extends _AbstractDartTaskTest {
1893 test_perform_definingCompilationUnit() { 1896 test_perform_definingCompilationUnit() {
1894 AnalysisTarget library = newSource('/test.dart', 'library test;'); 1897 AnalysisTarget library = newSource('/test.dart', 'library test;');
1895 computeResult(library, INCLUDED_PARTS); 1898 computeResult(library, INCLUDED_PARTS);
1896 computeResult(library, CONTAINING_LIBRARIES, 1899 computeResult(library, CONTAINING_LIBRARIES,
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
2463 var f; 2466 var f;
2464 m(x) {} 2467 m(x) {}
2465 } 2468 }
2466 class X {} 2469 class X {}
2467 class Y {} 2470 class Y {}
2468 class Z {} 2471 class Z {}
2469 '''); 2472 ''');
2470 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9, 2473 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9,
2471 matcher: isInferInstanceMembersInUnitTask); 2474 matcher: isInferInstanceMembersInUnitTask);
2472 CompilationUnit unit = outputs[RESOLVED_UNIT9]; 2475 CompilationUnit unit = outputs[RESOLVED_UNIT9];
2473 VariableDeclaration field = getFieldInClass(unit, 'B', 'f'); 2476 VariableDeclaration field = AstFinder.getFieldInClass(unit, 'B', 'f');
2474 MethodDeclaration method = getMethodInClass(unit, 'B', 'm'); 2477 MethodDeclaration method = AstFinder.getMethodInClass(unit, 'B', 'm');
2475 DartType typeX = getClass(unit, 'X').element.type; 2478 DartType typeX = AstFinder.getClass(unit, 'X').element.type;
2476 DartType typeY = getClass(unit, 'Y').element.type; 2479 DartType typeY = AstFinder.getClass(unit, 'Y').element.type;
2477 DartType typeZ = getClass(unit, 'Z').element.type; 2480 DartType typeZ = AstFinder.getClass(unit, 'Z').element.type;
2478 2481
2479 expect(field.element.type, typeX); 2482 expect(field.element.type, typeX);
2480 expect(method.element.returnType, typeY); 2483 expect(method.element.returnType, typeY);
2481 expect(method.element.parameters[0].type, typeZ); 2484 expect(method.element.parameters[0].type, typeZ);
2482 } 2485 }
2483 2486
2484 void test_perform_cross_library_const() { 2487 void test_perform_cross_library_const() {
2485 enableStrongMode(); 2488 enableStrongMode();
2486 AnalysisTarget firstSource = newSource( 2489 AnalysisTarget firstSource = newSource(
2487 '/first.dart', 2490 '/first.dart',
(...skipping 13 matching lines...) Expand all
2501 } 2504 }
2502 '''); 2505 ''');
2503 computeResult( 2506 computeResult(
2504 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9, 2507 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9,
2505 matcher: isInferInstanceMembersInUnitTask); 2508 matcher: isInferInstanceMembersInUnitTask);
2506 CompilationUnit firstUnit = outputs[RESOLVED_UNIT9]; 2509 CompilationUnit firstUnit = outputs[RESOLVED_UNIT9];
2507 computeResult( 2510 computeResult(
2508 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9); 2511 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9);
2509 CompilationUnit secondUnit = outputs[RESOLVED_UNIT9]; 2512 CompilationUnit secondUnit = outputs[RESOLVED_UNIT9];
2510 2513
2511 VariableDeclaration variableA = getTopLevelVariable(firstUnit, 'a'); 2514 VariableDeclaration variableA =
2512 VariableDeclaration variableB = getTopLevelVariable(secondUnit, 'b'); 2515 AstFinder.getTopLevelVariable(firstUnit, 'a');
2513 VariableDeclaration variableC = getFieldInClass(secondUnit, 'M', 'c'); 2516 VariableDeclaration variableB =
2517 AstFinder.getTopLevelVariable(secondUnit, 'b');
2518 VariableDeclaration variableC =
2519 AstFinder.getFieldInClass(secondUnit, 'M', 'c');
2514 InterfaceType stringType = context.typeProvider.stringType; 2520 InterfaceType stringType = context.typeProvider.stringType;
2515 2521
2516 expect(variableA.element.type, stringType); 2522 expect(variableA.element.type, stringType);
2517 expect(variableB.element.type, stringType); 2523 expect(variableB.element.type, stringType);
2518 expect(variableB.initializer.staticType, stringType); 2524 expect(variableB.initializer.staticType, stringType);
2519 expect(variableC.element.type, stringType); 2525 expect(variableC.element.type, stringType);
2520 expect(variableC.initializer.staticType, stringType); 2526 expect(variableC.initializer.staticType, stringType);
2521 } 2527 }
2522 2528
2523 void test_perform_reresolution() { 2529 void test_perform_reresolution() {
2524 enableStrongMode(); 2530 enableStrongMode();
2525 AnalysisTarget source = newSource( 2531 AnalysisTarget source = newSource(
2526 '/test.dart', 2532 '/test.dart',
2527 ''' 2533 '''
2528 const topLevel = ''; 2534 const topLevel = '';
2529 class C { 2535 class C {
2530 String field = topLevel; 2536 String field = topLevel;
2531 } 2537 }
2532 '''); 2538 ''');
2533 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); 2539 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9);
2534 CompilationUnit unit = outputs[RESOLVED_UNIT9]; 2540 CompilationUnit unit = outputs[RESOLVED_UNIT9];
2535 VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel'); 2541 VariableDeclaration topLevelDecl =
2536 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field'); 2542 AstFinder.getTopLevelVariable(unit, 'topLevel');
2543 VariableDeclaration fieldDecl =
2544 AstFinder.getFieldInClass(unit, 'C', 'field');
2537 VariableElement topLevel = topLevelDecl.name.staticElement; 2545 VariableElement topLevel = topLevelDecl.name.staticElement;
2538 VariableElement field = fieldDecl.name.staticElement; 2546 VariableElement field = fieldDecl.name.staticElement;
2539 2547
2540 InterfaceType stringType = context.typeProvider.stringType; 2548 InterfaceType stringType = context.typeProvider.stringType;
2541 expect(topLevel.type, stringType); 2549 expect(topLevel.type, stringType);
2542 expect(field.type, stringType); 2550 expect(field.type, stringType);
2543 expect(fieldDecl.initializer.staticType, stringType); 2551 expect(fieldDecl.initializer.staticType, stringType);
2544 } 2552 }
2545 } 2553 }
2546 2554
2547 @reflectiveTest 2555 @reflectiveTest
2548 class InferStaticVariableTypesInUnitTaskTest extends _AbstractDartTaskTest { 2556 class InferStaticVariableTypesInUnitTaskTest extends _AbstractDartTaskTest {
2549 void test_perform_const_field() { 2557 void test_perform_const_field() {
2550 enableStrongMode(); 2558 enableStrongMode();
2551 AnalysisTarget source = newSource( 2559 AnalysisTarget source = newSource(
2552 '/test.dart', 2560 '/test.dart',
2553 ''' 2561 '''
2554 class M { 2562 class M {
2555 static const X = ""; 2563 static const X = "";
2556 } 2564 }
2557 '''); 2565 ''');
2558 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7, 2566 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7,
2559 matcher: isInferStaticVariableTypesInUnitTask); 2567 matcher: isInferStaticVariableTypesInUnitTask);
2560 CompilationUnit unit = outputs[RESOLVED_UNIT7]; 2568 CompilationUnit unit = outputs[RESOLVED_UNIT7];
2561 VariableDeclaration declaration = getFieldInClass(unit, 'M', 'X'); 2569 VariableDeclaration declaration = AstFinder.getFieldInClass(unit, 'M', 'X');
2562 InterfaceType stringType = context.typeProvider.stringType; 2570 InterfaceType stringType = context.typeProvider.stringType;
2563 expect(declaration.element.type, stringType); 2571 expect(declaration.element.type, stringType);
2564 } 2572 }
2565 2573
2566 void test_perform_nestedDeclarations() { 2574 void test_perform_nestedDeclarations() {
2567 enableStrongMode(); 2575 enableStrongMode();
2568 AnalysisTarget source = newSource( 2576 AnalysisTarget source = newSource(
2569 '/test.dart', 2577 '/test.dart',
2570 ''' 2578 '''
2571 var f = (int x) { 2579 var f = (int x) {
(...skipping 25 matching lines...) Expand all
2597 class M {} 2605 class M {}
2598 '''); 2606 ''');
2599 computeResult( 2607 computeResult(
2600 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT7, 2608 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT7,
2601 matcher: isInferStaticVariableTypesInUnitTask); 2609 matcher: isInferStaticVariableTypesInUnitTask);
2602 CompilationUnit firstUnit = outputs[RESOLVED_UNIT7]; 2610 CompilationUnit firstUnit = outputs[RESOLVED_UNIT7];
2603 computeResult( 2611 computeResult(
2604 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT7); 2612 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT7);
2605 CompilationUnit secondUnit = outputs[RESOLVED_UNIT7]; 2613 CompilationUnit secondUnit = outputs[RESOLVED_UNIT7];
2606 2614
2607 VariableDeclaration variableA = getTopLevelVariable(firstUnit, 'a'); 2615 VariableDeclaration variableA =
2608 VariableDeclaration variableB = getTopLevelVariable(secondUnit, 'b'); 2616 AstFinder.getTopLevelVariable(firstUnit, 'a');
2609 VariableDeclaration variableC = getTopLevelVariable(firstUnit, 'c'); 2617 VariableDeclaration variableB =
2610 ClassDeclaration classM = getClass(secondUnit, 'M'); 2618 AstFinder.getTopLevelVariable(secondUnit, 'b');
2619 VariableDeclaration variableC =
2620 AstFinder.getTopLevelVariable(firstUnit, 'c');
2621 ClassDeclaration classM = AstFinder.getClass(secondUnit, 'M');
2611 DartType typeM = classM.element.type; 2622 DartType typeM = classM.element.type;
2612 2623
2613 expect(variableA.element.type, typeM); 2624 expect(variableA.element.type, typeM);
2614 expect(variableB.element.type, typeM); 2625 expect(variableB.element.type, typeM);
2615 expect(variableB.initializer.staticType, typeM); 2626 expect(variableB.initializer.staticType, typeM);
2616 expect(variableC.element.type, typeM); 2627 expect(variableC.element.type, typeM);
2617 expect(variableC.initializer.staticType, typeM); 2628 expect(variableC.initializer.staticType, typeM);
2618 } 2629 }
2619 2630
2620 void test_perform_simple() { 2631 void test_perform_simple() {
(...skipping 26 matching lines...) Expand all
2647 void test_getDeclaration_staticField() { 2658 void test_getDeclaration_staticField() {
2648 AnalysisTarget source = newSource( 2659 AnalysisTarget source = newSource(
2649 '/test.dart', 2660 '/test.dart',
2650 ''' 2661 '''
2651 class C { 2662 class C {
2652 var field = ''; 2663 var field = '';
2653 } 2664 }
2654 '''); 2665 ''');
2655 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2666 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2656 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2667 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2657 VariableDeclaration declaration = getFieldInClass(unit, 'C', 'field'); 2668 VariableDeclaration declaration =
2669 AstFinder.getFieldInClass(unit, 'C', 'field');
2658 VariableElement variable = declaration.name.staticElement; 2670 VariableElement variable = declaration.name.staticElement;
2659 InferStaticVariableTypeTask inferTask = 2671 InferStaticVariableTypeTask inferTask =
2660 new InferStaticVariableTypeTask(task.context, variable); 2672 new InferStaticVariableTypeTask(task.context, variable);
2661 expect(inferTask.getDeclaration(unit), declaration); 2673 expect(inferTask.getDeclaration(unit), declaration);
2662 } 2674 }
2663 2675
2664 void test_getDeclaration_topLevel() { 2676 void test_getDeclaration_topLevel() {
2665 AnalysisTarget source = newSource( 2677 AnalysisTarget source = newSource(
2666 '/test.dart', 2678 '/test.dart',
2667 ''' 2679 '''
2668 var topLevel = ''; 2680 var topLevel = '';
2669 '''); 2681 ''');
2670 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2682 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2671 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2683 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2672 VariableDeclaration declaration = getTopLevelVariable(unit, 'topLevel'); 2684 VariableDeclaration declaration =
2685 AstFinder.getTopLevelVariable(unit, 'topLevel');
2673 VariableElement variable = declaration.name.staticElement; 2686 VariableElement variable = declaration.name.staticElement;
2674 InferStaticVariableTypeTask inferTask = 2687 InferStaticVariableTypeTask inferTask =
2675 new InferStaticVariableTypeTask(task.context, variable); 2688 new InferStaticVariableTypeTask(task.context, variable);
2676 expect(inferTask.getDeclaration(unit), declaration); 2689 expect(inferTask.getDeclaration(unit), declaration);
2677 } 2690 }
2678 2691
2679 void test_perform() { 2692 void test_perform() {
2680 enableStrongMode(); 2693 enableStrongMode();
2681 AnalysisTarget source = newSource( 2694 AnalysisTarget source = newSource(
2682 '/test3.dart', 2695 '/test3.dart',
2683 ''' 2696 '''
2684 var topLevel3 = ''; 2697 var topLevel3 = '';
2685 class C { 2698 class C {
2686 var field3 = topLevel3; 2699 var field3 = topLevel3;
2687 } 2700 }
2688 '''); 2701 ''');
2689 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2702 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2690 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2703 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2691 VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel3'); 2704 VariableDeclaration topLevelDecl =
2692 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field3'); 2705 AstFinder.getTopLevelVariable(unit, 'topLevel3');
2706 VariableDeclaration fieldDecl =
2707 AstFinder.getFieldInClass(unit, 'C', 'field3');
2693 VariableElement topLevel = topLevelDecl.name.staticElement; 2708 VariableElement topLevel = topLevelDecl.name.staticElement;
2694 VariableElement field = fieldDecl.name.staticElement; 2709 VariableElement field = fieldDecl.name.staticElement;
2695 2710
2696 computeResult(field, INFERRED_STATIC_VARIABLE, 2711 computeResult(field, INFERRED_STATIC_VARIABLE,
2697 matcher: isInferStaticVariableTypeTask); 2712 matcher: isInferStaticVariableTypeTask);
2698 InterfaceType stringType = context.typeProvider.stringType; 2713 InterfaceType stringType = context.typeProvider.stringType;
2699 expect(topLevel.type, stringType); 2714 expect(topLevel.type, stringType);
2700 expect(field.type, stringType); 2715 expect(field.type, stringType);
2701 expect(fieldDecl.initializer.staticType, stringType); 2716 expect(fieldDecl.initializer.staticType, stringType);
2702 } 2717 }
2703 2718
2704 void test_perform_const() { 2719 void test_perform_const() {
2705 enableStrongMode(); 2720 enableStrongMode();
2706 AnalysisTarget source = newSource( 2721 AnalysisTarget source = newSource(
2707 '/test.dart', 2722 '/test.dart',
2708 ''' 2723 '''
2709 const topLevel = "hello"; 2724 const topLevel = "hello";
2710 class C { 2725 class C {
2711 var field = topLevel; 2726 var field = topLevel;
2712 } 2727 }
2713 '''); 2728 ''');
2714 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2729 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2715 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2730 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2716 VariableElement topLevel = 2731 VariableElement topLevel =
2717 getTopLevelVariable(unit, 'topLevel').name.staticElement; 2732 AstFinder.getTopLevelVariable(unit, 'topLevel').name.staticElement;
2718 VariableElement field = 2733 VariableElement field =
2719 getFieldInClass(unit, 'C', 'field').name.staticElement; 2734 AstFinder.getFieldInClass(unit, 'C', 'field').name.staticElement;
2720 2735
2721 computeResult(field, INFERRED_STATIC_VARIABLE, 2736 computeResult(field, INFERRED_STATIC_VARIABLE,
2722 matcher: isInferStaticVariableTypeTask); 2737 matcher: isInferStaticVariableTypeTask);
2723 InterfaceType stringType = context.typeProvider.stringType; 2738 InterfaceType stringType = context.typeProvider.stringType;
2724 expect(topLevel.type, stringType); 2739 expect(topLevel.type, stringType);
2725 expect(field.type, stringType); 2740 expect(field.type, stringType);
2726 } 2741 }
2727 2742
2728 void test_perform_cycle() { 2743 void test_perform_cycle() {
2729 enableStrongMode(); 2744 enableStrongMode();
2730 AnalysisTarget source = newSource( 2745 AnalysisTarget source = newSource(
2731 '/test.dart', 2746 '/test.dart',
2732 ''' 2747 '''
2733 var piFirst = true; 2748 var piFirst = true;
2734 var pi = piFirst ? 3.14 : tau / 2; 2749 var pi = piFirst ? 3.14 : tau / 2;
2735 var tau = piFirst ? pi * 2 : 6.28; 2750 var tau = piFirst ? pi * 2 : 6.28;
2736 '''); 2751 ''');
2737 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2752 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2738 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2753 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2739 VariableElement piFirst = 2754 VariableElement piFirst =
2740 getTopLevelVariable(unit, 'piFirst').name.staticElement; 2755 AstFinder.getTopLevelVariable(unit, 'piFirst').name.staticElement;
2741 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; 2756 VariableElement pi =
2742 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; 2757 AstFinder.getTopLevelVariable(unit, 'pi').name.staticElement;
2758 VariableElement tau =
2759 AstFinder.getTopLevelVariable(unit, 'tau').name.staticElement;
2743 2760
2744 computeResult(piFirst, INFERRED_STATIC_VARIABLE, 2761 computeResult(piFirst, INFERRED_STATIC_VARIABLE,
2745 matcher: isInferStaticVariableTypeTask); 2762 matcher: isInferStaticVariableTypeTask);
2746 expect(piFirst.type, context.typeProvider.boolType); 2763 expect(piFirst.type, context.typeProvider.boolType);
2747 expect(pi.type.isDynamic, isTrue); 2764 expect(pi.type.isDynamic, isTrue);
2748 expect(tau.type.isDynamic, isTrue); 2765 expect(tau.type.isDynamic, isTrue);
2749 } 2766 }
2750 2767
2751 void test_perform_error() { 2768 void test_perform_error() {
2752 enableStrongMode(); 2769 enableStrongMode();
2753 AnalysisTarget source = newSource( 2770 AnalysisTarget source = newSource(
2754 '/test.dart', 2771 '/test.dart',
2755 ''' 2772 '''
2756 var a = '' / null; 2773 var a = '' / null;
2757 '''); 2774 ''');
2758 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2775 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2759 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2776 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2760 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; 2777 VariableElement a =
2778 AstFinder.getTopLevelVariable(unit, 'a').name.staticElement;
2761 2779
2762 computeResult(a, INFERRED_STATIC_VARIABLE, 2780 computeResult(a, INFERRED_STATIC_VARIABLE,
2763 matcher: isInferStaticVariableTypeTask); 2781 matcher: isInferStaticVariableTypeTask);
2764 expect(a.type.isDynamic, isTrue); 2782 expect(a.type.isDynamic, isTrue);
2765 } 2783 }
2766 2784
2767 void test_perform_null() { 2785 void test_perform_null() {
2768 enableStrongMode(); 2786 enableStrongMode();
2769 AnalysisTarget source = newSource( 2787 AnalysisTarget source = newSource(
2770 '/test.dart', 2788 '/test.dart',
2771 ''' 2789 '''
2772 var a = null; 2790 var a = null;
2773 '''); 2791 ''');
2774 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2792 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2775 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2793 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2776 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; 2794 VariableElement a =
2795 AstFinder.getTopLevelVariable(unit, 'a').name.staticElement;
2777 2796
2778 computeResult(a, INFERRED_STATIC_VARIABLE, 2797 computeResult(a, INFERRED_STATIC_VARIABLE,
2779 matcher: isInferStaticVariableTypeTask); 2798 matcher: isInferStaticVariableTypeTask);
2780 expect(a.type.isDynamic, isTrue); 2799 expect(a.type.isDynamic, isTrue);
2781 } 2800 }
2782 } 2801 }
2783 2802
2784 @reflectiveTest 2803 @reflectiveTest
2785 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { 2804 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest {
2786 test_perform() { 2805 test_perform() {
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
3150 final piFirst = true; 3169 final piFirst = true;
3151 final pi = piFirst ? 3.14 : tau / 2; 3170 final pi = piFirst ? 3.14 : tau / 2;
3152 final tau = piFirst ? pi * 2 : 6.28; 3171 final tau = piFirst ? pi * 2 : 6.28;
3153 '''); 3172 ''');
3154 // compute 3173 // compute
3155 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6, 3174 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6,
3156 matcher: isPropagateVariableTypesInUnitTask); 3175 matcher: isPropagateVariableTypesInUnitTask);
3157 CompilationUnit unit = outputs[RESOLVED_UNIT6]; 3176 CompilationUnit unit = outputs[RESOLVED_UNIT6];
3158 // verify 3177 // verify
3159 TopLevelVariableElement piFirst = 3178 TopLevelVariableElement piFirst =
3160 getTopLevelVariableElement(unit, 'piFirst'); 3179 AstFinder.getTopLevelVariableElement(unit, 'piFirst');
3161 TopLevelVariableElement pi = getTopLevelVariableElement(unit, 'pi'); 3180 TopLevelVariableElement pi =
3162 TopLevelVariableElement tau = getTopLevelVariableElement(unit, 'tau'); 3181 AstFinder.getTopLevelVariableElement(unit, 'pi');
3182 TopLevelVariableElement tau =
3183 AstFinder.getTopLevelVariableElement(unit, 'tau');
3163 expect(piFirst.propagatedType, context.typeProvider.boolType); 3184 expect(piFirst.propagatedType, context.typeProvider.boolType);
3164 expect(pi.propagatedType, isNull); 3185 expect(pi.propagatedType, isNull);
3165 expect(tau.propagatedType, isNull); 3186 expect(tau.propagatedType, isNull);
3166 } 3187 }
3167 3188
3168 void test_perform_topLevel() { 3189 void test_perform_topLevel() {
3169 AnalysisTarget source = newSource( 3190 AnalysisTarget source = newSource(
3170 '/test.dart', 3191 '/test.dart',
3171 ''' 3192 '''
3172 //final a = b + c.length; 3193 //final a = b + c.length;
3173 final a = b; 3194 final a = b;
3174 final b = 1; 3195 final b = 1;
3175 final c = '2'; 3196 final c = '2';
3176 '''); 3197 ''');
3177 // compute 3198 // compute
3178 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6, 3199 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6,
3179 matcher: isPropagateVariableTypesInUnitTask); 3200 matcher: isPropagateVariableTypesInUnitTask);
3180 CompilationUnit unit = outputs[RESOLVED_UNIT6]; 3201 CompilationUnit unit = outputs[RESOLVED_UNIT6];
3181 // verify 3202 // verify
3182 InterfaceType intType = context.typeProvider.intType; 3203 InterfaceType intType = context.typeProvider.intType;
3183 InterfaceType stringType = context.typeProvider.stringType; 3204 InterfaceType stringType = context.typeProvider.stringType;
3184 expect(getTopLevelVariableElement(unit, 'a').propagatedType, intType); 3205 expect(AstFinder.getTopLevelVariableElement(unit, 'a').propagatedType,
3185 expect(getTopLevelVariableElement(unit, 'b').propagatedType, intType); 3206 intType);
3186 expect(getTopLevelVariableElement(unit, 'c').propagatedType, stringType); 3207 expect(AstFinder.getTopLevelVariableElement(unit, 'b').propagatedType,
3208 intType);
3209 expect(AstFinder.getTopLevelVariableElement(unit, 'c').propagatedType,
3210 stringType);
3187 } 3211 }
3188 } 3212 }
3189 3213
3190 @reflectiveTest 3214 @reflectiveTest
3191 class PropagateVariableTypeTaskTest extends _AbstractDartTaskTest { 3215 class PropagateVariableTypeTaskTest extends _AbstractDartTaskTest {
3192 void test_perform_cycle() { 3216 void test_perform_cycle() {
3193 AnalysisTarget source = newSource( 3217 AnalysisTarget source = newSource(
3194 '/test.dart', 3218 '/test.dart',
3195 ''' 3219 '''
3196 final piFirst = true; 3220 final piFirst = true;
3197 final pi = piFirst ? 3.14 : tau / 2; 3221 final pi = piFirst ? 3.14 : tau / 2;
3198 final tau = piFirst ? pi * 2 : 6.28; 3222 final tau = piFirst ? pi * 2 : 6.28;
3199 '''); 3223 ''');
3200 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 3224 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
3201 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 3225 CompilationUnit unit = outputs[RESOLVED_UNIT5];
3202 TopLevelVariableElement piFirst = 3226 TopLevelVariableElement piFirst =
3203 getTopLevelVariableElement(unit, 'piFirst'); 3227 AstFinder.getTopLevelVariableElement(unit, 'piFirst');
3204 TopLevelVariableElement pi = getTopLevelVariableElement(unit, 'pi'); 3228 TopLevelVariableElement pi =
3205 TopLevelVariableElement tau = getTopLevelVariableElement(unit, 'tau'); 3229 AstFinder.getTopLevelVariableElement(unit, 'pi');
3230 TopLevelVariableElement tau =
3231 AstFinder.getTopLevelVariableElement(unit, 'tau');
3206 // compute 3232 // compute
3207 computeResult(piFirst, PROPAGATED_VARIABLE, 3233 computeResult(piFirst, PROPAGATED_VARIABLE,
3208 matcher: isPropagateVariableTypeTask); 3234 matcher: isPropagateVariableTypeTask);
3209 expect(piFirst.propagatedType, context.typeProvider.boolType); 3235 expect(piFirst.propagatedType, context.typeProvider.boolType);
3210 expect(pi.propagatedType, isNull); 3236 expect(pi.propagatedType, isNull);
3211 expect(tau.propagatedType, isNull); 3237 expect(tau.propagatedType, isNull);
3212 } 3238 }
3213 3239
3214 void test_perform_null() { 3240 void test_perform_null() {
3215 enableStrongMode(); 3241 enableStrongMode();
3216 AnalysisTarget source = newSource( 3242 AnalysisTarget source = newSource(
3217 '/test.dart', 3243 '/test.dart',
3218 ''' 3244 '''
3219 var a = null; 3245 var a = null;
3220 '''); 3246 ''');
3221 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 3247 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
3222 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 3248 CompilationUnit unit = outputs[RESOLVED_UNIT5];
3223 TopLevelVariableElement a = getTopLevelVariableElement(unit, 'a'); 3249 TopLevelVariableElement a = AstFinder.getTopLevelVariableElement(unit, 'a');
3224 // compute 3250 // compute
3225 computeResult(a, PROPAGATED_VARIABLE, matcher: isPropagateVariableTypeTask); 3251 computeResult(a, PROPAGATED_VARIABLE, matcher: isPropagateVariableTypeTask);
3226 expect(a.propagatedType, isNull); 3252 expect(a.propagatedType, isNull);
3227 } 3253 }
3228 3254
3229 void test_perform_topLevel() { 3255 void test_perform_topLevel() {
3230 AnalysisTarget source = newSource( 3256 AnalysisTarget source = newSource(
3231 '/test.dart', 3257 '/test.dart',
3232 ''' 3258 '''
3233 final a = b + c.length; 3259 final a = b + c.length;
3234 final b = 1; 3260 final b = 1;
3235 final c = '2'; 3261 final c = '2';
3236 '''); 3262 ''');
3237 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 3263 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
3238 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 3264 CompilationUnit unit = outputs[RESOLVED_UNIT5];
3239 TopLevelVariableElement elementA = getTopLevelVariableElement(unit, 'a'); 3265 TopLevelVariableElement elementA =
3240 TopLevelVariableElement elementB = getTopLevelVariableElement(unit, 'b'); 3266 AstFinder.getTopLevelVariableElement(unit, 'a');
3241 TopLevelVariableElement elementC = getTopLevelVariableElement(unit, 'c'); 3267 TopLevelVariableElement elementB =
3268 AstFinder.getTopLevelVariableElement(unit, 'b');
3269 TopLevelVariableElement elementC =
3270 AstFinder.getTopLevelVariableElement(unit, 'c');
3242 // compute 3271 // compute
3243 computeResult(elementA, PROPAGATED_VARIABLE, 3272 computeResult(elementA, PROPAGATED_VARIABLE,
3244 matcher: isPropagateVariableTypeTask); 3273 matcher: isPropagateVariableTypeTask);
3245 InterfaceType intType = context.typeProvider.intType; 3274 InterfaceType intType = context.typeProvider.intType;
3246 InterfaceType stringType = context.typeProvider.stringType; 3275 InterfaceType stringType = context.typeProvider.stringType;
3247 expect(elementA.propagatedType, intType); 3276 expect(elementA.propagatedType, intType);
3248 expect(elementB.propagatedType, intType); 3277 expect(elementB.propagatedType, intType);
3249 expect(elementC.propagatedType, stringType); 3278 expect(elementC.propagatedType, stringType);
3250 } 3279 }
3251 } 3280 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
3283 }); 3312 });
3284 InterfaceType intType = context.typeProvider.intType; 3313 InterfaceType intType = context.typeProvider.intType;
3285 DartType dynamicType = context.typeProvider.dynamicType; 3314 DartType dynamicType = context.typeProvider.dynamicType;
3286 3315
3287 computeResult( 3316 computeResult(
3288 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT8); 3317 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT8);
3289 CompilationUnit unit1 = outputs[RESOLVED_UNIT8]; 3318 CompilationUnit unit1 = outputs[RESOLVED_UNIT8];
3290 3319
3291 // B.b2 shoud be resolved on the rhs, but not yet inferred. 3320 // B.b2 shoud be resolved on the rhs, but not yet inferred.
3292 assertVariableDeclarationTypes( 3321 assertVariableDeclarationTypes(
3293 getFieldInClass(unit1, "B", "b2"), dynamicType, intType); 3322 AstFinder.getFieldInClass(unit1, "B", "b2"), dynamicType, intType);
3294 3323
3295 computeResult( 3324 computeResult(
3296 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT8); 3325 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT8);
3297 CompilationUnit unit0 = outputs[RESOLVED_UNIT8]; 3326 CompilationUnit unit0 = outputs[RESOLVED_UNIT8];
3298 3327
3299 // B.b2 should now be fully resolved and inferred. 3328 // B.b2 should now be fully resolved and inferred.
3300 assertVariableDeclarationTypes( 3329 assertVariableDeclarationTypes(
3301 getFieldInClass(unit1, "B", "b2"), intType, intType); 3330 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType);
3302 3331
3303 // A.a2 should now be resolved on the rhs, but not yet inferred. 3332 // A.a2 should now be resolved on the rhs, but not yet inferred.
3304 assertVariableDeclarationTypes( 3333 assertVariableDeclarationTypes(
3305 getFieldInClass(unit0, "A", "a2"), dynamicType, intType); 3334 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, intType);
3306 3335
3307 computeResult( 3336 computeResult(
3308 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT8); 3337 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT8);
3309 3338
3310 // A.a2 should now be fully resolved and inferred. 3339 // A.a2 should now be fully resolved and inferred.
3311 assertVariableDeclarationTypes( 3340 assertVariableDeclarationTypes(
3312 getFieldInClass(unit0, "A", "a2"), intType, intType); 3341 AstFinder.getFieldInClass(unit0, "A", "a2"), intType, intType);
3313 3342
3314 assertVariableDeclarationTypes( 3343 assertVariableDeclarationTypes(
3315 getFieldInClass(unit1, "B", "b2"), intType, intType); 3344 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType);
3316 } 3345 }
3317 3346
3318 // Test inference of instance fields across units 3347 // Test inference of instance fields across units
3319 void test_perform_inference_cross_unit_instance_cyclic() { 3348 void test_perform_inference_cross_unit_instance_cyclic() {
3320 List<Source> sources = newSources({ 3349 List<Source> sources = newSources({
3321 '/a.dart': ''' 3350 '/a.dart': '''
3322 import 'b.dart'; 3351 import 'b.dart';
3323 class A { 3352 class A {
3324 final a2 = new B().b2; 3353 final a2 = new B().b2;
3325 } 3354 }
(...skipping 14 matching lines...) Expand all
3340 ''' 3369 '''
3341 }); 3370 });
3342 DartType dynamicType = context.typeProvider.dynamicType; 3371 DartType dynamicType = context.typeProvider.dynamicType;
3343 3372
3344 computeResult( 3373 computeResult(
3345 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT8); 3374 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT8);
3346 CompilationUnit unit0 = outputs[RESOLVED_UNIT8]; 3375 CompilationUnit unit0 = outputs[RESOLVED_UNIT8];
3347 3376
3348 // A.a2 should now be resolved on the rhs, but not yet inferred. 3377 // A.a2 should now be resolved on the rhs, but not yet inferred.
3349 assertVariableDeclarationTypes( 3378 assertVariableDeclarationTypes(
3350 getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); 3379 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType);
3351 3380
3352 computeResult( 3381 computeResult(
3353 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT8); 3382 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT8);
3354 3383
3355 // A.a2 should now be fully resolved and inferred. 3384 // A.a2 should now be fully resolved and inferred.
3356 assertVariableDeclarationTypes( 3385 assertVariableDeclarationTypes(
3357 getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); 3386 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType);
3358 } 3387 }
3359 3388
3360 // Test inference of instance fields across units with cycles 3389 // Test inference of instance fields across units with cycles
3361 void test_perform_inference_cross_unit_static_instance() { 3390 void test_perform_inference_cross_unit_static_instance() {
3362 List<Source> sources = newSources({ 3391 List<Source> sources = newSources({
3363 '/a.dart': ''' 3392 '/a.dart': '''
3364 import 'b.dart'; 3393 import 'b.dart';
3365 class A { 3394 class A {
3366 static final a1 = B.b1; 3395 static final a1 = B.b1;
3367 final a2 = new B().b2; 3396 final a2 = new B().b2;
(...skipping 17 matching lines...) Expand all
3385 ''' 3414 '''
3386 }); 3415 });
3387 InterfaceType intType = context.typeProvider.intType; 3416 InterfaceType intType = context.typeProvider.intType;
3388 DartType dynamicType = context.typeProvider.dynamicType; 3417 DartType dynamicType = context.typeProvider.dynamicType;
3389 3418
3390 computeResult( 3419 computeResult(
3391 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT8); 3420 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT8);
3392 CompilationUnit unit1 = outputs[RESOLVED_UNIT8]; 3421 CompilationUnit unit1 = outputs[RESOLVED_UNIT8];
3393 3422
3394 assertVariableDeclarationTypes( 3423 assertVariableDeclarationTypes(
3395 getFieldInClass(unit1, "B", "b1"), intType, intType); 3424 AstFinder.getFieldInClass(unit1, "B", "b1"), intType, intType);
3396 assertVariableDeclarationTypes( 3425 assertVariableDeclarationTypes(
3397 getFieldInClass(unit1, "B", "b2"), dynamicType, intType); 3426 AstFinder.getFieldInClass(unit1, "B", "b2"), dynamicType, intType);
3398 3427
3399 computeResult( 3428 computeResult(
3400 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT8); 3429 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT8);
3401 CompilationUnit unit0 = outputs[RESOLVED_UNIT8]; 3430 CompilationUnit unit0 = outputs[RESOLVED_UNIT8];
3402 3431
3403 assertVariableDeclarationTypes( 3432 assertVariableDeclarationTypes(
3404 getFieldInClass(unit0, "A", "a1"), intType, intType); 3433 AstFinder.getFieldInClass(unit0, "A", "a1"), intType, intType);
3405 assertVariableDeclarationTypes( 3434 assertVariableDeclarationTypes(
3406 getFieldInClass(unit0, "A", "a2"), dynamicType, intType); 3435 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, intType);
3407 3436
3408 assertVariableDeclarationTypes( 3437 assertVariableDeclarationTypes(
3409 getFieldInClass(unit1, "B", "b1"), intType, intType); 3438 AstFinder.getFieldInClass(unit1, "B", "b1"), intType, intType);
3410 assertVariableDeclarationTypes( 3439 assertVariableDeclarationTypes(
3411 getFieldInClass(unit1, "B", "b2"), intType, intType); 3440 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType);
3412 3441
3413 computeResult( 3442 computeResult(
3414 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT8); 3443 new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT8);
3415 3444
3416 assertVariableDeclarationTypes( 3445 assertVariableDeclarationTypes(
3417 getFieldInClass(unit0, "A", "a1"), intType, intType); 3446 AstFinder.getFieldInClass(unit0, "A", "a1"), intType, intType);
3418 assertVariableDeclarationTypes( 3447 assertVariableDeclarationTypes(
3419 getFieldInClass(unit0, "A", "a2"), intType, intType); 3448 AstFinder.getFieldInClass(unit0, "A", "a2"), intType, intType);
3420 3449
3421 assertVariableDeclarationTypes( 3450 assertVariableDeclarationTypes(
3422 getFieldInClass(unit1, "B", "b1"), intType, intType); 3451 AstFinder.getFieldInClass(unit1, "B", "b1"), intType, intType);
3423 assertVariableDeclarationTypes( 3452 assertVariableDeclarationTypes(
3424 getFieldInClass(unit1, "B", "b2"), intType, intType); 3453 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType);
3425 } 3454 }
3426 3455
3427 // Test inference between static and instance fields 3456 // Test inference between static and instance fields
3428 void test_perform_inference_instance() { 3457 void test_perform_inference_instance() {
3429 List<Source> sources = newSources({ 3458 List<Source> sources = newSources({
3430 '/a.dart': ''' 3459 '/a.dart': '''
3431 import 'b.dart'; 3460 import 'b.dart';
3432 class A { 3461 class A {
3433 final a2 = new B().b2; 3462 final a2 = new B().b2;
3434 } 3463 }
(...skipping 13 matching lines...) Expand all
3448 }); 3477 });
3449 InterfaceType intType = context.typeProvider.intType; 3478 InterfaceType intType = context.typeProvider.intType;
3450 DartType dynamicType = context.typeProvider.dynamicType; 3479 DartType dynamicType = context.typeProvider.dynamicType;
3451 3480
3452 computeResult( 3481 computeResult(
3453 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT8); 3482 new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT8);
3454 CompilationUnit unit0 = outputs[RESOLVED_UNIT8]; 3483 CompilationUnit unit0 = outputs[RESOLVED_UNIT8];
3455 3484
3456 // A.a2 should now be resolved on the rhs, but not yet inferred. 3485 // A.a2 should now be resolved on the rhs, but not yet inferred.
3457 assertVariableDeclarationTypes( 3486 assertVariableDeclarationTypes(
3458 getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); 3487 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType);
3459 3488
3460 // B.b2 shoud be resolved on the rhs, but not yet inferred. 3489 // B.b2 shoud be resolved on the rhs, but not yet inferred.
3461 assertVariableDeclarationTypes( 3490 assertVariableDeclarationTypes(
3462 getFieldInClass(unit0, "B", "b2"), dynamicType, intType); 3491 AstFinder.getFieldInClass(unit0, "B", "b2"), dynamicType, intType);
3463 3492
3464 computeResult( 3493 computeResult(
3465 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT8); 3494 new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT8);
3466 3495
3467 // A.a2 should now be fully resolved and inferred. 3496 // A.a2 should now be fully resolved and inferred.
3468 assertVariableDeclarationTypes( 3497 assertVariableDeclarationTypes(
3469 getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); 3498 AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType);
3470 3499
3471 // B.b2 should now be fully resolved and inferred. 3500 // B.b2 should now be fully resolved and inferred.
3472 assertVariableDeclarationTypes( 3501 assertVariableDeclarationTypes(
3473 getFieldInClass(unit0, "B", "b2"), intType, intType); 3502 AstFinder.getFieldInClass(unit0, "B", "b2"), intType, intType);
3474 } 3503 }
3475 } 3504 }
3476 3505
3477 @reflectiveTest 3506 @reflectiveTest
3478 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest { 3507 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest {
3479 test_perform() { 3508 test_perform() {
3480 Source sourceLib = newSource( 3509 Source sourceLib = newSource(
3481 '/my_lib.dart', 3510 '/my_lib.dart',
3482 ''' 3511 '''
3483 library my_lib; 3512 library my_lib;
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
3830 AnalysisTarget source = newSource( 3859 AnalysisTarget source = newSource(
3831 '/test.dart', 3860 '/test.dart',
3832 ''' 3861 '''
3833 var piFirst = true; 3862 var piFirst = true;
3834 var pi = piFirst ? 3.14 : tau / 2; 3863 var pi = piFirst ? 3.14 : tau / 2;
3835 var tau = piFirst ? pi * 2 : 6.28; 3864 var tau = piFirst ? pi * 2 : 6.28;
3836 '''); 3865 ''');
3837 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10); 3866 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10);
3838 CompilationUnit unit = outputs[RESOLVED_UNIT10]; 3867 CompilationUnit unit = outputs[RESOLVED_UNIT10];
3839 VariableElement piFirst = 3868 VariableElement piFirst =
3840 getTopLevelVariable(unit, 'piFirst').name.staticElement; 3869 AstFinder.getTopLevelVariable(unit, 'piFirst').name.staticElement;
3841 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; 3870 VariableElement pi =
3842 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; 3871 AstFinder.getTopLevelVariable(unit, 'pi').name.staticElement;
3843 Expression piFirstUse = (getTopLevelVariable(unit, 'tau').initializer 3872 VariableElement tau =
3844 as ConditionalExpression).condition; 3873 AstFinder.getTopLevelVariable(unit, 'tau').name.staticElement;
3874 Expression piFirstUse = (AstFinder
3875 .getTopLevelVariable(unit, 'tau')
3876 .initializer as ConditionalExpression).condition;
3845 3877
3846 expect(piFirstUse.staticType, context.typeProvider.boolType); 3878 expect(piFirstUse.staticType, context.typeProvider.boolType);
3847 expect(piFirst.type, context.typeProvider.boolType); 3879 expect(piFirst.type, context.typeProvider.boolType);
3848 expect(pi.type.isDynamic, isTrue); 3880 expect(pi.type.isDynamic, isTrue);
3849 expect(tau.type.isDynamic, isTrue); 3881 expect(tau.type.isDynamic, isTrue);
3850 } 3882 }
3851 3883
3852 void test_perform_inference_cross_unit_cyclic() { 3884 void test_perform_inference_cross_unit_cyclic() {
3853 AnalysisTarget firstSource = newSource( 3885 AnalysisTarget firstSource = newSource(
3854 '/a.dart', 3886 '/a.dart',
(...skipping 20 matching lines...) Expand all
3875 computeResult( 3907 computeResult(
3876 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT10); 3908 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT10);
3877 CompilationUnit unit1 = outputs[RESOLVED_UNIT10]; 3909 CompilationUnit unit1 = outputs[RESOLVED_UNIT10];
3878 computeResult( 3910 computeResult(
3879 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT10); 3911 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT10);
3880 CompilationUnit unit2 = outputs[RESOLVED_UNIT10]; 3912 CompilationUnit unit2 = outputs[RESOLVED_UNIT10];
3881 3913
3882 InterfaceType intType = context.typeProvider.intType; 3914 InterfaceType intType = context.typeProvider.intType;
3883 3915
3884 assertVariableDeclarationTypes( 3916 assertVariableDeclarationTypes(
3885 getTopLevelVariable(unit1, "x"), intType, intType); 3917 AstFinder.getTopLevelVariable(unit1, "x"), intType, intType);
3886 assertVariableDeclarationTypes( 3918 assertVariableDeclarationTypes(
3887 getFieldInClass(unit1, "A", "x"), intType, intType); 3919 AstFinder.getFieldInClass(unit1, "A", "x"), intType, intType);
3888 3920
3889 assertVariableDeclarationTypes( 3921 assertVariableDeclarationTypes(
3890 getTopLevelVariable(unit2, "y"), intType, intType); 3922 AstFinder.getTopLevelVariable(unit2, "y"), intType, intType);
3891 assertVariableDeclarationTypes( 3923 assertVariableDeclarationTypes(
3892 getFieldInClass(unit2, "B", "y"), intType, intType); 3924 AstFinder.getFieldInClass(unit2, "B", "y"), intType, intType);
3893 3925
3894 List<Statement> statements = 3926 List<Statement> statements =
3895 getStatementsInTopLevelFunction(unit2, "test1"); 3927 AstFinder.getStatementsInTopLevelFunction(unit2, "test1");
3896 3928
3897 assertAssignmentStatementTypes(statements[1], intType, intType); 3929 assertAssignmentStatementTypes(statements[1], intType, intType);
3898 assertAssignmentStatementTypes(statements[2], intType, intType); 3930 assertAssignmentStatementTypes(statements[2], intType, intType);
3899 assertAssignmentStatementTypes(statements[3], intType, intType); 3931 assertAssignmentStatementTypes(statements[3], intType, intType);
3900 assertAssignmentStatementTypes(statements[4], intType, intType); 3932 assertAssignmentStatementTypes(statements[4], intType, intType);
3901 } 3933 }
3902 3934
3903 // Test that local variables in method bodies are inferred appropriately 3935 // Test that local variables in method bodies are inferred appropriately
3904 void test_perform_inference_cross_unit_instance() { 3936 void test_perform_inference_cross_unit_instance() {
3905 List<Source> sources = newSources({ 3937 List<Source> sources = newSources({
(...skipping 19 matching lines...) Expand all
3925 }); 3957 });
3926 List<dynamic> units = 3958 List<dynamic> units =
3927 computeLibraryResults(sources, RESOLVED_UNIT10).toList(); 3959 computeLibraryResults(sources, RESOLVED_UNIT10).toList();
3928 CompilationUnit unit0 = units[0]; 3960 CompilationUnit unit0 = units[0];
3929 CompilationUnit unit1 = units[1]; 3961 CompilationUnit unit1 = units[1];
3930 CompilationUnit unit2 = units[2]; 3962 CompilationUnit unit2 = units[2];
3931 3963
3932 InterfaceType intType = context.typeProvider.intType; 3964 InterfaceType intType = context.typeProvider.intType;
3933 3965
3934 assertVariableDeclarationTypes( 3966 assertVariableDeclarationTypes(
3935 getFieldInClass(unit0, "A", "a2"), intType, intType); 3967 AstFinder.getFieldInClass(unit0, "A", "a2"), intType, intType);
3936 3968
3937 assertVariableDeclarationTypes( 3969 assertVariableDeclarationTypes(
3938 getFieldInClass(unit1, "B", "b2"), intType, intType); 3970 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType);
3939 3971
3940 List<Statement> statements = 3972 List<Statement> statements =
3941 getStatementsInTopLevelFunction(unit2, "test1"); 3973 AstFinder.getStatementsInTopLevelFunction(unit2, "test1");
3942 3974
3943 assertAssignmentStatementTypes(statements[1], intType, intType); 3975 assertAssignmentStatementTypes(statements[1], intType, intType);
3944 } 3976 }
3945 3977
3946 // Test inference interactions between local variables and fields 3978 // Test inference interactions between local variables and fields
3947 void test_perform_inference_cross_unit_instance_member() { 3979 void test_perform_inference_cross_unit_instance_member() {
3948 List<Source> sources = newSources({ 3980 List<Source> sources = newSources({
3949 '/a.dart': ''' 3981 '/a.dart': '''
3950 import 'b.dart'; 3982 import 'b.dart';
3951 var bar = new B(); 3983 var bar = new B();
(...skipping 20 matching lines...) Expand all
3972 }); 4004 });
3973 List<dynamic> units = 4005 List<dynamic> units =
3974 computeLibraryResults(sources, RESOLVED_UNIT10).toList(); 4006 computeLibraryResults(sources, RESOLVED_UNIT10).toList();
3975 CompilationUnit unit0 = units[0]; 4007 CompilationUnit unit0 = units[0];
3976 CompilationUnit unit2 = units[2]; 4008 CompilationUnit unit2 = units[2];
3977 4009
3978 InterfaceType intType = context.typeProvider.intType; 4010 InterfaceType intType = context.typeProvider.intType;
3979 InterfaceType stringType = context.typeProvider.stringType; 4011 InterfaceType stringType = context.typeProvider.stringType;
3980 4012
3981 assertVariableDeclarationStatementTypes( 4013 assertVariableDeclarationStatementTypes(
3982 getStatementsInTopLevelFunction(unit0, "foo")[0], stringType, intType); 4014 AstFinder.getStatementsInTopLevelFunction(unit0, "foo")[0],
4015 stringType,
4016 intType);
3983 assertVariableDeclarationStatementTypes( 4017 assertVariableDeclarationStatementTypes(
3984 getStatementsInTopLevelFunction(unit2, "foo")[0], stringType, intType); 4018 AstFinder.getStatementsInTopLevelFunction(unit2, "foo")[0],
4019 stringType,
4020 intType);
3985 } 4021 }
3986 4022
3987 // Test inference interactions between local variables and top level 4023 // Test inference interactions between local variables and top level
3988 // variables 4024 // variables
3989 void test_perform_inference_cross_unit_non_cyclic() { 4025 void test_perform_inference_cross_unit_non_cyclic() {
3990 AnalysisTarget firstSource = newSource( 4026 AnalysisTarget firstSource = newSource(
3991 '/a.dart', 4027 '/a.dart',
3992 ''' 4028 '''
3993 var x = 2; 4029 var x = 2;
3994 class A { static var x = 2; } 4030 class A { static var x = 2; }
(...skipping 16 matching lines...) Expand all
4011 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT10); 4047 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT10);
4012 CompilationUnit unit1 = outputs[RESOLVED_UNIT10]; 4048 CompilationUnit unit1 = outputs[RESOLVED_UNIT10];
4013 computeResult( 4049 computeResult(
4014 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT10); 4050 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT10);
4015 CompilationUnit unit2 = outputs[RESOLVED_UNIT10]; 4051 CompilationUnit unit2 = outputs[RESOLVED_UNIT10];
4016 4052
4017 InterfaceType intType = context.typeProvider.intType; 4053 InterfaceType intType = context.typeProvider.intType;
4018 InterfaceType stringType = context.typeProvider.stringType; 4054 InterfaceType stringType = context.typeProvider.stringType;
4019 4055
4020 assertVariableDeclarationTypes( 4056 assertVariableDeclarationTypes(
4021 getTopLevelVariable(unit1, "x"), intType, intType); 4057 AstFinder.getTopLevelVariable(unit1, "x"), intType, intType);
4022 assertVariableDeclarationTypes( 4058 assertVariableDeclarationTypes(
4023 getFieldInClass(unit1, "A", "x"), intType, intType); 4059 AstFinder.getFieldInClass(unit1, "A", "x"), intType, intType);
4024 4060
4025 assertVariableDeclarationTypes( 4061 assertVariableDeclarationTypes(
4026 getTopLevelVariable(unit2, "y"), intType, intType); 4062 AstFinder.getTopLevelVariable(unit2, "y"), intType, intType);
4027 assertVariableDeclarationTypes( 4063 assertVariableDeclarationTypes(
4028 getFieldInClass(unit2, "B", "y"), intType, intType); 4064 AstFinder.getFieldInClass(unit2, "B", "y"), intType, intType);
4029 4065
4030 List<Statement> statements = 4066 List<Statement> statements =
4031 getStatementsInTopLevelFunction(unit2, "test1"); 4067 AstFinder.getStatementsInTopLevelFunction(unit2, "test1");
4032 4068
4033 assertAssignmentStatementTypes(statements[0], intType, stringType); 4069 assertAssignmentStatementTypes(statements[0], intType, stringType);
4034 assertAssignmentStatementTypes(statements[1], intType, stringType); 4070 assertAssignmentStatementTypes(statements[1], intType, stringType);
4035 } 4071 }
4036 4072
4037 // Test that inference does not propagate from null 4073 // Test that inference does not propagate from null
4038 void test_perform_inference_cross_unit_static_instance() { 4074 void test_perform_inference_cross_unit_static_instance() {
4039 List<Source> sources = newSources({ 4075 List<Source> sources = newSources({
4040 '/a.dart': ''' 4076 '/a.dart': '''
4041 import 'b.dart'; 4077 import 'b.dart';
(...skipping 21 matching lines...) Expand all
4063 }); 4099 });
4064 List<dynamic> units = 4100 List<dynamic> units =
4065 computeLibraryResults(sources, RESOLVED_UNIT10).toList(); 4101 computeLibraryResults(sources, RESOLVED_UNIT10).toList();
4066 CompilationUnit unit0 = units[0]; 4102 CompilationUnit unit0 = units[0];
4067 CompilationUnit unit1 = units[1]; 4103 CompilationUnit unit1 = units[1];
4068 CompilationUnit unit2 = units[2]; 4104 CompilationUnit unit2 = units[2];
4069 4105
4070 InterfaceType intType = context.typeProvider.intType; 4106 InterfaceType intType = context.typeProvider.intType;
4071 4107
4072 assertVariableDeclarationTypes( 4108 assertVariableDeclarationTypes(
4073 getFieldInClass(unit0, "A", "a1"), intType, intType); 4109 AstFinder.getFieldInClass(unit0, "A", "a1"), intType, intType);
4074 assertVariableDeclarationTypes( 4110 assertVariableDeclarationTypes(
4075 getFieldInClass(unit0, "A", "a2"), intType, intType); 4111 AstFinder.getFieldInClass(unit0, "A", "a2"), intType, intType);
4076 4112
4077 assertVariableDeclarationTypes( 4113 assertVariableDeclarationTypes(
4078 getFieldInClass(unit1, "B", "b1"), intType, intType); 4114 AstFinder.getFieldInClass(unit1, "B", "b1"), intType, intType);
4079 assertVariableDeclarationTypes( 4115 assertVariableDeclarationTypes(
4080 getFieldInClass(unit1, "B", "b2"), intType, intType); 4116 AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType);
4081 4117
4082 List<Statement> statements = 4118 List<Statement> statements =
4083 getStatementsInTopLevelFunction(unit2, "test1"); 4119 AstFinder.getStatementsInTopLevelFunction(unit2, "test1");
4084 4120
4085 assertAssignmentStatementTypes(statements[1], intType, intType); 4121 assertAssignmentStatementTypes(statements[1], intType, intType);
4086 assertAssignmentStatementTypes(statements[2], intType, intType); 4122 assertAssignmentStatementTypes(statements[2], intType, intType);
4087 } 4123 }
4088 4124
4089 // Test inference across units (non-cyclic) 4125 // Test inference across units (non-cyclic)
4090 void test_perform_inference_local_variables() { 4126 void test_perform_inference_local_variables() {
4091 AnalysisTarget source = newSource( 4127 AnalysisTarget source = newSource(
4092 '/test.dart', 4128 '/test.dart',
4093 ''' 4129 '''
4094 test() { 4130 test() {
4095 int x = 3; 4131 int x = 3;
4096 x = "hi"; 4132 x = "hi";
4097 var y = 3; 4133 var y = 3;
4098 y = "hi"; 4134 y = "hi";
4099 } 4135 }
4100 '''); 4136 ''');
4101 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10); 4137 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10);
4102 CompilationUnit unit = outputs[RESOLVED_UNIT10]; 4138 CompilationUnit unit = outputs[RESOLVED_UNIT10];
4103 4139
4104 InterfaceType intType = context.typeProvider.intType; 4140 InterfaceType intType = context.typeProvider.intType;
4105 InterfaceType stringType = context.typeProvider.stringType; 4141 InterfaceType stringType = context.typeProvider.stringType;
4106 4142
4107 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); 4143 List<Statement> statements =
4144 AstFinder.getStatementsInTopLevelFunction(unit, "test");
4108 4145
4109 assertVariableDeclarationStatementTypes(statements[0], intType, intType); 4146 assertVariableDeclarationStatementTypes(statements[0], intType, intType);
4110 assertAssignmentStatementTypes(statements[1], intType, stringType); 4147 assertAssignmentStatementTypes(statements[1], intType, stringType);
4111 assertVariableDeclarationStatementTypes(statements[2], intType, intType); 4148 assertVariableDeclarationStatementTypes(statements[2], intType, intType);
4112 assertAssignmentStatementTypes(statements[3], intType, stringType); 4149 assertAssignmentStatementTypes(statements[3], intType, stringType);
4113 } 4150 }
4114 4151
4115 // Test inference across units (cyclic) 4152 // Test inference across units (cyclic)
4116 void test_perform_inference_local_variables_fields() { 4153 void test_perform_inference_local_variables_fields() {
4117 AnalysisTarget source = newSource( 4154 AnalysisTarget source = newSource(
(...skipping 17 matching lines...) Expand all
4135 int y; // field def after use 4172 int y; // field def after use
4136 final z = 42; // should infer `int` 4173 final z = 42; // should infer `int`
4137 } 4174 }
4138 '''); 4175 ''');
4139 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10); 4176 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10);
4140 CompilationUnit unit = outputs[RESOLVED_UNIT10]; 4177 CompilationUnit unit = outputs[RESOLVED_UNIT10];
4141 4178
4142 InterfaceType intType = context.typeProvider.intType; 4179 InterfaceType intType = context.typeProvider.intType;
4143 InterfaceType stringType = context.typeProvider.stringType; 4180 InterfaceType stringType = context.typeProvider.stringType;
4144 4181
4145 List<Statement> statements = getStatementsInMethod(unit, "A", "test1"); 4182 List<Statement> statements =
4183 AstFinder.getStatementsInMethod(unit, "A", "test1");
4146 4184
4147 assertVariableDeclarationStatementTypes(statements[0], intType, intType); 4185 assertVariableDeclarationStatementTypes(statements[0], intType, intType);
4148 assertAssignmentStatementTypes(statements[1], intType, stringType); 4186 assertAssignmentStatementTypes(statements[1], intType, stringType);
4149 assertAssignmentStatementTypes(statements[2], intType, intType); 4187 assertAssignmentStatementTypes(statements[2], intType, intType);
4150 4188
4151 assertVariableDeclarationStatementTypes(statements[3], intType, intType); 4189 assertVariableDeclarationStatementTypes(statements[3], intType, intType);
4152 assertAssignmentStatementTypes(statements[4], intType, stringType); 4190 assertAssignmentStatementTypes(statements[4], intType, stringType);
4153 assertAssignmentStatementTypes(statements[5], intType, intType); 4191 assertAssignmentStatementTypes(statements[5], intType, intType);
4154 4192
4155 assertVariableDeclarationStatementTypes(statements[6], intType, intType); 4193 assertVariableDeclarationStatementTypes(statements[6], intType, intType);
4156 assertAssignmentStatementTypes(statements[7], intType, stringType); 4194 assertAssignmentStatementTypes(statements[7], intType, stringType);
4157 assertAssignmentStatementTypes(statements[8], intType, intType); 4195 assertAssignmentStatementTypes(statements[8], intType, intType);
4158 4196
4159 assertVariableDeclarationTypes( 4197 assertVariableDeclarationTypes(
4160 getFieldInClass(unit, "A", "x"), intType, intType); 4198 AstFinder.getFieldInClass(unit, "A", "x"), intType, intType);
4161 assertVariableDeclarationTypes( 4199 assertVariableDeclarationTypes(
4162 getFieldInClass(unit, "A", "z"), intType, intType); 4200 AstFinder.getFieldInClass(unit, "A", "z"), intType, intType);
4163 } 4201 }
4164 4202
4165 // Test inference of instance fields across units 4203 // Test inference of instance fields across units
4166 void test_perform_inference_local_variables_topLevel() { 4204 void test_perform_inference_local_variables_topLevel() {
4167 AnalysisTarget source = newSource( 4205 AnalysisTarget source = newSource(
4168 '/test.dart', 4206 '/test.dart',
4169 ''' 4207 '''
4170 int x = 0; 4208 int x = 0;
4171 4209
4172 test1() { 4210 test1() {
(...skipping 10 matching lines...) Expand all
4183 4221
4184 int y = 0; // field def after use 4222 int y = 0; // field def after use
4185 final z = 42; // should infer `int` 4223 final z = 42; // should infer `int`
4186 '''); 4224 ''');
4187 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10); 4225 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10);
4188 CompilationUnit unit = outputs[RESOLVED_UNIT10]; 4226 CompilationUnit unit = outputs[RESOLVED_UNIT10];
4189 4227
4190 InterfaceType intType = context.typeProvider.intType; 4228 InterfaceType intType = context.typeProvider.intType;
4191 InterfaceType stringType = context.typeProvider.stringType; 4229 InterfaceType stringType = context.typeProvider.stringType;
4192 4230
4193 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test1"); 4231 List<Statement> statements =
4232 AstFinder.getStatementsInTopLevelFunction(unit, "test1");
4194 4233
4195 assertVariableDeclarationStatementTypes(statements[0], intType, intType); 4234 assertVariableDeclarationStatementTypes(statements[0], intType, intType);
4196 assertAssignmentStatementTypes(statements[1], intType, stringType); 4235 assertAssignmentStatementTypes(statements[1], intType, stringType);
4197 assertAssignmentStatementTypes(statements[2], intType, intType); 4236 assertAssignmentStatementTypes(statements[2], intType, intType);
4198 4237
4199 assertVariableDeclarationStatementTypes(statements[3], intType, intType); 4238 assertVariableDeclarationStatementTypes(statements[3], intType, intType);
4200 assertAssignmentStatementTypes(statements[4], intType, stringType); 4239 assertAssignmentStatementTypes(statements[4], intType, stringType);
4201 assertAssignmentStatementTypes(statements[5], intType, intType); 4240 assertAssignmentStatementTypes(statements[5], intType, intType);
4202 4241
4203 assertVariableDeclarationStatementTypes(statements[6], intType, intType); 4242 assertVariableDeclarationStatementTypes(statements[6], intType, intType);
4204 assertAssignmentStatementTypes(statements[7], intType, stringType); 4243 assertAssignmentStatementTypes(statements[7], intType, stringType);
4205 assertAssignmentStatementTypes(statements[8], intType, intType); 4244 assertAssignmentStatementTypes(statements[8], intType, intType);
4206 4245
4207 assertVariableDeclarationTypes( 4246 assertVariableDeclarationTypes(
4208 getTopLevelVariable(unit, "x"), intType, intType); 4247 AstFinder.getTopLevelVariable(unit, "x"), intType, intType);
4209 assertVariableDeclarationTypes( 4248 assertVariableDeclarationTypes(
4210 getTopLevelVariable(unit, "y"), intType, intType); 4249 AstFinder.getTopLevelVariable(unit, "y"), intType, intType);
4211 assertVariableDeclarationTypes( 4250 assertVariableDeclarationTypes(
4212 getTopLevelVariable(unit, "z"), intType, intType); 4251 AstFinder.getTopLevelVariable(unit, "z"), intType, intType);
4213 } 4252 }
4214 4253
4215 // Test inference between static and instance fields 4254 // Test inference between static and instance fields
4216 void test_perform_inference_null() { 4255 void test_perform_inference_null() {
4217 AnalysisTarget source = newSource( 4256 AnalysisTarget source = newSource(
4218 '/test.dart', 4257 '/test.dart',
4219 ''' 4258 '''
4220 var x = null; 4259 var x = null;
4221 var y = 3; 4260 var y = 3;
4222 class A { 4261 class A {
(...skipping 15 matching lines...) Expand all
4238 '''); 4277 ''');
4239 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10); 4278 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10);
4240 CompilationUnit unit = outputs[RESOLVED_UNIT10]; 4279 CompilationUnit unit = outputs[RESOLVED_UNIT10];
4241 4280
4242 InterfaceType intType = context.typeProvider.intType; 4281 InterfaceType intType = context.typeProvider.intType;
4243 InterfaceType stringType = context.typeProvider.stringType; 4282 InterfaceType stringType = context.typeProvider.stringType;
4244 DartType bottomType = context.typeProvider.bottomType; 4283 DartType bottomType = context.typeProvider.bottomType;
4245 DartType dynamicType = context.typeProvider.dynamicType; 4284 DartType dynamicType = context.typeProvider.dynamicType;
4246 4285
4247 assertVariableDeclarationTypes( 4286 assertVariableDeclarationTypes(
4248 getTopLevelVariable(unit, "x"), dynamicType, bottomType); 4287 AstFinder.getTopLevelVariable(unit, "x"), dynamicType, bottomType);
4249 assertVariableDeclarationTypes( 4288 assertVariableDeclarationTypes(
4250 getTopLevelVariable(unit, "y"), intType, intType); 4289 AstFinder.getTopLevelVariable(unit, "y"), intType, intType);
4251 assertVariableDeclarationTypes( 4290 assertVariableDeclarationTypes(
4252 getFieldInClass(unit, "A", "x"), dynamicType, bottomType); 4291 AstFinder.getFieldInClass(unit, "A", "x"), dynamicType, bottomType);
4253 assertVariableDeclarationTypes( 4292 assertVariableDeclarationTypes(
4254 getFieldInClass(unit, "A", "y"), intType, intType); 4293 AstFinder.getFieldInClass(unit, "A", "y"), intType, intType);
4255 assertVariableDeclarationTypes( 4294 assertVariableDeclarationTypes(
4256 getFieldInClass(unit, "A", "x2"), dynamicType, bottomType); 4295 AstFinder.getFieldInClass(unit, "A", "x2"), dynamicType, bottomType);
4257 assertVariableDeclarationTypes( 4296 assertVariableDeclarationTypes(
4258 getFieldInClass(unit, "A", "y2"), intType, intType); 4297 AstFinder.getFieldInClass(unit, "A", "y2"), intType, intType);
4259 4298
4260 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); 4299 List<Statement> statements =
4300 AstFinder.getStatementsInTopLevelFunction(unit, "test");
4261 4301
4262 assertAssignmentStatementTypes(statements[0], dynamicType, stringType); 4302 assertAssignmentStatementTypes(statements[0], dynamicType, stringType);
4263 assertAssignmentStatementTypes(statements[1], intType, stringType); 4303 assertAssignmentStatementTypes(statements[1], intType, stringType);
4264 assertAssignmentStatementTypes(statements[2], dynamicType, stringType); 4304 assertAssignmentStatementTypes(statements[2], dynamicType, stringType);
4265 assertAssignmentStatementTypes(statements[3], intType, stringType); 4305 assertAssignmentStatementTypes(statements[3], intType, stringType);
4266 assertAssignmentStatementTypes(statements[4], dynamicType, stringType); 4306 assertAssignmentStatementTypes(statements[4], dynamicType, stringType);
4267 assertAssignmentStatementTypes(statements[5], intType, stringType); 4307 assertAssignmentStatementTypes(statements[5], intType, stringType);
4268 } 4308 }
4269 4309
4270 // Test inference between fields and method bodies 4310 // Test inference between fields and method bodies
4271 void test_perform_local_explicit_disabled() { 4311 void test_perform_local_explicit_disabled() {
4272 AnalysisTarget source = newSource( 4312 AnalysisTarget source = newSource(
4273 '/test.dart', 4313 '/test.dart',
4274 ''' 4314 '''
4275 test() { 4315 test() {
4276 int x = 3; 4316 int x = 3;
4277 x = "hi"; 4317 x = "hi";
4278 } 4318 }
4279 '''); 4319 ''');
4280 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10); 4320 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10);
4281 CompilationUnit unit = outputs[RESOLVED_UNIT10]; 4321 CompilationUnit unit = outputs[RESOLVED_UNIT10];
4282 4322
4283 InterfaceType intType = context.typeProvider.intType; 4323 InterfaceType intType = context.typeProvider.intType;
4284 InterfaceType stringType = context.typeProvider.stringType; 4324 InterfaceType stringType = context.typeProvider.stringType;
4285 4325
4286 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); 4326 List<Statement> statements =
4327 AstFinder.getStatementsInTopLevelFunction(unit, "test");
4287 VariableDeclaration decl = 4328 VariableDeclaration decl =
4288 (statements[0] as VariableDeclarationStatement).variables.variables[0]; 4329 (statements[0] as VariableDeclarationStatement).variables.variables[0];
4289 expect(decl.element.type, intType); 4330 expect(decl.element.type, intType);
4290 expect(decl.initializer.staticType, intType); 4331 expect(decl.initializer.staticType, intType);
4291 4332
4292 ExpressionStatement statement = statements[1]; 4333 ExpressionStatement statement = statements[1];
4293 AssignmentExpression assgn = statement.expression; 4334 AssignmentExpression assgn = statement.expression;
4294 expect(assgn.leftHandSide.staticType, intType); 4335 expect(assgn.leftHandSide.staticType, intType);
4295 expect(assgn.rightHandSide.staticType, stringType); 4336 expect(assgn.rightHandSide.staticType, stringType);
4296 } 4337 }
(...skipping 17 matching lines...) Expand all
4314 a[0]; 4355 a[0];
4315 } 4356 }
4316 '''); 4357 ''');
4317 computeResult(new LibrarySpecificUnit(source, source), STRONG_MODE_ERRORS); 4358 computeResult(new LibrarySpecificUnit(source, source), STRONG_MODE_ERRORS);
4318 CompilationUnit unit = outputs[RESOLVED_UNIT]; 4359 CompilationUnit unit = outputs[RESOLVED_UNIT];
4319 4360
4320 // validate 4361 // validate
4321 _fillErrorListener(STRONG_MODE_ERRORS); 4362 _fillErrorListener(STRONG_MODE_ERRORS);
4322 expect(errorListener.errors, isEmpty); 4363 expect(errorListener.errors, isEmpty);
4323 4364
4324 List<Statement> statements = getStatementsInTopLevelFunction(unit, "main"); 4365 List<Statement> statements =
4366 AstFinder.getStatementsInTopLevelFunction(unit, "main");
4325 ExpressionStatement statement = statements[1]; 4367 ExpressionStatement statement = statements[1];
4326 IndexExpression idx = statement.expression; 4368 IndexExpression idx = statement.expression;
4327 expect(DynamicInvoke.get(idx.target), isNotNull); 4369 expect(DynamicInvoke.get(idx.target), isNotNull);
4328 expect(DynamicInvoke.get(idx.target), isNotNull); 4370 expect(DynamicInvoke.get(idx.target), isNotNull);
4329 expect(DynamicInvoke.get(idx.target), isTrue); 4371 expect(DynamicInvoke.get(idx.target), isTrue);
4330 } 4372 }
4331 4373
4332 void test_perform_verifyError() { 4374 void test_perform_verifyError() {
4333 enableStrongMode(); 4375 enableStrongMode();
4334 AnalysisTarget source = newSource( 4376 AnalysisTarget source = newSource(
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
4507 4549
4508 /** 4550 /**
4509 * Enable strong mode in the current analysis context. 4551 * Enable strong mode in the current analysis context.
4510 */ 4552 */
4511 void enableStrongMode() { 4553 void enableStrongMode() {
4512 AnalysisOptionsImpl options = context.analysisOptions; 4554 AnalysisOptionsImpl options = context.analysisOptions;
4513 options.strongMode = true; 4555 options.strongMode = true;
4514 context.analysisOptions = options; 4556 context.analysisOptions = options;
4515 } 4557 }
4516 4558
4517 /**
4518 * Return the declaration of the class with the given [className] in the given
4519 * compilation [unit].
4520 */
4521 ClassDeclaration getClass(CompilationUnit unit, String className) {
4522 NodeList<CompilationUnitMember> unitMembers = unit.declarations;
4523 for (CompilationUnitMember unitMember in unitMembers) {
4524 if (unitMember is ClassDeclaration && unitMember.name.name == className) {
4525 return unitMember;
4526 }
4527 }
4528 fail('No class named $className in ${unit.element.source}');
4529 return null;
4530 }
4531
4532 /**
4533 * Return the declaration of the field with the given [fieldName] in the class
4534 * with the given [className] in the given compilation [unit].
4535 */
4536 VariableDeclaration getFieldInClass(
4537 CompilationUnit unit, String className, String fieldName) {
4538 ClassDeclaration unitMember = getClass(unit, className);
4539 NodeList<ClassMember> classMembers = unitMember.members;
4540 for (ClassMember classMember in classMembers) {
4541 if (classMember is FieldDeclaration) {
4542 NodeList<VariableDeclaration> fields = classMember.fields.variables;
4543 for (VariableDeclaration field in fields) {
4544 if (field.name.name == fieldName) {
4545 return field;
4546 }
4547 }
4548 }
4549 }
4550 fail('No field named $fieldName in $className');
4551 return null;
4552 }
4553
4554 /**
4555 * Return the element of the field with the given [fieldName] in the class
4556 * with the given [className] in the given compilation [unit].
4557 */
4558 FieldElement getFieldInClassElement(
4559 CompilationUnit unit, String className, String fieldName) {
4560 return getFieldInClass(unit, className, fieldName)?.name?.staticElement;
4561 }
4562
4563 /**
4564 * Return the declaration of the method with the given [methodName] in the
4565 * class with the given [className] in the given compilation [unit].
4566 */
4567 MethodDeclaration getMethodInClass(
4568 CompilationUnit unit, String className, String methodName) {
4569 ClassDeclaration unitMember = getClass(unit, className);
4570 NodeList<ClassMember> classMembers = unitMember.members;
4571 for (ClassMember classMember in classMembers) {
4572 if (classMember is MethodDeclaration) {
4573 if (classMember.name.name == methodName) {
4574 return classMember;
4575 }
4576 }
4577 }
4578 fail('No method named $methodName in $className');
4579 return null;
4580 }
4581
4582 List<Statement> getStatementsInMethod(
4583 CompilationUnit unit, String className, String methodName) {
4584 MethodDeclaration method = getMethodInClass(unit, className, methodName);
4585 BlockFunctionBody body = method.body;
4586 return body.block.statements;
4587 }
4588
4589 List<Statement> getStatementsInTopLevelFunction(
4590 CompilationUnit unit, String functionName) {
4591 FunctionDeclaration function = getTopLevelFunction(unit, functionName);
4592 BlockFunctionBody body = function.functionExpression.body;
4593 return body.block.statements;
4594 }
4595
4596 /**
4597 * Return the declaration of the top-level function with the given
4598 * [functionName] in the given compilation [unit].
4599 */
4600 FunctionDeclaration getTopLevelFunction(
4601 CompilationUnit unit, String functionName) {
4602 NodeList<CompilationUnitMember> unitMembers = unit.declarations;
4603 for (CompilationUnitMember unitMember in unitMembers) {
4604 if (unitMember is FunctionDeclaration) {
4605 if (unitMember.name.name == functionName) {
4606 return unitMember;
4607 }
4608 }
4609 }
4610 return null;
4611 }
4612
4613 /**
4614 * Return the declaration of the top-level variable with the given
4615 * [variableName] in the given compilation [unit].
4616 */
4617 VariableDeclaration getTopLevelVariable(
4618 CompilationUnit unit, String variableName) {
4619 NodeList<CompilationUnitMember> unitMembers = unit.declarations;
4620 for (CompilationUnitMember unitMember in unitMembers) {
4621 if (unitMember is TopLevelVariableDeclaration) {
4622 NodeList<VariableDeclaration> variables =
4623 unitMember.variables.variables;
4624 for (VariableDeclaration variable in variables) {
4625 if (variable.name.name == variableName) {
4626 return variable;
4627 }
4628 }
4629 }
4630 }
4631 return null;
4632 }
4633
4634 /**
4635 * Return the top-level variable element with the given [name].
4636 */
4637 TopLevelVariableElement getTopLevelVariableElement(
4638 CompilationUnit unit, String name) {
4639 return getTopLevelVariable(unit, name)?.name?.staticElement;
4640 }
4641
4642 void setUp() { 4559 void setUp() {
4643 super.setUp(); 4560 super.setUp();
4644 emptySource = newSource('/test.dart'); 4561 emptySource = newSource('/test.dart');
4645 } 4562 }
4646 4563
4647 /** 4564 /**
4648 * Fill [errorListener] with [result] errors in the current [task]. 4565 * Fill [errorListener] with [result] errors in the current [task].
4649 */ 4566 */
4650 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { 4567 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) {
4651 List<AnalysisError> errors = task.outputs[result]; 4568 List<AnalysisError> errors = task.outputs[result];
4652 expect(errors, isNotNull, reason: result.name); 4569 expect(errors, isNotNull, reason: result.name);
4653 errorListener = new GatheringErrorListener(); 4570 errorListener = new GatheringErrorListener();
4654 errorListener.addAll(errors); 4571 errorListener.addAll(errors);
4655 } 4572 }
4656 } 4573 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698