Index: pkg/analyzer/test/src/task/dart_test.dart |
diff --git a/pkg/analyzer/test/src/task/dart_test.dart b/pkg/analyzer/test/src/task/dart_test.dart |
index 4c3007b0702f44b36b7aee014aab9176b497f4ff..cddc662196cf276b146790d58a844fa4f802c13b 100644 |
--- a/pkg/analyzer/test/src/task/dart_test.dart |
+++ b/pkg/analyzer/test/src/task/dart_test.dart |
@@ -70,6 +70,7 @@ main() { |
runReflectiveTests(ResolveInstanceFieldsInUnitTaskTest); |
runReflectiveTests(ResolveLibraryTaskTest); |
runReflectiveTests(ResolveLibraryTypeNamesTaskTest); |
+ runReflectiveTests(ResolveTopLevelUnitTypeBoundsTaskTest); |
runReflectiveTests(ResolveUnitTaskTest); |
runReflectiveTests(ResolveUnitTypeNamesTaskTest); |
runReflectiveTests(ResolveVariableReferencesTaskTest); |
@@ -136,6 +137,8 @@ isInstanceOf isResolveDirectiveElementsTask = |
isInstanceOf isResolveLibraryTask = new isInstanceOf<ResolveLibraryTask>(); |
isInstanceOf isResolveLibraryTypeNamesTask = |
new isInstanceOf<ResolveLibraryTypeNamesTask>(); |
+isInstanceOf isResolveTopLevelUnitTypeBoundsTask = |
+ new isInstanceOf<ResolveTopLevelUnitTypeBoundsTask>(); |
isInstanceOf isResolveUnitTask = new isInstanceOf<ResolveUnitTask>(); |
isInstanceOf isResolveUnitTypeNamesTask = |
new isInstanceOf<ResolveUnitTypeNamesTask>(); |
@@ -1499,9 +1502,9 @@ library lib; |
class A {} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT6); |
- expect(outputs[RESOLVED_UNIT6], isNotNull); |
- expect(outputs[CREATED_RESOLVED_UNIT6], isTrue); |
+ computeResult(target, RESOLVED_UNIT7); |
+ expect(outputs[RESOLVED_UNIT7], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT7], isTrue); |
} |
test_perform() { |
@@ -1512,8 +1515,8 @@ const a = b; |
const b = 0; |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(target, RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
TopLevelVariableElement elementA = unit.element.topLevelVariables[0]; |
TopLevelVariableElement elementB = unit.element.topLevelVariables[1]; |
@@ -2025,8 +2028,8 @@ class B { |
} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(target, RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
FieldElement elementA = AstFinder.getFieldInClassElement(unit, 'A', 'a'); |
// compute |
computeResult(elementA, PROPAGABLE_VARIABLE_DEPENDENCIES, |
@@ -2056,8 +2059,8 @@ final d3; |
var d4 = 4; |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(target, RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
TopLevelVariableElement elementA = |
AstFinder.getTopLevelVariableElement(unit, 'a'); |
// compute |
@@ -2087,8 +2090,8 @@ final a = () { |
final d = 4; |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(target, RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
TopLevelVariableElement elementA = |
AstFinder.getTopLevelVariableElement(unit, 'a'); |
// compute |
@@ -2111,8 +2114,8 @@ const b = 1; |
const c = 2; |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(target, RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
TopLevelVariableElement elementA = |
AstFinder.getTopLevelVariableElement(unit, 'a'); |
// compute |
@@ -2219,9 +2222,9 @@ library lib; |
class A {} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT12); |
- expect(outputs[RESOLVED_UNIT12], isNotNull); |
- expect(outputs[CREATED_RESOLVED_UNIT12], isTrue); |
+ computeResult(target, RESOLVED_UNIT13); |
+ expect(outputs[RESOLVED_UNIT13], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT13], isTrue); |
} |
test_perform() { |
@@ -2238,9 +2241,9 @@ f() {} |
const x = const C(); |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT12, |
+ computeResult(target, RESOLVED_UNIT13, |
matcher: isEvaluateUnitConstantsTask); |
- CompilationUnit unit = outputs[RESOLVED_UNIT12]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT13]; |
CompilationUnitElement unitElement = unit.element; |
expect( |
(unitElement.types[0].constructors[0] as ConstructorElementImpl) |
@@ -2747,9 +2750,9 @@ library lib; |
class A {} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT10); |
- expect(outputs[RESOLVED_UNIT10], isNotNull); |
- expect(outputs[CREATED_RESOLVED_UNIT10], isTrue); |
+ computeResult(target, RESOLVED_UNIT11); |
+ expect(outputs[RESOLVED_UNIT11], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT11], isTrue); |
} |
void test_perform() { |
@@ -2769,9 +2772,9 @@ class X {} |
class Y {} |
class Z {} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10, |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT11, |
matcher: isInferInstanceMembersInUnitTask); |
- CompilationUnit unit = outputs[RESOLVED_UNIT10]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT11]; |
VariableDeclaration field = AstFinder.getFieldInClass(unit, 'B', 'f'); |
MethodDeclaration method = AstFinder.getMethodInClass(unit, 'B', 'm'); |
DartType typeX = AstFinder.getClass(unit, 'X').element.type; |
@@ -2803,12 +2806,12 @@ class M { |
} |
'''); |
computeResult( |
- new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT10, |
+ new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT11, |
matcher: isInferInstanceMembersInUnitTask); |
- CompilationUnit firstUnit = outputs[RESOLVED_UNIT10]; |
+ CompilationUnit firstUnit = outputs[RESOLVED_UNIT11]; |
computeResult( |
- new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT10); |
- CompilationUnit secondUnit = outputs[RESOLVED_UNIT10]; |
+ new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT11); |
+ CompilationUnit secondUnit = outputs[RESOLVED_UNIT11]; |
VariableDeclaration variableA = |
AstFinder.getTopLevelVariable(firstUnit, 'a'); |
@@ -2835,8 +2838,8 @@ class C { |
String field = topLevel; |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT10); |
- CompilationUnit unit = outputs[RESOLVED_UNIT10]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT11); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT11]; |
VariableDeclaration topLevelDecl = |
AstFinder.getTopLevelVariable(unit, 'topLevel'); |
VariableDeclaration fieldDecl = |
@@ -2867,9 +2870,9 @@ library lib; |
class A {} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT8); |
- expect(outputs[RESOLVED_UNIT8], isNotNull); |
- expect(outputs[CREATED_RESOLVED_UNIT8], isTrue); |
+ computeResult(target, RESOLVED_UNIT9); |
+ expect(outputs[RESOLVED_UNIT9], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT9], isTrue); |
} |
void test_perform_const_field() { |
@@ -2881,9 +2884,9 @@ class M { |
static const X = ""; |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9, |
matcher: isInferStaticVariableTypesInUnitTask); |
- CompilationUnit unit = outputs[RESOLVED_UNIT8]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
VariableDeclaration declaration = AstFinder.getFieldInClass(unit, 'M', 'X'); |
InterfaceType stringType = context.typeProvider.stringType; |
expect(declaration.element.type, stringType); |
@@ -2896,9 +2899,9 @@ class M { |
@(i $= |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT8); |
- expect(outputs[RESOLVED_UNIT8], isNotNull); |
- expect(outputs[CREATED_RESOLVED_UNIT8], isTrue); |
+ computeResult(target, RESOLVED_UNIT9); |
+ expect(outputs[RESOLVED_UNIT9], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT9], isTrue); |
} |
void test_perform_nestedDeclarations() { |
@@ -2912,7 +2915,7 @@ var f = (int x) { |
return xSquared; |
}; |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9, |
matcher: isInferStaticVariableTypesInUnitTask); |
} |
@@ -2935,12 +2938,12 @@ var b = a; |
class M {} |
'''); |
computeResult( |
- new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8, |
+ new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9, |
matcher: isInferStaticVariableTypesInUnitTask); |
- CompilationUnit firstUnit = outputs[RESOLVED_UNIT8]; |
+ CompilationUnit firstUnit = outputs[RESOLVED_UNIT9]; |
computeResult( |
- new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8); |
- CompilationUnit secondUnit = outputs[RESOLVED_UNIT8]; |
+ new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9); |
+ CompilationUnit secondUnit = outputs[RESOLVED_UNIT9]; |
VariableDeclaration variableA = |
AstFinder.getTopLevelVariable(firstUnit, 'a'); |
@@ -2969,9 +2972,9 @@ var Y = () { |
return 1 + X; |
}; |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9, |
matcher: isInferStaticVariableTypesInUnitTask); |
- CompilationUnit unit = outputs[RESOLVED_UNIT8]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
TopLevelVariableDeclaration declaration = unit.declarations[1]; |
FunctionExpression function = |
declaration.variables.variables[0].initializer; |
@@ -2993,8 +2996,8 @@ class C { |
var field = ''; |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
VariableDeclaration declaration = |
AstFinder.getFieldInClass(unit, 'C', 'field'); |
VariableElement variable = declaration.name.staticElement; |
@@ -3009,8 +3012,8 @@ class C { |
''' |
var topLevel = ''; |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
VariableDeclaration declaration = |
AstFinder.getTopLevelVariable(unit, 'topLevel'); |
VariableElement variable = declaration.name.staticElement; |
@@ -3029,8 +3032,8 @@ class C { |
var field3 = topLevel3; |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
VariableDeclaration topLevelDecl = |
AstFinder.getTopLevelVariable(unit, 'topLevel3'); |
VariableDeclaration fieldDecl = |
@@ -3056,8 +3059,8 @@ class C { |
var field = topLevel; |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
VariableElement topLevel = |
AstFinder.getTopLevelVariable(unit, 'topLevel').name.staticElement; |
VariableElement field = |
@@ -3079,8 +3082,8 @@ var piFirst = true; |
var pi = piFirst ? 3.14 : tau / 2; |
var tau = piFirst ? pi * 2 : 6.28; |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
VariableElement piFirst = |
AstFinder.getTopLevelVariable(unit, 'piFirst').name.staticElement; |
VariableElement pi = |
@@ -3102,8 +3105,8 @@ var tau = piFirst ? pi * 2 : 6.28; |
''' |
var a = '' / null; |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
VariableElement a = |
AstFinder.getTopLevelVariable(unit, 'a').name.staticElement; |
@@ -3119,8 +3122,8 @@ var a = '' / null; |
''' |
var a = null; |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
VariableElement a = |
AstFinder.getTopLevelVariable(unit, 'a').name.staticElement; |
@@ -3434,11 +3437,11 @@ main() { |
new A<int>().m(); |
} |
'''); |
- computeResult(new LibrarySpecificUnit(sourceC, sourceC), RESOLVED_UNIT6, |
+ computeResult(new LibrarySpecificUnit(sourceC, sourceC), RESOLVED_UNIT7, |
matcher: isPartiallyResolveUnitReferencesTask); |
// validate |
expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(0)); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
expect(unit, isNotNull); |
FunctionDeclaration mainFunction = unit.declarations[0]; |
@@ -3466,9 +3469,9 @@ class C { |
} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT6, |
+ computeResult(target, RESOLVED_UNIT7, |
matcher: isPartiallyResolveUnitReferencesTask); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
// INFERABLE_STATIC_VARIABLES_IN_UNIT |
{ |
List<VariableElement> variables = |
@@ -3509,9 +3512,9 @@ class C { |
} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT6, |
+ computeResult(target, RESOLVED_UNIT7, |
matcher: isPartiallyResolveUnitReferencesTask); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
NodeList<CompilationUnitMember> declarations = unit.declarations; |
void expectReference(BlockFunctionBody body, bool isResolved) { |
@@ -3560,9 +3563,9 @@ library lib; |
class A {} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT7); |
- expect(outputs[RESOLVED_UNIT7], isNotNull); |
- expect(outputs[CREATED_RESOLVED_UNIT7], isTrue); |
+ computeResult(target, RESOLVED_UNIT8); |
+ expect(outputs[RESOLVED_UNIT8], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT8], isTrue); |
} |
void test_perform_cycle() { |
@@ -3574,9 +3577,9 @@ final pi = piFirst ? 3.14 : tau / 2; |
final tau = piFirst ? pi * 2 : 6.28; |
'''); |
// compute |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7, |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, |
matcher: isPropagateVariableTypesInUnitTask); |
- CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT8]; |
// verify |
TopLevelVariableElement piFirst = |
AstFinder.getTopLevelVariableElement(unit, 'piFirst'); |
@@ -3599,9 +3602,9 @@ final b = 1; |
final c = '2'; |
'''); |
// compute |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7, |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, |
matcher: isPropagateVariableTypesInUnitTask); |
- CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT8]; |
// verify |
InterfaceType intType = context.typeProvider.intType; |
InterfaceType stringType = context.typeProvider.stringType; |
@@ -3624,8 +3627,8 @@ final piFirst = true; |
final pi = piFirst ? 3.14 : tau / 2; |
final tau = piFirst ? pi * 2 : 6.28; |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
TopLevelVariableElement piFirst = |
AstFinder.getTopLevelVariableElement(unit, 'piFirst'); |
TopLevelVariableElement pi = |
@@ -3647,8 +3650,8 @@ final tau = piFirst ? pi * 2 : 6.28; |
''' |
var a = null; |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
TopLevelVariableElement a = AstFinder.getTopLevelVariableElement(unit, 'a'); |
// compute |
computeResult(a, PROPAGATED_VARIABLE, matcher: isPropagateVariableTypeTask); |
@@ -3663,8 +3666,8 @@ final a = b + c.length; |
final b = 1; |
final c = '2'; |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6); |
- CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
TopLevelVariableElement elementA = |
AstFinder.getTopLevelVariableElement(unit, 'a'); |
TopLevelVariableElement elementB = |
@@ -3749,9 +3752,9 @@ library lib; |
class A {} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT9); |
- expect(outputs[RESOLVED_UNIT9], isNotNull); |
- expect(outputs[CREATED_RESOLVED_UNIT9], isTrue); |
+ computeResult(target, RESOLVED_UNIT10); |
+ expect(outputs[RESOLVED_UNIT10], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT10], isTrue); |
} |
// Test inference of instance fields across units |
@@ -3781,16 +3784,16 @@ class A {} |
DartType dynamicType = context.typeProvider.dynamicType; |
computeResult( |
- new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT9); |
- CompilationUnit unit1 = outputs[RESOLVED_UNIT9]; |
+ new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT10); |
+ CompilationUnit unit1 = outputs[RESOLVED_UNIT10]; |
// B.b2 shoud be resolved on the rhs, but not yet inferred. |
assertVariableDeclarationTypes( |
AstFinder.getFieldInClass(unit1, "B", "b2"), dynamicType, intType); |
computeResult( |
- new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT9); |
- CompilationUnit unit0 = outputs[RESOLVED_UNIT9]; |
+ new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT10); |
+ CompilationUnit unit0 = outputs[RESOLVED_UNIT10]; |
// B.b2 should now be fully resolved and inferred. |
assertVariableDeclarationTypes( |
@@ -3801,7 +3804,7 @@ class A {} |
AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, intType); |
computeResult( |
- new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT9); |
+ new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT10); |
// A.a2 should now be fully resolved and inferred. |
assertVariableDeclarationTypes( |
@@ -3838,15 +3841,15 @@ class A {} |
DartType dynamicType = context.typeProvider.dynamicType; |
computeResult( |
- new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT9); |
- CompilationUnit unit0 = outputs[RESOLVED_UNIT9]; |
+ new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT10); |
+ CompilationUnit unit0 = outputs[RESOLVED_UNIT10]; |
// A.a2 should now be resolved on the rhs, but not yet inferred. |
assertVariableDeclarationTypes( |
AstFinder.getFieldInClass(unit0, "A", "a2"), dynamicType, dynamicType); |
computeResult( |
- new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT9); |
+ new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT10); |
// A.a2 should now be fully resolved and inferred (but not re-resolved). |
assertVariableDeclarationTypes( |
@@ -3884,8 +3887,8 @@ class A {} |
DartType dynamicType = context.typeProvider.dynamicType; |
computeResult( |
- new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT9); |
- CompilationUnit unit1 = outputs[RESOLVED_UNIT9]; |
+ new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT10); |
+ CompilationUnit unit1 = outputs[RESOLVED_UNIT10]; |
assertVariableDeclarationTypes( |
AstFinder.getFieldInClass(unit1, "B", "b1"), intType, intType); |
@@ -3893,8 +3896,8 @@ class A {} |
AstFinder.getFieldInClass(unit1, "B", "b2"), dynamicType, intType); |
computeResult( |
- new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT9); |
- CompilationUnit unit0 = outputs[RESOLVED_UNIT9]; |
+ new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT10); |
+ CompilationUnit unit0 = outputs[RESOLVED_UNIT10]; |
assertVariableDeclarationTypes( |
AstFinder.getFieldInClass(unit0, "A", "a1"), intType, intType); |
@@ -3907,7 +3910,7 @@ class A {} |
AstFinder.getFieldInClass(unit1, "B", "b2"), intType, intType); |
computeResult( |
- new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT9); |
+ new LibrarySpecificUnit(sources[2], sources[2]), RESOLVED_UNIT10); |
assertVariableDeclarationTypes( |
AstFinder.getFieldInClass(unit0, "A", "a1"), intType, intType); |
@@ -3946,8 +3949,8 @@ class A {} |
DartType dynamicType = context.typeProvider.dynamicType; |
computeResult( |
- new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT9); |
- CompilationUnit unit0 = outputs[RESOLVED_UNIT9]; |
+ new LibrarySpecificUnit(sources[0], sources[0]), RESOLVED_UNIT10); |
+ CompilationUnit unit0 = outputs[RESOLVED_UNIT10]; |
// A.a2 should now be resolved on the rhs, but not yet inferred. |
assertVariableDeclarationTypes( |
@@ -3958,7 +3961,7 @@ class A {} |
AstFinder.getFieldInClass(unit0, "B", "b2"), dynamicType, intType); |
computeResult( |
- new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT9); |
+ new LibrarySpecificUnit(sources[1], sources[1]), RESOLVED_UNIT10); |
// A.a2 should now be fully resolved and inferred (but not re-resolved). |
assertVariableDeclarationTypes( |
@@ -4013,10 +4016,10 @@ class B extends A {} |
part of my_lib; |
class C extends A {} |
'''); |
- computeResult(sourceLib, LIBRARY_ELEMENT5, |
+ computeResult(sourceLib, LIBRARY_ELEMENT6, |
matcher: isResolveLibraryTypeNamesTask); |
// validate |
- LibraryElement library = outputs[LIBRARY_ELEMENT5]; |
+ LibraryElement library = outputs[LIBRARY_ELEMENT6]; |
{ |
ClassElement classB = library.getType('B'); |
expect(classB.supertype.displayName, 'A'); |
@@ -4044,10 +4047,10 @@ class B {} |
'''); |
// The reference A to B should be resolved, but there's no requirement that |
// the full class hierarchy be resolved. |
- computeResult(sourceA, LIBRARY_ELEMENT5, |
+ computeResult(sourceA, LIBRARY_ELEMENT6, |
matcher: isResolveLibraryTypeNamesTask); |
// validate |
- LibraryElement library = outputs[LIBRARY_ELEMENT5]; |
+ LibraryElement library = outputs[LIBRARY_ELEMENT6]; |
{ |
ClassElement clazz = library.getType('A'); |
expect(clazz.displayName, 'A'); |
@@ -4058,6 +4061,134 @@ class B {} |
} |
@reflectiveTest |
+class ResolveTopLevelUnitTypeBoundsTaskTest extends _AbstractDartTaskTest { |
+ test_perform_boundIsGenericType() { |
+ Source source = newSource( |
+ '/test.dart', |
+ ''' |
+class C<T extends Map<String, List<int>>> {} |
+'''); |
+ LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
+ computeResult(target, RESOLVED_UNIT4, |
+ matcher: isResolveTopLevelUnitTypeBoundsTask); |
+ // validate |
+ CompilationUnit unit = outputs[RESOLVED_UNIT4]; |
+ ClassDeclaration nodeC = unit.declarations[0]; |
+ _assertTypeParameterBound(nodeC.typeParameters.typeParameters[0], |
+ 'Map<String, List<int>>', 'Map'); |
+ } |
+ |
+ test_perform_errors() { |
+ Source source = newSource( |
+ '/test.dart', |
+ ''' |
+class C<T extends NoSuchClass> {} |
+'''); |
+ LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
+ computeResult(target, RESOLVE_TYPE_BOUNDS_ERRORS, |
+ matcher: isResolveTopLevelUnitTypeBoundsTask); |
+ // validate |
+ _fillErrorListener(RESOLVE_TYPE_BOUNDS_ERRORS); |
+ errorListener |
+ .assertErrorsWithCodes(<ErrorCode>[StaticWarningCode.UNDEFINED_CLASS]); |
+ } |
+ |
+ test_perform_ignoreBoundsOfBounds() { |
+ Source source = newSource( |
+ '/test.dart', |
+ ''' |
+class A<T1 extends num> {} |
+class B<T2 extends A> {} |
+'''); |
+ LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
+ computeResult(target, RESOLVED_UNIT4, |
+ matcher: isResolveTopLevelUnitTypeBoundsTask); |
+ // validate |
+ CompilationUnit unit = outputs[RESOLVED_UNIT4]; |
+ ClassDeclaration nodeB = unit.declarations[1]; |
+ _assertTypeParameterBound( |
+ nodeB.typeParameters.typeParameters[0], 'A<dynamic>', 'A'); |
+ } |
+ |
+ test_perform_outputs() { |
+ Source source = newSource( |
+ '/test.dart', |
+ r''' |
+class C<T extends int> {} |
+'''); |
+ LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
+ computeResult(target, RESOLVED_UNIT4); |
+ expect(outputs[RESOLVED_UNIT4], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT4], isTrue); |
+ expect(outputs[RESOLVE_TYPE_BOUNDS_ERRORS], isNotNull); |
+ } |
+ |
+ test_perform_unitMember_ClassDeclaration() { |
+ Source source = newSource( |
+ '/test.dart', |
+ ''' |
+class C<T extends int> extends Object {} |
+'''); |
+ LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
+ computeResult(target, RESOLVED_UNIT4, |
+ matcher: isResolveTopLevelUnitTypeBoundsTask); |
+ // validate |
+ CompilationUnit unit = outputs[RESOLVED_UNIT4]; |
+ ClassDeclaration nodeC = unit.declarations[0]; |
+ // 'extends Object' is not resolved |
+ expect(nodeC.extendsClause.superclass.name.staticElement, isNull); |
+ // but 'T extends int' is resolved |
+ _assertTypeParameterBound( |
+ nodeC.typeParameters.typeParameters[0], 'int', 'int'); |
+ } |
+ |
+ test_perform_unitMember_ClassTypeAlias() { |
+ Source source = newSource( |
+ '/test.dart', |
+ ''' |
+class C<T extends double> = Object; |
+'''); |
+ LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
+ computeResult(target, RESOLVED_UNIT4, |
+ matcher: isResolveTopLevelUnitTypeBoundsTask); |
+ // validate |
+ CompilationUnit unit = outputs[RESOLVED_UNIT4]; |
+ ClassTypeAlias nodeC = unit.declarations[0]; |
+ // '= Object' is not resolved |
+ expect(nodeC.superclass.name.staticElement, isNull); |
+ // but 'T extends int' is resolved |
+ _assertTypeParameterBound( |
+ nodeC.typeParameters.typeParameters[0], 'double', 'double'); |
+ } |
+ |
+ test_perform_unitMember_FunctionTypeAlias() { |
+ Source source = newSource( |
+ '/test.dart', |
+ ''' |
+typedef F<T extends String>(); |
+'''); |
+ LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
+ computeResult(target, RESOLVED_UNIT4, |
+ matcher: isResolveTopLevelUnitTypeBoundsTask); |
+ // validate |
+ CompilationUnit unit = outputs[RESOLVED_UNIT4]; |
+ FunctionTypeAlias nodeF = unit.declarations[0]; |
+ // but 'T extends String' is resolved |
+ _assertTypeParameterBound( |
+ nodeF.typeParameters.typeParameters[0], 'String', 'String'); |
+ } |
+ |
+ void _assertTypeParameterBound(TypeParameter typeParameter, |
+ String expectedBoundTypeString, String expectedBoundElementName) { |
+ TypeName boundNode = typeParameter.bound; |
+ Identifier boundName = boundNode.name; |
+ expect(boundNode.type.toString(), expectedBoundTypeString); |
+ expect(boundName.staticType.toString(), expectedBoundTypeString); |
+ expect(boundName.staticElement.displayName, expectedBoundElementName); |
+ } |
+} |
+ |
+@reflectiveTest |
class ResolveUnitTaskTest extends _AbstractDartTaskTest { |
test_created_resolved_unit() { |
Source source = newSource( |
@@ -4067,9 +4198,9 @@ library lib; |
class A {} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT11); |
- expect(outputs[RESOLVED_UNIT11], isNotNull); |
- expect(outputs[CREATED_RESOLVED_UNIT11], isTrue); |
+ computeResult(target, RESOLVED_UNIT12); |
+ expect(outputs[RESOLVED_UNIT12], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT12], isTrue); |
} |
void test_perform() { |
@@ -4086,9 +4217,9 @@ class C { |
} |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT11, |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT12, |
matcher: isResolveUnitTask); |
- CompilationUnit unit = outputs[RESOLVED_UNIT11]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT12]; |
FunctionDeclaration f = unit.declarations[0]; |
_assertResolved(f.functionExpression.body); |
@@ -4115,10 +4246,10 @@ main(A a) { |
a.v.isEven; |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT11, |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT12, |
matcher: isResolveUnitTask); |
expect(outputs[RESOLVE_UNIT_ERRORS], hasLength(0)); |
- CompilationUnit unit = outputs[RESOLVED_UNIT11]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT12]; |
FunctionDeclaration main = unit.declarations[0]; |
BlockFunctionBody body = main.functionExpression.body; |
ExpressionStatement statement = body.block.statements.single; |
@@ -4143,9 +4274,9 @@ library lib; |
class A {} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT4); |
- expect(outputs[RESOLVED_UNIT4], isNotNull); |
- expect(outputs[CREATED_RESOLVED_UNIT4], isTrue); |
+ computeResult(target, RESOLVED_UNIT5); |
+ expect(outputs[RESOLVED_UNIT5], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT5], isTrue); |
} |
test_perform() { |
@@ -4157,9 +4288,9 @@ class B extends A {} |
int f(String p) => p.length; |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT4, matcher: isResolveUnitTypeNamesTask); |
+ computeResult(target, RESOLVED_UNIT5, matcher: isResolveUnitTypeNamesTask); |
// validate |
- CompilationUnit unit = outputs[RESOLVED_UNIT4]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
{ |
ClassDeclaration nodeA = unit.declarations[0]; |
ClassDeclaration nodeB = unit.declarations[1]; |
@@ -4199,9 +4330,9 @@ typedef int F(G g); |
typedef String G(int p); |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT4, matcher: isResolveUnitTypeNamesTask); |
+ computeResult(target, RESOLVED_UNIT5, matcher: isResolveUnitTypeNamesTask); |
// validate |
- CompilationUnit unit = outputs[RESOLVED_UNIT4]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
FunctionTypeAlias nodeF = unit.declarations[0]; |
FunctionTypeAlias nodeG = unit.declarations[1]; |
{ |
@@ -4255,9 +4386,9 @@ library lib; |
class A {} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT5); |
- expect(outputs[RESOLVED_UNIT5], isNotNull); |
- expect(outputs[CREATED_RESOLVED_UNIT5], isTrue); |
+ computeResult(target, RESOLVED_UNIT6); |
+ expect(outputs[RESOLVED_UNIT6], isNotNull); |
+ expect(outputs[CREATED_RESOLVED_UNIT6], isTrue); |
} |
test_perform_buildClosureLibraryElements() { |
@@ -4268,7 +4399,7 @@ main() { |
} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT5, |
+ computeResult(target, RESOLVED_UNIT6, |
matcher: isResolveVariableReferencesTask); |
} |
@@ -4290,10 +4421,10 @@ main() { |
} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT5, |
+ computeResult(target, RESOLVED_UNIT6, |
matcher: isResolveVariableReferencesTask); |
// validate |
- CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
FunctionDeclaration mainDeclaration = unit.declarations[0]; |
FunctionBody body = mainDeclaration.functionExpression.body; |
FunctionElement main = mainDeclaration.element; |
@@ -4317,10 +4448,10 @@ main(p1, p2, p3, p4) { |
} |
'''); |
LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
- computeResult(target, RESOLVED_UNIT5, |
+ computeResult(target, RESOLVED_UNIT6, |
matcher: isResolveVariableReferencesTask); |
// validate |
- CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
+ CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
FunctionDeclaration mainDeclaration = unit.declarations[0]; |
FunctionBody body = mainDeclaration.functionExpression.body; |
FunctionElement main = mainDeclaration.element; |
@@ -4399,8 +4530,8 @@ var piFirst = true; |
var pi = piFirst ? 3.14 : tau / 2; |
var tau = piFirst ? pi * 2 : 6.28; |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT11); |
- CompilationUnit unit = outputs[RESOLVED_UNIT11]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT12); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT12]; |
VariableElement piFirst = |
AstFinder.getTopLevelVariable(unit, 'piFirst').name.staticElement; |
VariableElement pi = |
@@ -4442,11 +4573,11 @@ var tau = piFirst ? pi * 2 : 6.28; |
} |
'''); |
computeResult( |
- new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT11); |
- CompilationUnit unit1 = outputs[RESOLVED_UNIT11]; |
+ new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT12); |
+ CompilationUnit unit1 = outputs[RESOLVED_UNIT12]; |
computeResult( |
- new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT11); |
- CompilationUnit unit2 = outputs[RESOLVED_UNIT11]; |
+ new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT12); |
+ CompilationUnit unit2 = outputs[RESOLVED_UNIT12]; |
InterfaceType intType = context.typeProvider.intType; |
@@ -4493,7 +4624,7 @@ var tau = piFirst ? pi * 2 : 6.28; |
''' |
}); |
List<dynamic> units = |
- computeLibraryResults(sources, RESOLVED_UNIT11).toList(); |
+ computeLibraryResults(sources, RESOLVED_UNIT12).toList(); |
CompilationUnit unit0 = units[0]; |
CompilationUnit unit1 = units[1]; |
CompilationUnit unit2 = units[2]; |
@@ -4540,7 +4671,7 @@ var tau = piFirst ? pi * 2 : 6.28; |
''' |
}); |
List<dynamic> units = |
- computeLibraryResults(sources, RESOLVED_UNIT11).toList(); |
+ computeLibraryResults(sources, RESOLVED_UNIT12).toList(); |
CompilationUnit unit0 = units[0]; |
CompilationUnit unit2 = units[2]; |
@@ -4581,11 +4712,11 @@ var tau = piFirst ? pi * 2 : 6.28; |
} |
'''); |
computeResult( |
- new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT11); |
- CompilationUnit unit1 = outputs[RESOLVED_UNIT11]; |
+ new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT12); |
+ CompilationUnit unit1 = outputs[RESOLVED_UNIT12]; |
computeResult( |
- new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT11); |
- CompilationUnit unit2 = outputs[RESOLVED_UNIT11]; |
+ new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT12); |
+ CompilationUnit unit2 = outputs[RESOLVED_UNIT12]; |
InterfaceType intType = context.typeProvider.intType; |
InterfaceType stringType = context.typeProvider.stringType; |
@@ -4635,7 +4766,7 @@ var tau = piFirst ? pi * 2 : 6.28; |
''' |
}); |
List<dynamic> units = |
- computeLibraryResults(sources, RESOLVED_UNIT11).toList(); |
+ computeLibraryResults(sources, RESOLVED_UNIT12).toList(); |
CompilationUnit unit0 = units[0]; |
CompilationUnit unit1 = units[1]; |
CompilationUnit unit2 = units[2]; |
@@ -4671,8 +4802,8 @@ var tau = piFirst ? pi * 2 : 6.28; |
y = "hi"; |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT11); |
- CompilationUnit unit = outputs[RESOLVED_UNIT11]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT12); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT12]; |
InterfaceType intType = context.typeProvider.intType; |
InterfaceType stringType = context.typeProvider.stringType; |
@@ -4710,8 +4841,8 @@ var tau = piFirst ? pi * 2 : 6.28; |
final z = 42; // should infer `int` |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT11); |
- CompilationUnit unit = outputs[RESOLVED_UNIT11]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT12); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT12]; |
InterfaceType intType = context.typeProvider.intType; |
InterfaceType stringType = context.typeProvider.stringType; |
@@ -4759,8 +4890,8 @@ var tau = piFirst ? pi * 2 : 6.28; |
int y = 0; // field def after use |
final z = 42; // should infer `int` |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT11); |
- CompilationUnit unit = outputs[RESOLVED_UNIT11]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT12); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT12]; |
InterfaceType intType = context.typeProvider.intType; |
InterfaceType stringType = context.typeProvider.stringType; |
@@ -4812,8 +4943,8 @@ var tau = piFirst ? pi * 2 : 6.28; |
new A().y2 = /*severe:StaticTypeError*/"hi"; |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT11); |
- CompilationUnit unit = outputs[RESOLVED_UNIT11]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT12); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT12]; |
InterfaceType intType = context.typeProvider.intType; |
InterfaceType stringType = context.typeProvider.stringType; |
@@ -4854,8 +4985,8 @@ var tau = piFirst ? pi * 2 : 6.28; |
x = "hi"; |
} |
'''); |
- computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT11); |
- CompilationUnit unit = outputs[RESOLVED_UNIT11]; |
+ computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT12); |
+ CompilationUnit unit = outputs[RESOLVED_UNIT12]; |
InterfaceType intType = context.typeProvider.intType; |
InterfaceType stringType = context.typeProvider.stringType; |