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

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

Issue 1386023002: Resolve ordering issues. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 months 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 runReflectiveTests(GatherUsedImportedElementsTaskTest); 48 runReflectiveTests(GatherUsedImportedElementsTaskTest);
49 runReflectiveTests(GatherUsedLocalElementsTaskTest); 49 runReflectiveTests(GatherUsedLocalElementsTaskTest);
50 runReflectiveTests(GenerateHintsTaskTest); 50 runReflectiveTests(GenerateHintsTaskTest);
51 runReflectiveTests(InferInstanceMembersInUnitTaskTest); 51 runReflectiveTests(InferInstanceMembersInUnitTaskTest);
52 runReflectiveTests(InferStaticVariableTypesInUnitTaskTest); 52 runReflectiveTests(InferStaticVariableTypesInUnitTaskTest);
53 runReflectiveTests(InferStaticVariableTypeTaskTest); 53 runReflectiveTests(InferStaticVariableTypeTaskTest);
54 runReflectiveTests(LibraryErrorsReadyTaskTest); 54 runReflectiveTests(LibraryErrorsReadyTaskTest);
55 runReflectiveTests(LibraryUnitErrorsTaskTest); 55 runReflectiveTests(LibraryUnitErrorsTaskTest);
56 runReflectiveTests(ParseDartTaskTest); 56 runReflectiveTests(ParseDartTaskTest);
57 runReflectiveTests(PartiallyResolveUnitReferencesTaskTest); 57 runReflectiveTests(PartiallyResolveUnitReferencesTaskTest);
58 runReflectiveTests(ResolveFunctionBodiesInUnitTaskTest); 58 runReflectiveTests(ResolveUnitTaskTest);
59 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); 59 runReflectiveTests(ResolveLibraryTypeNamesTaskTest);
60 runReflectiveTests(ResolveUnitTypeNamesTaskTest); 60 runReflectiveTests(ResolveUnitTypeNamesTaskTest);
61 runReflectiveTests(ResolveVariableReferencesTaskTest); 61 runReflectiveTests(ResolveVariableReferencesTaskTest);
62 runReflectiveTests(ScanDartTaskTest); 62 runReflectiveTests(ScanDartTaskTest);
63 runReflectiveTests(StrongModeInferenceTest); 63 runReflectiveTests(StrongModeInferenceTest);
64 runReflectiveTests(VerifyUnitTaskTest); 64 runReflectiveTests(VerifyUnitTaskTest);
65 } 65 }
66 66
67 isInstanceOf isBuildCompilationUnitElementTask = 67 isInstanceOf isBuildCompilationUnitElementTask =
68 new isInstanceOf<BuildCompilationUnitElementTask>(); 68 new isInstanceOf<BuildCompilationUnitElementTask>();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 new isInstanceOf<InferStaticVariableTypesInUnitTask>(); 104 new isInstanceOf<InferStaticVariableTypesInUnitTask>();
105 isInstanceOf isInferStaticVariableTypeTask = 105 isInstanceOf isInferStaticVariableTypeTask =
106 new isInstanceOf<InferStaticVariableTypeTask>(); 106 new isInstanceOf<InferStaticVariableTypeTask>();
107 isInstanceOf isLibraryErrorsReadyTask = 107 isInstanceOf isLibraryErrorsReadyTask =
108 new isInstanceOf<LibraryErrorsReadyTask>(); 108 new isInstanceOf<LibraryErrorsReadyTask>();
109 isInstanceOf isLibraryUnitErrorsTask = 109 isInstanceOf isLibraryUnitErrorsTask =
110 new isInstanceOf<LibraryUnitErrorsTask>(); 110 new isInstanceOf<LibraryUnitErrorsTask>();
111 isInstanceOf isParseDartTask = new isInstanceOf<ParseDartTask>(); 111 isInstanceOf isParseDartTask = new isInstanceOf<ParseDartTask>();
112 isInstanceOf isPartiallyResolveUnitReferencesTask = 112 isInstanceOf isPartiallyResolveUnitReferencesTask =
113 new isInstanceOf<PartiallyResolveUnitReferencesTask>(); 113 new isInstanceOf<PartiallyResolveUnitReferencesTask>();
114 isInstanceOf isResolveFunctionBodiesInUnitTask = 114 isInstanceOf isResolveUnitTask = new isInstanceOf<ResolveUnitTask>();
115 new isInstanceOf<ResolveFunctionBodiesInUnitTask>();
116 isInstanceOf isResolveLibraryTypeNamesTask = 115 isInstanceOf isResolveLibraryTypeNamesTask =
117 new isInstanceOf<ResolveLibraryTypeNamesTask>(); 116 new isInstanceOf<ResolveLibraryTypeNamesTask>();
118 isInstanceOf isResolveUnitTypeNamesTask = 117 isInstanceOf isResolveUnitTypeNamesTask =
119 new isInstanceOf<ResolveUnitTypeNamesTask>(); 118 new isInstanceOf<ResolveUnitTypeNamesTask>();
120 isInstanceOf isResolveVariableReferencesTask = 119 isInstanceOf isResolveVariableReferencesTask =
121 new isInstanceOf<ResolveVariableReferencesTask>(); 120 new isInstanceOf<ResolveVariableReferencesTask>();
122 isInstanceOf isScanDartTask = new isInstanceOf<ScanDartTask>(); 121 isInstanceOf isScanDartTask = new isInstanceOf<ScanDartTask>();
123 isInstanceOf isVerifyUnitTask = new isInstanceOf<VerifyUnitTask>(); 122 isInstanceOf isVerifyUnitTask = new isInstanceOf<VerifyUnitTask>();
124 123
125 @reflectiveTest 124 @reflectiveTest
(...skipping 1761 matching lines...) Expand 10 before | Expand all | Expand 10 after
1887 Y m(Z x) {} 1886 Y m(Z x) {}
1888 } 1887 }
1889 class B extends A { 1888 class B extends A {
1890 var f; 1889 var f;
1891 m(x) {} 1890 m(x) {}
1892 } 1891 }
1893 class X {} 1892 class X {}
1894 class Y {} 1893 class Y {}
1895 class Z {} 1894 class Z {}
1896 '''); 1895 ''');
1897 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7, 1896 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8,
1898 matcher: isInferInstanceMembersInUnitTask); 1897 matcher: isInferInstanceMembersInUnitTask);
1899 CompilationUnit unit = outputs[RESOLVED_UNIT7]; 1898 CompilationUnit unit = outputs[RESOLVED_UNIT8];
1900 VariableDeclaration field = getFieldInClass(unit, 'B', 'f'); 1899 VariableDeclaration field = getFieldInClass(unit, 'B', 'f');
1901 MethodDeclaration method = getMethodInClass(unit, 'B', 'm'); 1900 MethodDeclaration method = getMethodInClass(unit, 'B', 'm');
1902 DartType typeX = getClass(unit, 'X').element.type; 1901 DartType typeX = getClass(unit, 'X').element.type;
1903 DartType typeY = getClass(unit, 'Y').element.type; 1902 DartType typeY = getClass(unit, 'Y').element.type;
1904 DartType typeZ = getClass(unit, 'Z').element.type; 1903 DartType typeZ = getClass(unit, 'Z').element.type;
1905 1904
1906 expect(field.element.type, typeX); 1905 expect(field.element.type, typeX);
1907 expect(method.element.returnType, typeY); 1906 expect(method.element.returnType, typeY);
1908 expect(method.element.parameters[0].type, typeZ); 1907 expect(method.element.parameters[0].type, typeZ);
1909 } 1908 }
(...skipping 11 matching lines...) Expand all
1921 '/second.dart', 1920 '/second.dart',
1922 ''' 1921 '''
1923 import 'first.dart'; 1922 import 'first.dart';
1924 1923
1925 const b = a; 1924 const b = a;
1926 class M { 1925 class M {
1927 String c = a; 1926 String c = a;
1928 } 1927 }
1929 '''); 1928 ''');
1930 computeResult( 1929 computeResult(
1931 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT7, 1930 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8,
1932 matcher: isInferInstanceMembersInUnitTask); 1931 matcher: isInferInstanceMembersInUnitTask);
1933 CompilationUnit firstUnit = outputs[RESOLVED_UNIT7]; 1932 CompilationUnit firstUnit = outputs[RESOLVED_UNIT8];
1934 computeResult( 1933 computeResult(
1935 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT7); 1934 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8);
1936 CompilationUnit secondUnit = outputs[RESOLVED_UNIT7]; 1935 CompilationUnit secondUnit = outputs[RESOLVED_UNIT8];
1937 1936
1938 VariableDeclaration variableA = getTopLevelVariable(firstUnit, 'a'); 1937 VariableDeclaration variableA = getTopLevelVariable(firstUnit, 'a');
1939 VariableDeclaration variableB = getTopLevelVariable(secondUnit, 'b'); 1938 VariableDeclaration variableB = getTopLevelVariable(secondUnit, 'b');
1940 VariableDeclaration variableC = getFieldInClass(secondUnit, 'M', 'c'); 1939 VariableDeclaration variableC = getFieldInClass(secondUnit, 'M', 'c');
1941 InterfaceType stringType = context.typeProvider.stringType; 1940 InterfaceType stringType = context.typeProvider.stringType;
1942 1941
1943 expect(variableA.element.type, stringType); 1942 expect(variableA.element.type, stringType);
1944 expect(variableB.element.type, stringType); 1943 expect(variableB.element.type, stringType);
1945 expect(variableB.initializer.staticType, stringType); 1944 expect(variableB.initializer.staticType, stringType);
1946 expect(variableC.element.type, stringType); 1945 expect(variableC.element.type, stringType);
1947 expect(variableC.initializer.staticType, stringType); 1946 expect(variableC.initializer.staticType, stringType);
1948 } 1947 }
1949 1948
1950 void test_perform_reresolution() { 1949 void test_perform_reresolution() {
1951 enableStrongMode(); 1950 enableStrongMode();
1952 AnalysisTarget source = newSource( 1951 AnalysisTarget source = newSource(
1953 '/test.dart', 1952 '/test.dart',
1954 ''' 1953 '''
1955 const topLevel = ''; 1954 const topLevel = '';
1956 class C { 1955 class C {
1957 String field = topLevel; 1956 String field = topLevel;
1958 } 1957 }
1959 '''); 1958 ''');
1960 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); 1959 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8);
1961 CompilationUnit unit = outputs[RESOLVED_UNIT7]; 1960 CompilationUnit unit = outputs[RESOLVED_UNIT8];
1962 VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel'); 1961 VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel');
1963 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field'); 1962 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field');
1964 VariableElement topLevel = topLevelDecl.name.staticElement; 1963 VariableElement topLevel = topLevelDecl.name.staticElement;
1965 VariableElement field = fieldDecl.name.staticElement; 1964 VariableElement field = fieldDecl.name.staticElement;
1966 1965
1967 InterfaceType stringType = context.typeProvider.stringType; 1966 InterfaceType stringType = context.typeProvider.stringType;
1968 expect(topLevel.type, stringType); 1967 expect(topLevel.type, stringType);
1969 expect(field.type, stringType); 1968 expect(field.type, stringType);
1970 expect(fieldDecl.initializer.staticType, stringType); 1969 expect(fieldDecl.initializer.staticType, stringType);
1971 } 1970 }
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
2118 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field3'); 2117 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field3');
2119 VariableElement topLevel = topLevelDecl.name.staticElement; 2118 VariableElement topLevel = topLevelDecl.name.staticElement;
2120 VariableElement field = fieldDecl.name.staticElement; 2119 VariableElement field = fieldDecl.name.staticElement;
2121 2120
2122 computeResult(field, INFERRED_STATIC_VARIABLE, 2121 computeResult(field, INFERRED_STATIC_VARIABLE,
2123 matcher: isInferStaticVariableTypeTask); 2122 matcher: isInferStaticVariableTypeTask);
2124 InterfaceType stringType = context.typeProvider.stringType; 2123 InterfaceType stringType = context.typeProvider.stringType;
2125 expect(topLevel.type, stringType); 2124 expect(topLevel.type, stringType);
2126 expect(field.type, stringType); 2125 expect(field.type, stringType);
2127 expect(fieldDecl.initializer.staticType, stringType); 2126 expect(fieldDecl.initializer.staticType, stringType);
2128 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0));
2129 }
2130
2131 void test_perform_reresolution() {
2132 AnalysisTarget source = newSource(
2133 '/test.dart',
2134 '''
2135 const topLevel = '';
2136 class C {
2137 String field = topLevel;
2138 }
2139 ''');
2140 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2141 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2142 VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel');
2143 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field');
2144 VariableElement topLevel = topLevelDecl.name.staticElement;
2145 VariableElement field = fieldDecl.name.staticElement;
2146
2147 computeResult(field, INFERRED_STATIC_VARIABLE,
2148 matcher: isInferStaticVariableTypeTask);
2149 InterfaceType stringType = context.typeProvider.stringType;
2150 expect(topLevel.type, stringType);
2151 expect(field.type, stringType);
2152 expect(fieldDecl.initializer.staticType, stringType);
2153 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0));
2154 } 2127 }
2155 2128
2156 void test_perform_const() { 2129 void test_perform_const() {
2157 AnalysisTarget source = newSource( 2130 AnalysisTarget source = newSource(
2158 '/test.dart', 2131 '/test.dart',
2159 ''' 2132 '''
2160 const topLevel = "hello"; 2133 const topLevel = "hello";
2161 class C { 2134 class C {
2162 var field = topLevel; 2135 var field = topLevel;
2163 } 2136 }
2164 '''); 2137 ''');
2165 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2138 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2166 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2139 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2167 VariableElement topLevel = 2140 VariableElement topLevel =
2168 getTopLevelVariable(unit, 'topLevel').name.staticElement; 2141 getTopLevelVariable(unit, 'topLevel').name.staticElement;
2169 VariableElement field = 2142 VariableElement field =
2170 getFieldInClass(unit, 'C', 'field').name.staticElement; 2143 getFieldInClass(unit, 'C', 'field').name.staticElement;
2171 2144
2172 computeResult(field, INFERRED_STATIC_VARIABLE, 2145 computeResult(field, INFERRED_STATIC_VARIABLE,
2173 matcher: isInferStaticVariableTypeTask); 2146 matcher: isInferStaticVariableTypeTask);
2174 InterfaceType stringType = context.typeProvider.stringType; 2147 InterfaceType stringType = context.typeProvider.stringType;
2175 expect(topLevel.type, stringType); 2148 expect(topLevel.type, stringType);
2176 expect(field.type, stringType); 2149 expect(field.type, stringType);
2177 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0));
2178 } 2150 }
2179 2151
2180 void test_perform_cycle() { 2152 void test_perform_cycle() {
2181 AnalysisTarget source = newSource( 2153 AnalysisTarget source = newSource(
2182 '/test.dart', 2154 '/test.dart',
2183 ''' 2155 '''
2184 var piFirst = true; 2156 var piFirst = true;
2185 var pi = piFirst ? 3.14 : tau / 2; 2157 var pi = piFirst ? 3.14 : tau / 2;
2186 var tau = piFirst ? pi * 2 : 6.28; 2158 var tau = piFirst ? pi * 2 : 6.28;
2187 '''); 2159 ''');
2188 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2160 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2189 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2161 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2190 VariableElement piFirst = 2162 VariableElement piFirst =
2191 getTopLevelVariable(unit, 'piFirst').name.staticElement; 2163 getTopLevelVariable(unit, 'piFirst').name.staticElement;
2192 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; 2164 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement;
2193 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; 2165 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement;
2194 2166
2195 computeResult(piFirst, INFERRED_STATIC_VARIABLE, 2167 computeResult(piFirst, INFERRED_STATIC_VARIABLE,
2196 matcher: isInferStaticVariableTypeTask); 2168 matcher: isInferStaticVariableTypeTask);
2197 expect(piFirst.type, context.typeProvider.boolType); 2169 expect(piFirst.type, context.typeProvider.boolType);
2198 expect(pi.type.isDynamic, isTrue); 2170 expect(pi.type.isDynamic, isTrue);
2199 expect(tau.type.isDynamic, isTrue); 2171 expect(tau.type.isDynamic, isTrue);
2200 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0));
2201 } 2172 }
2202 2173
2203 void test_perform_error() { 2174 void test_perform_error() {
2204 AnalysisTarget source = newSource( 2175 AnalysisTarget source = newSource(
2205 '/test.dart', 2176 '/test.dart',
2206 ''' 2177 '''
2207 var a = '' / null; 2178 var a = '' / null;
2208 '''); 2179 ''');
2209 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2180 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2210 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2181 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2211 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; 2182 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement;
2212 2183
2213 computeResult(a, INFERRED_STATIC_VARIABLE, 2184 computeResult(a, INFERRED_STATIC_VARIABLE,
2214 matcher: isInferStaticVariableTypeTask); 2185 matcher: isInferStaticVariableTypeTask);
2215 expect(a.type.isDynamic, isTrue); 2186 expect(a.type.isDynamic, isTrue);
2216 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(1));
2217 } 2187 }
2218 2188
2219 void test_perform_null() { 2189 void test_perform_null() {
2220 AnalysisTarget source = newSource( 2190 AnalysisTarget source = newSource(
2221 '/test.dart', 2191 '/test.dart',
2222 ''' 2192 '''
2223 var a = null; 2193 var a = null;
2224 '''); 2194 ''');
2225 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); 2195 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
2226 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2196 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2227 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; 2197 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement;
2228 2198
2229 computeResult(a, INFERRED_STATIC_VARIABLE, 2199 computeResult(a, INFERRED_STATIC_VARIABLE,
2230 matcher: isInferStaticVariableTypeTask); 2200 matcher: isInferStaticVariableTypeTask);
2231 expect(a.type.isDynamic, isTrue); 2201 expect(a.type.isDynamic, isTrue);
2232 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0));
2233 } 2202 }
2234 } 2203 }
2235 2204
2236 @reflectiveTest 2205 @reflectiveTest
2237 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { 2206 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest {
2238 test_perform() { 2207 test_perform() {
2239 Source library = newSource( 2208 Source library = newSource(
2240 '/lib.dart', 2209 '/lib.dart',
2241 r''' 2210 r'''
2242 library lib; 2211 library lib;
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
2430 class A {} 2399 class A {}
2431 class C { 2400 class C {
2432 static final f = ''; 2401 static final f = '';
2433 var g = 0; 2402 var g = 0;
2434 } 2403 }
2435 '''); 2404 ''');
2436 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); 2405 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source);
2437 computeResult(target, RESOLVED_UNIT5, 2406 computeResult(target, RESOLVED_UNIT5,
2438 matcher: isPartiallyResolveUnitReferencesTask); 2407 matcher: isPartiallyResolveUnitReferencesTask);
2439 // Test the outputs 2408 // Test the outputs
2440 expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(5)); 2409 expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(4));
2441 CompilationUnit unit = outputs[RESOLVED_UNIT5]; 2410 CompilationUnit unit = outputs[RESOLVED_UNIT5];
2442 expect(unit, same(outputs[RESOLVED_UNIT5])); 2411 expect(unit, same(outputs[RESOLVED_UNIT5]));
2443 // Test the state of the AST 2412 // Test the state of the AST
2444 TopLevelVariableDeclaration a = unit.declarations[0]; 2413 TopLevelVariableDeclaration a = unit.declarations[0];
2445 VariableDeclaration variableA = a.variables.variables[0]; 2414 VariableDeclaration variableA = a.variables.variables[0];
2446 SimpleIdentifier initializer = variableA.initializer; 2415 SimpleIdentifier initializer = variableA.initializer;
2447 expect(initializer.staticElement, isNotNull); 2416 expect(initializer.staticElement, isNotNull);
2448 // Test the error generation
2449 _fillErrorListener(PARTIALLY_RESOLVE_REFERENCES_ERRORS);
2450 errorListener.assertNoErrors();
2451 } 2417 }
2452 2418
2453 test_perform_importExport() { 2419 test_perform_importExport() {
2454 newSource( 2420 newSource(
2455 '/a.dart', 2421 '/a.dart',
2456 ''' 2422 '''
2457 library a; 2423 library a;
2458 class A<T> { 2424 class A<T> {
2459 T m() {} 2425 T m() {}
2460 } 2426 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
2551 2517
2552 ConstructorDeclaration constructor = members[0]; 2518 ConstructorDeclaration constructor = members[0];
2553 expectReference(constructor.body, false); 2519 expectReference(constructor.body, false);
2554 2520
2555 MethodDeclaration method = members[1]; 2521 MethodDeclaration method = members[1];
2556 expectReference(method.body, false); 2522 expectReference(method.body, false);
2557 } 2523 }
2558 } 2524 }
2559 2525
2560 @reflectiveTest 2526 @reflectiveTest
2561 class ResolveFunctionBodiesInUnitTaskTest extends _AbstractDartTaskTest { 2527 class ResolveUnitTaskTest extends _AbstractDartTaskTest {
2562 void test_perform() { 2528 void test_perform() {
2563 AnalysisTarget source = newSource( 2529 AnalysisTarget source = newSource(
2564 '/test.dart', 2530 '/test.dart',
2565 ''' 2531 '''
2566 void f() { 2532 void f() {
2567 var c = new C(); 2533 var c = new C();
2568 c.m(); 2534 c.m();
2569 } 2535 }
2570 class C { 2536 class C {
2571 void m() { 2537 void m() {
2572 f(); 2538 f();
2573 } 2539 }
2574 } 2540 }
2575 '''); 2541 ''');
2576 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, 2542 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9,
2577 matcher: isResolveFunctionBodiesInUnitTask); 2543 matcher: isResolveUnitTask);
2578 CompilationUnit unit = outputs[RESOLVED_UNIT8]; 2544 CompilationUnit unit = outputs[RESOLVED_UNIT9];
2579 2545
2580 FunctionDeclaration f = unit.declarations[0]; 2546 FunctionDeclaration f = unit.declarations[0];
2581 _assertResolved(f.functionExpression.body); 2547 _assertResolved(f.functionExpression.body);
2582 2548
2583 MethodDeclaration m = (unit.declarations[1] as ClassDeclaration).members[0]; 2549 MethodDeclaration m = (unit.declarations[1] as ClassDeclaration).members[0];
2584 _assertResolved(m.body); 2550 _assertResolved(m.body);
2585 2551
2586 expect(outputs[RESOLVE_FUNCTION_BODIES_ERRORS], hasLength(0)); 2552 expect(outputs[RESOLVE_UNIT_ERRORS], hasLength(0));
2587 } 2553 }
2588 2554
2589 void _assertResolved(FunctionBody body) { 2555 void _assertResolved(FunctionBody body) {
2590 ResolutionVerifier verifier = new ResolutionVerifier(); 2556 ResolutionVerifier verifier = new ResolutionVerifier();
2591 body.accept(verifier); 2557 body.accept(verifier);
2592 verifier.assertResolved(); 2558 verifier.assertResolved();
2593 } 2559 }
2594 } 2560 }
2595 2561
2596 @reflectiveTest 2562 @reflectiveTest
2597 class StrongModeInferenceTest extends _AbstractDartTaskTest { 2563 class StrongModeInferenceTest extends _AbstractDartTaskTest {
2598
2599 @override 2564 @override
2600 void setUp() { 2565 void setUp() {
2601 super.setUp(); 2566 super.setUp();
2602 enableStrongMode(); 2567 enableStrongMode();
2603 } 2568 }
2604 2569
2570 void test_library_cycle_singleton() {
2571 Source source = newSource(
2572 '/test.dart',
2573 '''
2574 import 'dart:core';
2575 ''');
2576 computeResult(new LibrarySpecificUnit(source, source), LIBRARY_CYCLE);
2577 List<LibraryElement> component = outputs[LIBRARY_CYCLE];
2578 List<CompilationUnitElement> units = outputs[LIBRARY_CYCLE_UNITS];
2579 expect(component, hasLength(1));
2580 expect(units, hasLength(1));
2581
2582 computeResult(
2583 new LibrarySpecificUnit(source, source), LIBRARY_CYCLE_DEPENDENCIES);
2584 List<CompilationUnitElement> deps = outputs[LIBRARY_CYCLE_DEPENDENCIES];
2585 expect(deps, hasLength(1));
2586 }
2587
2588 void test_library_cycle_linear() {
2589 List<Source> sources = newSources({
2590 '/a.dart': '''
2591 ''',
2592 '/b.dart': '''
2593 import 'a.dart';
2594 '''
2595 });
2596 List<List<LibraryElement>> components =
2597 computeLibraryResults(sources, LIBRARY_CYCLE).toList();
2598 List<LibraryElement> component0 = components[0];
2599 List<LibraryElement> component1 = components[1];
2600 expect(component0, hasLength(1));
2601 expect(component1, hasLength(1));
2602
2603 List<List<CompilationUnitElement>> deps =
2604 computeLibraryResults(sources, LIBRARY_CYCLE_DEPENDENCIES).toList();
2605 List<CompilationUnitElement> dep0 = deps[0];
2606 List<CompilationUnitElement> dep1 = deps[1];
2607 expect(dep0, hasLength(1)); // dart:core
2608 expect(dep1, hasLength(2)); // dart:core, a.dart
2609 }
2610
2611 void test_library_cycle_tree() {
2612 List<Source> sources = newSources({
2613 '/a.dart': '''
2614 ''',
2615 '/b.dart': '''
2616 ''',
2617 '/c.dart': '''
2618 import 'a.dart';
2619 import 'b.dart';
2620 '''
2621 });
2622 List<List<LibraryElement>> components =
2623 computeLibraryResults(sources, LIBRARY_CYCLE).toList();
2624 List<LibraryElement> component0 = components[0];
2625 List<LibraryElement> component1 = components[1];
2626 List<LibraryElement> component2 = components[2];
2627 expect(component0, hasLength(1));
2628 expect(component1, hasLength(1));
2629 expect(component2, hasLength(1));
2630
2631 List<List<CompilationUnitElement>> deps =
2632 computeLibraryResults(sources, LIBRARY_CYCLE_DEPENDENCIES).toList();
2633 List<CompilationUnitElement> dep0 = deps[0];
2634 List<CompilationUnitElement> dep1 = deps[1];
2635 List<CompilationUnitElement> dep2 = deps[2];
2636 expect(dep0, hasLength(1)); // dart:core
2637 expect(dep1, hasLength(1)); // dart:core,
2638 expect(dep2, hasLength(3)); // dart:core, a.dart, b.dart
2639 }
2640
2641 void test_library_cycle_loop() {
2642 List<Source> sources = newSources({
2643 '/a.dart': '''
2644 import 'c.dart';
2645 ''',
2646 '/b.dart': '''
2647 import 'a.dart';
2648 ''',
2649 '/c.dart': '''
2650 import 'b.dart';
2651 '''
2652 });
2653 List<List<LibraryElement>> components =
2654 computeLibraryResults(sources, LIBRARY_CYCLE).toList();
2655 List<LibraryElement> component0 = components[0];
2656 List<LibraryElement> component1 = components[1];
2657 List<LibraryElement> component2 = components[2];
2658
2659 expect(component0, hasLength(3));
2660 expect(component1, hasLength(3));
2661 expect(component2, hasLength(3));
2662
2663 List<List<CompilationUnitElement>> deps =
2664 computeLibraryResults(sources, LIBRARY_CYCLE_DEPENDENCIES).toList();
2665 List<CompilationUnitElement> dep0 = deps[0];
2666 List<CompilationUnitElement> dep1 = deps[1];
2667 List<CompilationUnitElement> dep2 = deps[2];
2668 expect(dep0, hasLength(1)); // dart:core
2669 expect(dep1, hasLength(1)); // dart:core
2670 expect(dep2, hasLength(1)); // dart:core
2671 }
2672
2673 void test_library_cycle_self_loop() {
2674 List<Source> sources = newSources({
2675 '/a.dart': '''
2676 import 'a.dart';
2677 '''
2678 });
2679 List<List<LibraryElement>> components =
2680 computeLibraryResults(sources, LIBRARY_CYCLE).toList();
2681 List<LibraryElement> component0 = components[0];
2682
2683 expect(component0, hasLength(1));
2684
2685 List<List<CompilationUnitElement>> deps =
2686 computeLibraryResults(sources, LIBRARY_CYCLE_DEPENDENCIES).toList();
2687 List<CompilationUnitElement> dep0 = deps[0];
2688 expect(dep0, hasLength(1)); // dart:core
2689 }
2690
2691 void test_library_double_loop() {
2692 List<Source> sources = newSources({
2693 '/a.dart': '''
2694 import 'b.dart';
2695 ''',
2696 '/b.dart': '''
2697 import 'a.dart';
2698 ''',
2699 '/c.dart': '''
2700 import 'd.dart' as foo;
2701 import 'a.dart' as bar;
2702 export 'b.dart';
2703 ''',
2704 '/d.dart': '''
2705 import 'c.dart' as foo;
2706 import 'b.dart' as bar;
2707 export 'a.dart';
2708 '''
2709 });
2710 List<List<LibraryElement>> components =
2711 computeLibraryResults(sources, LIBRARY_CYCLE).toList();
2712 List<LibraryElement> component0 = components[0];
2713 List<LibraryElement> component1 = components[1];
2714 List<LibraryElement> component2 = components[2];
2715 List<LibraryElement> component3 = components[3];
2716
2717 expect(component0, hasLength(2));
2718 expect(component1, hasLength(2));
2719 expect(component2, hasLength(2));
2720 expect(component3, hasLength(2));
2721
2722 List<List<CompilationUnitElement>> deps =
2723 computeLibraryResults(sources, LIBRARY_CYCLE_DEPENDENCIES).toList();
2724 List<CompilationUnitElement> dep0 = deps[0];
2725 List<CompilationUnitElement> dep1 = deps[1];
2726 List<CompilationUnitElement> dep2 = deps[2];
2727 List<CompilationUnitElement> dep3 = deps[3];
2728 expect(dep0, hasLength(1)); // dart:core
2729 expect(dep1, hasLength(1)); // dart:core
2730 expect(dep3, hasLength(3)); // dart:core, a.dart, b.dart
2731 expect(dep3, hasLength(3)); // dart:core, a.dart, b.dart
2732 }
2733
2605 // Check that even within a static variable cycle, inferred 2734 // Check that even within a static variable cycle, inferred
2606 // types get propagated to the members of the cycle. 2735 // types get propagated to the members of the cycle.
2607 void test_perform_cycle() { 2736 void test_perform_cycle() {
2608 AnalysisTarget source = newSource( 2737 AnalysisTarget source = newSource(
2609 '/test.dart', 2738 '/test.dart',
2610 ''' 2739 '''
2611 var piFirst = true; 2740 var piFirst = true;
2612 var pi = piFirst ? 3.14 : tau / 2; 2741 var pi = piFirst ? 3.14 : tau / 2;
2613 var tau = piFirst ? pi * 2 : 6.28; 2742 var tau = piFirst ? pi * 2 : 6.28;
2614 '''); 2743 ''');
2615 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); 2744 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9);
2616 CompilationUnit unit = outputs[RESOLVED_UNIT8]; 2745 CompilationUnit unit = outputs[RESOLVED_UNIT9];
2617 VariableElement piFirst = 2746 VariableElement piFirst =
2618 getTopLevelVariable(unit, 'piFirst').name.staticElement; 2747 getTopLevelVariable(unit, 'piFirst').name.staticElement;
2619 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; 2748 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement;
2620 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; 2749 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement;
2621 Expression piFirstUse = (getTopLevelVariable(unit, 'tau').initializer 2750 Expression piFirstUse = (getTopLevelVariable(unit, 'tau').initializer
2622 as ConditionalExpression).condition; 2751 as ConditionalExpression).condition;
2623 2752
2624 expect(piFirstUse.staticType, context.typeProvider.boolType); 2753 expect(piFirstUse.staticType, context.typeProvider.boolType);
2625 expect(piFirst.type, context.typeProvider.boolType); 2754 expect(piFirst.type, context.typeProvider.boolType);
2626 expect(pi.type.isDynamic, isTrue); 2755 expect(pi.type.isDynamic, isTrue);
2627 expect(tau.type.isDynamic, isTrue); 2756 expect(tau.type.isDynamic, isTrue);
2628 } 2757 }
2629 2758
2630 void test_perform_local_explicit_disabled() { 2759 void test_perform_local_explicit_disabled() {
2631 AnalysisTarget source = newSource( 2760 AnalysisTarget source = newSource(
2632 '/test.dart', 2761 '/test.dart',
2633 ''' 2762 '''
2634 test() { 2763 test() {
2635 int x = 3; 2764 int x = 3;
2636 x = "hi"; 2765 x = "hi";
2637 } 2766 }
2638 '''); 2767 ''');
2639 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); 2768 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9);
2640 CompilationUnit unit = outputs[RESOLVED_UNIT8]; 2769 CompilationUnit unit = outputs[RESOLVED_UNIT9];
2641 2770
2642 InterfaceType intType = context.typeProvider.intType; 2771 InterfaceType intType = context.typeProvider.intType;
2643 InterfaceType stringType = context.typeProvider.stringType; 2772 InterfaceType stringType = context.typeProvider.stringType;
2644 2773
2645 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); 2774 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test");
2646 VariableDeclaration decl = 2775 VariableDeclaration decl =
2647 (statements[0] as VariableDeclarationStatement).variables.variables[0]; 2776 (statements[0] as VariableDeclarationStatement).variables.variables[0];
2648 expect(decl.element.type, intType); 2777 expect(decl.element.type, intType);
2649 expect(decl.initializer.staticType, intType); 2778 expect(decl.initializer.staticType, intType);
2650 2779
(...skipping 28 matching lines...) Expand all
2679 AnalysisTarget source = newSource( 2808 AnalysisTarget source = newSource(
2680 '/test.dart', 2809 '/test.dart',
2681 ''' 2810 '''
2682 test() { 2811 test() {
2683 int x = 3; 2812 int x = 3;
2684 x = "hi"; 2813 x = "hi";
2685 var y = 3; 2814 var y = 3;
2686 y = "hi"; 2815 y = "hi";
2687 } 2816 }
2688 '''); 2817 ''');
2689 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); 2818 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9);
2690 CompilationUnit unit = outputs[RESOLVED_UNIT8]; 2819 CompilationUnit unit = outputs[RESOLVED_UNIT9];
2691 2820
2692 InterfaceType intType = context.typeProvider.intType; 2821 InterfaceType intType = context.typeProvider.intType;
2693 InterfaceType stringType = context.typeProvider.stringType; 2822 InterfaceType stringType = context.typeProvider.stringType;
2694 2823
2695 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); 2824 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test");
2696 2825
2697 assertVariableDeclarationStatementTypes(statements[0], intType, intType); 2826 assertVariableDeclarationStatementTypes(statements[0], intType, intType);
2698 assertAssignmentStatementTypes(statements[1], intType, stringType); 2827 assertAssignmentStatementTypes(statements[1], intType, stringType);
2699 assertVariableDeclarationStatementTypes(statements[2], intType, intType); 2828 assertVariableDeclarationStatementTypes(statements[2], intType, intType);
2700 assertAssignmentStatementTypes(statements[3], intType, stringType); 2829 assertAssignmentStatementTypes(statements[3], intType, stringType);
(...skipping 16 matching lines...) Expand all
2717 b = 4; 2846 b = 4;
2718 var c = z; 2847 var c = z;
2719 c = "hi"; 2848 c = "hi";
2720 c = 4; 2849 c = 4;
2721 } 2850 }
2722 2851
2723 int y; // field def after use 2852 int y; // field def after use
2724 final z = 42; // should infer `int` 2853 final z = 42; // should infer `int`
2725 } 2854 }
2726 '''); 2855 ''');
2727 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); 2856 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9);
2728 CompilationUnit unit = outputs[RESOLVED_UNIT8]; 2857 CompilationUnit unit = outputs[RESOLVED_UNIT9];
2729 2858
2730 InterfaceType intType = context.typeProvider.intType; 2859 InterfaceType intType = context.typeProvider.intType;
2731 InterfaceType stringType = context.typeProvider.stringType; 2860 InterfaceType stringType = context.typeProvider.stringType;
2732 2861
2733 List<Statement> statements = getStatementsInMethod(unit, "A", "test1"); 2862 List<Statement> statements = getStatementsInMethod(unit, "A", "test1");
2734 2863
2735 assertVariableDeclarationStatementTypes(statements[0], intType, intType); 2864 assertVariableDeclarationStatementTypes(statements[0], intType, intType);
2736 assertAssignmentStatementTypes(statements[1], intType, stringType); 2865 assertAssignmentStatementTypes(statements[1], intType, stringType);
2737 assertAssignmentStatementTypes(statements[2], intType, intType); 2866 assertAssignmentStatementTypes(statements[2], intType, intType);
2738 2867
(...skipping 27 matching lines...) Expand all
2766 b = /*severe:StaticTypeError*/"hi"; 2895 b = /*severe:StaticTypeError*/"hi";
2767 b = 4; 2896 b = 4;
2768 var c = z; 2897 var c = z;
2769 c = /*severe:StaticTypeError*/"hi"; 2898 c = /*severe:StaticTypeError*/"hi";
2770 c = 4; 2899 c = 4;
2771 } 2900 }
2772 2901
2773 int y = 0; // field def after use 2902 int y = 0; // field def after use
2774 final z = 42; // should infer `int` 2903 final z = 42; // should infer `int`
2775 '''); 2904 ''');
2776 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); 2905 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9);
2777 CompilationUnit unit = outputs[RESOLVED_UNIT8]; 2906 CompilationUnit unit = outputs[RESOLVED_UNIT9];
2778 2907
2779 InterfaceType intType = context.typeProvider.intType; 2908 InterfaceType intType = context.typeProvider.intType;
2780 InterfaceType stringType = context.typeProvider.stringType; 2909 InterfaceType stringType = context.typeProvider.stringType;
2781 2910
2782 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test1"); 2911 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test1");
2783 2912
2784 assertVariableDeclarationStatementTypes(statements[0], intType, intType); 2913 assertVariableDeclarationStatementTypes(statements[0], intType, intType);
2785 assertAssignmentStatementTypes(statements[1], intType, stringType); 2914 assertAssignmentStatementTypes(statements[1], intType, stringType);
2786 assertAssignmentStatementTypes(statements[2], intType, intType); 2915 assertAssignmentStatementTypes(statements[2], intType, intType);
2787 2916
(...skipping 30 matching lines...) Expand all
2818 2947
2819 test() { 2948 test() {
2820 x = "hi"; 2949 x = "hi";
2821 y = /*severe:StaticTypeError*/"hi"; 2950 y = /*severe:StaticTypeError*/"hi";
2822 A.x = "hi"; 2951 A.x = "hi";
2823 A.y = /*severe:StaticTypeError*/"hi"; 2952 A.y = /*severe:StaticTypeError*/"hi";
2824 new A().x2 = "hi"; 2953 new A().x2 = "hi";
2825 new A().y2 = /*severe:StaticTypeError*/"hi"; 2954 new A().y2 = /*severe:StaticTypeError*/"hi";
2826 } 2955 }
2827 '''); 2956 ''');
2828 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); 2957 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9);
2829 CompilationUnit unit = outputs[RESOLVED_UNIT8]; 2958 CompilationUnit unit = outputs[RESOLVED_UNIT9];
2830 2959
2831 InterfaceType intType = context.typeProvider.intType; 2960 InterfaceType intType = context.typeProvider.intType;
2832 InterfaceType stringType = context.typeProvider.stringType; 2961 InterfaceType stringType = context.typeProvider.stringType;
2833 DartType bottomType = context.typeProvider.bottomType; 2962 DartType bottomType = context.typeProvider.bottomType;
2834 DartType dynamicType = context.typeProvider.dynamicType; 2963 DartType dynamicType = context.typeProvider.dynamicType;
2835 2964
2836 assertVariableDeclarationTypes( 2965 assertVariableDeclarationTypes(
2837 getTopLevelVariable(unit, "x"), dynamicType, bottomType); 2966 getTopLevelVariable(unit, "x"), dynamicType, bottomType);
2838 assertVariableDeclarationTypes( 2967 assertVariableDeclarationTypes(
2839 getTopLevelVariable(unit, "y"), intType, intType); 2968 getTopLevelVariable(unit, "y"), intType, intType);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2872 class B { static var y = A.x; } 3001 class B { static var y = A.x; }
2873 3002
2874 test1() { 3003 test1() {
2875 x = /*severe:StaticTypeError*/"hi"; 3004 x = /*severe:StaticTypeError*/"hi";
2876 y = /*severe:StaticTypeError*/"hi"; 3005 y = /*severe:StaticTypeError*/"hi";
2877 A.x = /*severe:StaticTypeError*/"hi"; 3006 A.x = /*severe:StaticTypeError*/"hi";
2878 B.y = /*severe:StaticTypeError*/"hi"; 3007 B.y = /*severe:StaticTypeError*/"hi";
2879 } 3008 }
2880 '''); 3009 ''');
2881 computeResult( 3010 computeResult(
2882 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8); 3011 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9);
2883 CompilationUnit unit1 = outputs[RESOLVED_UNIT8]; 3012 CompilationUnit unit1 = outputs[RESOLVED_UNIT9];
2884 computeResult( 3013 computeResult(
2885 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8); 3014 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9);
2886 CompilationUnit unit2 = outputs[RESOLVED_UNIT8]; 3015 CompilationUnit unit2 = outputs[RESOLVED_UNIT9];
2887 3016
2888 InterfaceType intType = context.typeProvider.intType; 3017 InterfaceType intType = context.typeProvider.intType;
2889 InterfaceType stringType = context.typeProvider.stringType; 3018 InterfaceType stringType = context.typeProvider.stringType;
2890 3019
2891 assertVariableDeclarationTypes( 3020 assertVariableDeclarationTypes(
2892 getTopLevelVariable(unit1, "x"), intType, intType); 3021 getTopLevelVariable(unit1, "x"), intType, intType);
2893 assertVariableDeclarationTypes( 3022 assertVariableDeclarationTypes(
2894 getFieldInClass(unit1, "A", "x"), intType, intType); 3023 getFieldInClass(unit1, "A", "x"), intType, intType);
2895 3024
2896 assertVariableDeclarationTypes( 3025 assertVariableDeclarationTypes(
(...skipping 26 matching lines...) Expand all
2923 3052
2924 test1() { 3053 test1() {
2925 int t = 3; 3054 int t = 3;
2926 t = x; 3055 t = x;
2927 t = y; 3056 t = y;
2928 t = A.x; 3057 t = A.x;
2929 t = B.y; 3058 t = B.y;
2930 } 3059 }
2931 '''); 3060 ''');
2932 computeResult( 3061 computeResult(
2933 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8); 3062 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9);
2934 CompilationUnit unit1 = outputs[RESOLVED_UNIT8]; 3063 CompilationUnit unit1 = outputs[RESOLVED_UNIT9];
2935 computeResult( 3064 computeResult(
2936 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8); 3065 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9);
2937 CompilationUnit unit2 = outputs[RESOLVED_UNIT8]; 3066 CompilationUnit unit2 = outputs[RESOLVED_UNIT9];
2938 3067
2939 InterfaceType intType = context.typeProvider.intType; 3068 InterfaceType intType = context.typeProvider.intType;
2940 3069
2941 assertVariableDeclarationTypes( 3070 assertVariableDeclarationTypes(
2942 getTopLevelVariable(unit1, "x"), intType, intType); 3071 getTopLevelVariable(unit1, "x"), intType, intType);
2943 assertVariableDeclarationTypes( 3072 assertVariableDeclarationTypes(
2944 getFieldInClass(unit1, "A", "x"), intType, intType); 3073 getFieldInClass(unit1, "A", "x"), intType, intType);
2945 3074
2946 assertVariableDeclarationTypes( 3075 assertVariableDeclarationTypes(
2947 getTopLevelVariable(unit2, "y"), intType, intType); 3076 getTopLevelVariable(unit2, "y"), intType, intType);
2948 assertVariableDeclarationTypes( 3077 assertVariableDeclarationTypes(
2949 getFieldInClass(unit2, "B", "y"), intType, intType); 3078 getFieldInClass(unit2, "B", "y"), intType, intType);
2950 3079
2951 List<Statement> statements = 3080 List<Statement> statements =
2952 getStatementsInTopLevelFunction(unit2, "test1"); 3081 getStatementsInTopLevelFunction(unit2, "test1");
2953 3082
2954 assertAssignmentStatementTypes(statements[1], intType, intType); 3083 assertAssignmentStatementTypes(statements[1], intType, intType);
2955 assertAssignmentStatementTypes(statements[2], intType, intType); 3084 assertAssignmentStatementTypes(statements[2], intType, intType);
2956 assertAssignmentStatementTypes(statements[3], intType, intType); 3085 assertAssignmentStatementTypes(statements[3], intType, intType);
2957 assertAssignmentStatementTypes(statements[4], intType, intType); 3086 assertAssignmentStatementTypes(statements[4], intType, intType);
2958 } 3087 }
2959 3088
2960 // Test inference of instance fields across units 3089 // Test inference of instance fields across units
2961 // TODO(leafp): Fix this 3090 // TODO(leafp): Fix this
2962 // https://github.com/dart-lang/dev_compiler/issues/354 3091 // https://github.com/dart-lang/dev_compiler/issues/354
2963 void fail_perform_inference_cross_unit_instance() { 3092 void test_perform_inference_cross_unit_instance() {
2964 List<Source> sources = newSources({ 3093 List<Source> sources = newSources({
2965 '/a7.dart': ''' 3094 '/a7.dart': '''
2966 import 'b7.dart'; 3095 import 'b7.dart';
2967 class A { 3096 class A {
2968 final a2 = new B().b2; 3097 final a2 = new B().b2;
2969 } 3098 }
2970 ''', 3099 ''',
2971 '/b7.dart': ''' 3100 '/b7.dart': '''
2972 class B { 3101 class B {
2973 final b2 = 1; 3102 final b2 = 1;
2974 } 3103 }
2975 ''', 3104 ''',
2976 '/main7.dart': ''' 3105 '/main7.dart': '''
2977 import "a7.dart"; 3106 import "a7.dart";
2978 3107
2979 test1() { 3108 test1() {
2980 int x = 0; 3109 int x = 0;
2981 x = new A().a2; 3110 x = new A().a2;
2982 } 3111 }
2983 ''' 3112 '''
2984 }); 3113 });
2985 List<dynamic> units = 3114 List<dynamic> units =
2986 computeLibraryResults(sources, RESOLVED_UNIT8).toList(); 3115 computeLibraryResults(sources, RESOLVED_UNIT9).toList();
2987 CompilationUnit unit0 = units[0]; 3116 CompilationUnit unit0 = units[0];
2988 CompilationUnit unit1 = units[1]; 3117 CompilationUnit unit1 = units[1];
2989 CompilationUnit unit2 = units[2]; 3118 CompilationUnit unit2 = units[2];
2990 3119
2991 InterfaceType intType = context.typeProvider.intType; 3120 InterfaceType intType = context.typeProvider.intType;
2992 3121
2993 assertVariableDeclarationTypes( 3122 assertVariableDeclarationTypes(
2994 getFieldInClass(unit0, "A", "a2"), intType, intType); 3123 getFieldInClass(unit0, "A", "a2"), intType, intType);
2995 3124
2996 assertVariableDeclarationTypes( 3125 assertVariableDeclarationTypes(
2997 getFieldInClass(unit1, "B", "b2"), intType, intType); 3126 getFieldInClass(unit1, "B", "b2"), intType, intType);
2998 3127
2999 List<Statement> statements = 3128 List<Statement> statements =
3000 getStatementsInTopLevelFunction(unit2, "test1"); 3129 getStatementsInTopLevelFunction(unit2, "test1");
3001 3130
3002 assertAssignmentStatementTypes(statements[1], intType, intType); 3131 assertAssignmentStatementTypes(statements[1], intType, intType);
3003 } 3132 }
3004 3133
3005 // Test inference between static and instance fields 3134 // Test inference between static and instance fields
3006 // TODO(leafp): Fix this 3135 // TODO(leafp): Fix this
3007 // https://github.com/dart-lang/dev_compiler/issues/354 3136 // https://github.com/dart-lang/dev_compiler/issues/354
3008 void fail_perform_inference_cross_unit_static_instance() { 3137 void test_perform_inference_cross_unit_static_instance() {
3009 List<Source> sources = newSources({ 3138 List<Source> sources = newSources({
3010 '/a.dart': ''' 3139 '/a.dart': '''
3011 import 'b.dart'; 3140 import 'b.dart';
3012 class A { 3141 class A {
3013 static final a1 = B.b1; 3142 static final a1 = B.b1;
3014 final a2 = new B().b2; 3143 final a2 = new B().b2;
3015 } 3144 }
3016 ''', 3145 ''',
3017 '/b.dart': ''' 3146 '/b.dart': '''
3018 class B { 3147 class B {
3019 static final b1 = 1; 3148 static final b1 = 1;
3020 final b2 = 1; 3149 final b2 = 1;
3021 } 3150 }
3022 ''', 3151 ''',
3023 '/main.dart': ''' 3152 '/main.dart': '''
3024 import "a.dart"; 3153 import "a.dart";
3025 3154
3026 test1() { 3155 test1() {
3027 int x = 0; 3156 int x = 0;
3028 // inference in A now works. 3157 // inference in A now works.
3029 x = A.a1; 3158 x = A.a1;
3030 x = new A().a2; 3159 x = new A().a2;
3031 } 3160 }
3032 ''' 3161 '''
3033 }); 3162 });
3034 List<dynamic> units = 3163 List<dynamic> units =
3035 computeLibraryResults(sources, RESOLVED_UNIT8).toList(); 3164 computeLibraryResults(sources, RESOLVED_UNIT9).toList();
3036 CompilationUnit unit0 = units[0]; 3165 CompilationUnit unit0 = units[0];
3037 CompilationUnit unit1 = units[1]; 3166 CompilationUnit unit1 = units[1];
3038 CompilationUnit unit2 = units[2]; 3167 CompilationUnit unit2 = units[2];
3039 3168
3040 InterfaceType intType = context.typeProvider.intType; 3169 InterfaceType intType = context.typeProvider.intType;
3041 3170
3042 assertVariableDeclarationTypes( 3171 assertVariableDeclarationTypes(
3043 getFieldInClass(unit0, "A", "a1"), intType, intType); 3172 getFieldInClass(unit0, "A", "a1"), intType, intType);
3044 assertVariableDeclarationTypes( 3173 assertVariableDeclarationTypes(
3045 getFieldInClass(unit0, "A", "a2"), intType, intType); 3174 getFieldInClass(unit0, "A", "a2"), intType, intType);
3046 3175
3047 assertVariableDeclarationTypes( 3176 assertVariableDeclarationTypes(
3048 getFieldInClass(unit1, "B", "b1"), intType, intType); 3177 getFieldInClass(unit1, "B", "b1"), intType, intType);
3049 assertVariableDeclarationTypes( 3178 assertVariableDeclarationTypes(
3050 getFieldInClass(unit1, "B", "b2"), intType, intType); 3179 getFieldInClass(unit1, "B", "b2"), intType, intType);
3051 3180
3052 List<Statement> statements = 3181 List<Statement> statements =
3053 getStatementsInTopLevelFunction(unit2, "test1"); 3182 getStatementsInTopLevelFunction(unit2, "test1");
3054 3183
3055 assertAssignmentStatementTypes(statements[1], intType, intType); 3184 assertAssignmentStatementTypes(statements[1], intType, intType);
3056 assertAssignmentStatementTypes(statements[2], intType, intType); 3185 assertAssignmentStatementTypes(statements[2], intType, intType);
3057 } 3186 }
3187
3188 // Test inference between fields and method bodies
3189 // TODO(leafp): Fix this
3190 // https://github.com/dart-lang/dev_compiler/issues/354
3191 void test_perform_inference_cross_unit_instance_member() {
3192 List<Source> sources = newSources({
3193 '/a.dart': '''
3194 import 'b.dart';
3195 var bar = new B();
3196 void foo() {
3197 String x = bar.f.z;
3198 }
3199 ''',
3200 '/b.dart': '''
3201 class C {
3202 var z = 3;
3203 }
3204
3205 class B {
3206 var f = new C();
3207 }
3208 ''',
3209 '/c.dart': '''
3210 import 'b.dart';
3211 var bar = new B();
3212 void foo() {
3213 String x = bar.f.z;
3214 }
3215 '''
3216 });
3217 List<dynamic> units =
3218 computeLibraryResults(sources, RESOLVED_UNIT9).toList();
3219 CompilationUnit unit0 = units[0];
3220 CompilationUnit unit1 = units[1];
3221 CompilationUnit unit2 = units[2];
3222
3223 InterfaceType intType = context.typeProvider.intType;
3224 InterfaceType stringType = context.typeProvider.stringType;
3225
3226 assertVariableDeclarationStatementTypes(
3227 getStatementsInTopLevelFunction(unit0, "foo")[0], stringType, intType);
3228 assertVariableDeclarationStatementTypes(
3229 getStatementsInTopLevelFunction(unit2, "foo")[0], stringType, intType);
3230 }
3058 } 3231 }
3059 3232
3060 @reflectiveTest 3233 @reflectiveTest
3061 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest { 3234 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest {
3062 test_perform() { 3235 test_perform() {
3063 Source sourceLib = newSource( 3236 Source sourceLib = newSource(
3064 '/my_lib.dart', 3237 '/my_lib.dart',
3065 ''' 3238 '''
3066 library my_lib; 3239 library my_lib;
3067 part 'my_part.dart'; 3240 part 'my_part.dart';
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
3583 /** 3756 /**
3584 * Fill [errorListener] with [result] errors in the current [task]. 3757 * Fill [errorListener] with [result] errors in the current [task].
3585 */ 3758 */
3586 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { 3759 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) {
3587 List<AnalysisError> errors = task.outputs[result]; 3760 List<AnalysisError> errors = task.outputs[result];
3588 expect(errors, isNotNull, reason: result.name); 3761 expect(errors, isNotNull, reason: result.name);
3589 errorListener = new GatheringErrorListener(); 3762 errorListener = new GatheringErrorListener();
3590 errorListener.addAll(errors); 3763 errorListener.addAll(errors);
3591 } 3764 }
3592 } 3765 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698