Index: pkg/analyzer/test/src/task/strong_mode_test.dart |
diff --git a/pkg/analyzer/test/src/task/strong_mode_test.dart b/pkg/analyzer/test/src/task/strong_mode_test.dart |
index 3d807b0e0a565153e5ebcb134b2662ef8a075608..7f6ae6855a2b2168c396239992f1a0091cf723e1 100644 |
--- a/pkg/analyzer/test/src/task/strong_mode_test.dart |
+++ b/pkg/analyzer/test/src/task/strong_mode_test.dart |
@@ -48,467 +48,6 @@ class InstanceMemberInferrerTest extends ResolverTestCase { |
} |
} |
- test_inferCompilationUnit_field_multiple_different() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- int $fieldName; |
-} |
-class B { |
- double $fieldName; |
-} |
-class C implements A, B { |
- var $fieldName; |
-} |
-'''); |
- ClassElement classC = unit.getType('C'); |
- FieldElement fieldC = classC.getField(fieldName); |
- PropertyAccessorElement getterC = classC.getGetter(fieldName); |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- } |
- |
- test_inferCompilationUnit_field_multiple_different_generic() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A<E> { |
- E $fieldName; |
-} |
-class B<E> { |
- E $fieldName; |
-} |
-class C implements A<int>, B<double> { |
- var $fieldName; |
-} |
-'''); |
- ClassElement classC = unit.getType('C'); |
- FieldElement fieldC = classC.getField(fieldName); |
- PropertyAccessorElement getterC = classC.getGetter(fieldName); |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- } |
- |
- test_inferCompilationUnit_field_multiple_dynamic() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- int $fieldName; |
-} |
-class B { |
- var $fieldName; |
-} |
-class C implements A, B { |
- var $fieldName; |
-} |
-'''); |
- ClassElement classC = unit.getType('C'); |
- FieldElement fieldC = classC.getField(fieldName); |
- PropertyAccessorElement getterC = classC.getGetter(fieldName); |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- } |
- |
- test_inferCompilationUnit_field_multiple_same() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- int $fieldName; |
-} |
-class B { |
- int $fieldName; |
-} |
-class C implements A, B { |
- var $fieldName; |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- FieldElement fieldA = classA.getField(fieldName); |
- DartType expectedType = fieldA.type; |
- ClassElement classC = unit.getType('C'); |
- FieldElement fieldC = classC.getField(fieldName); |
- PropertyAccessorElement getterC = classC.getGetter(fieldName); |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldC.type, expectedType); |
- expect(getterC.returnType, expectedType); |
- } |
- |
- test_inferCompilationUnit_field_noOverride() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- final $fieldName = 0; |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- FieldElement fieldA = classA.getField(fieldName); |
- PropertyAccessorElement getterA = classA.getGetter(fieldName); |
- expect(fieldA.type.isDynamic, isTrue); |
- expect(getterA.returnType.isDynamic, isTrue); |
- |
- InstanceMemberInferrer inferrer = _runInferrer(unit); |
- |
- DartType intType = inferrer.typeProvider.intType; |
- expect(fieldA.type, intType); |
- expect(getterA.returnType, intType); |
- } |
- |
- test_inferCompilationUnit_field_noOverride_bottom() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- var $fieldName = null; |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- FieldElement fieldA = classA.getField(fieldName); |
- PropertyAccessorElement getterA = classA.getGetter(fieldName); |
- expect(fieldA.type.isDynamic, isTrue); |
- expect(getterA.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldA.type.isDynamic, isTrue); |
- expect(getterA.returnType.isDynamic, isTrue); |
- } |
- |
- test_inferCompilationUnit_field_single_explicitlyDynamic() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- dynamic $fieldName; |
-} |
-class B extends A { |
- var $fieldName = 0; |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- FieldElement fieldA = classA.getField(fieldName); |
- PropertyAccessorElement getterA = classA.getGetter(fieldName); |
- ClassElement classB = unit.getType('B'); |
- FieldElement fieldB = classB.getField(fieldName); |
- PropertyAccessorElement getterB = classB.getGetter(fieldName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(getterB.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldB.type, fieldA.type); |
- expect(getterB.returnType, getterA.returnType); |
- } |
- |
- test_inferCompilationUnit_field_single_final() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- final int $fieldName; |
-} |
-class B extends A { |
- final $fieldName; |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- FieldElement fieldA = classA.getField(fieldName); |
- PropertyAccessorElement getterA = classA.getGetter(fieldName); |
- ClassElement classB = unit.getType('B'); |
- FieldElement fieldB = classB.getField(fieldName); |
- PropertyAccessorElement getterB = classB.getGetter(fieldName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(getterB.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldB.type, fieldA.type); |
- expect(getterB.returnType, getterA.returnType); |
- } |
- |
- test_inferCompilationUnit_field_single_final_narrowType() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- final $fieldName; |
-} |
-class B extends A { |
- final $fieldName = 0; |
-} |
-'''); |
- ClassElement classB = unit.getType('B'); |
- FieldElement fieldB = classB.getField(fieldName); |
- PropertyAccessorElement getterB = classB.getGetter(fieldName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(getterB.returnType.isDynamic, isTrue); |
- |
- InstanceMemberInferrer inferrer = _runInferrer(unit); |
- |
- expect(fieldB.type, inferrer.typeProvider.intType); |
- expect(getterB.returnType, fieldB.type); |
- } |
- |
- test_inferCompilationUnit_field_single_generic() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A<E> { |
- E $fieldName; |
-} |
-class B<E> extends A<E> { |
- var $fieldName; |
-} |
-'''); |
- ClassElement classB = unit.getType('B'); |
- DartType typeBE = classB.typeParameters[0].type; |
- FieldElement fieldB = classB.getField(fieldName); |
- PropertyAccessorElement getterB = classB.getGetter(fieldName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(getterB.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldB.type, typeBE); |
- expect(getterB.returnType, typeBE); |
- } |
- |
- test_inferCompilationUnit_field_single_inconsistentAccessors() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- int get $fieldName => 0; |
- set $fieldName(String value) {} |
-} |
-class B extends A { |
- var $fieldName; |
-} |
-'''); |
- ClassElement classB = unit.getType('B'); |
- FieldElement fieldB = classB.getField(fieldName); |
- PropertyAccessorElement getterB = classB.getGetter(fieldName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(getterB.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(getterB.returnType.isDynamic, isTrue); |
- } |
- |
- test_inferCompilationUnit_field_single_noModifiers() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- int $fieldName; |
-} |
-class B extends A { |
- var $fieldName; |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- FieldElement fieldA = classA.getField(fieldName); |
- PropertyAccessorElement getterA = classA.getGetter(fieldName); |
- ClassElement classB = unit.getType('B'); |
- FieldElement fieldB = classB.getField(fieldName); |
- PropertyAccessorElement getterB = classB.getGetter(fieldName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(getterB.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldB.type, fieldA.type); |
- expect(getterB.returnType, getterA.returnType); |
- } |
- |
- test_inferCompilationUnit_fieldFormal() async { |
- String fieldName = 'f'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- final $fieldName = 0; |
- A([this.$fieldName = 'hello']); |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- FieldElement fieldA = classA.getField(fieldName); |
- FieldFormalParameterElement paramA = |
- classA.unnamedConstructor.parameters[0]; |
- expect(fieldA.type.isDynamic, isTrue); |
- expect(paramA.type.isDynamic, isTrue); |
- |
- InstanceMemberInferrer inferrer = _runInferrer(unit); |
- |
- DartType intType = inferrer.typeProvider.intType; |
- expect(fieldA.type, intType); |
- expect(paramA.type, intType); |
- } |
- |
- test_inferCompilationUnit_getter_multiple_different() async { |
- String getterName = 'g'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- int get $getterName => 0; |
-} |
-class B { |
- double get $getterName => 0.0; |
-} |
-class C implements A, B { |
- get $getterName => 0; |
-} |
-'''); |
- ClassElement classC = unit.getType('C'); |
- FieldElement fieldC = classC.getField(getterName); |
- PropertyAccessorElement getterC = classC.getGetter(getterName); |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- } |
- |
- test_inferCompilationUnit_getter_multiple_dynamic() async { |
- String getterName = 'g'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- int get $getterName => 0; |
-} |
-class B { |
- get $getterName => 0; |
-} |
-class C implements A, B { |
- get $getterName => 0; |
-} |
-'''); |
- ClassElement classC = unit.getType('C'); |
- FieldElement fieldC = classC.getField(getterName); |
- PropertyAccessorElement getterC = classC.getGetter(getterName); |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- } |
- |
- test_inferCompilationUnit_getter_multiple_same() async { |
- String getterName = 'g'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- String get $getterName => ''; |
-} |
-class B { |
- String get $getterName => ''; |
-} |
-class C implements A, B { |
- get $getterName => ''; |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- PropertyAccessorElement getterA = classA.getGetter(getterName); |
- DartType expectedType = getterA.returnType; |
- ClassElement classC = unit.getType('C'); |
- FieldElement fieldC = classC.getField(getterName); |
- PropertyAccessorElement getterC = classC.getGetter(getterName); |
- expect(fieldC.type.isDynamic, isTrue); |
- expect(getterC.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldC.type, expectedType); |
- expect(getterC.returnType, expectedType); |
- } |
- |
- test_inferCompilationUnit_getter_single() async { |
- String getterName = 'g'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- int get $getterName => 0; |
-} |
-class B extends A { |
- get $getterName => 0; |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- FieldElement fieldA = classA.getField(getterName); |
- PropertyAccessorElement getterA = classA.getGetter(getterName); |
- ClassElement classB = unit.getType('B'); |
- FieldElement fieldB = classB.getField(getterName); |
- PropertyAccessorElement getterB = classB.getGetter(getterName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(getterB.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldB.type, fieldA.type); |
- expect(getterB.returnType, getterA.returnType); |
- } |
- |
- test_inferCompilationUnit_getter_single_generic() async { |
- String getterName = 'g'; |
- CompilationUnitElement unit = await resolve(''' |
-class A<E> { |
- E get $getterName => 0; |
-} |
-class B<E> extends A<E> { |
- get $getterName => 0; |
-} |
-'''); |
- ClassElement classB = unit.getType('B'); |
- DartType typeBE = classB.typeParameters[0].type; |
- FieldElement fieldB = classB.getField(getterName); |
- PropertyAccessorElement getterB = classB.getGetter(getterName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(getterB.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldB.type, typeBE); |
- expect(getterB.returnType, typeBE); |
- } |
- |
- test_inferCompilationUnit_getter_single_inconsistentAccessors() async { |
- String getterName = 'g'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- int get $getterName => 0; |
- set $getterName(String value) {} |
-} |
-class B extends A { |
- var get $getterName => 1; |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- FieldElement fieldA = classA.getField(getterName); |
- PropertyAccessorElement getterA = classA.getGetter(getterName); |
- ClassElement classB = unit.getType('B'); |
- FieldElement fieldB = classB.getField(getterName); |
- PropertyAccessorElement getterB = classB.getGetter(getterName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(getterB.returnType.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- // Expected behavior is that the getter is inferred: getters and setters |
- // are treated as independent methods. |
- expect(fieldB.type, fieldA.type); |
- expect(getterB.returnType, getterA.returnType); |
- } |
- |
test_inferCompilationUnit_invalid_inheritanceCycle() async { |
CompilationUnitElement unit = await resolve(''' |
class A extends C {} |
@@ -869,84 +408,6 @@ class B<E> extends A<E> { |
reason: 'function type should still have type arguments'); |
} |
- test_inferCompilationUnit_setter_single() async { |
- String setterName = 'g'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- set $setterName(int x) {} |
-} |
-class B extends A { |
- set $setterName(x) {} |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- FieldElement fieldA = classA.getField(setterName); |
- PropertyAccessorElement setterA = classA.getSetter(setterName); |
- ClassElement classB = unit.getType('B'); |
- FieldElement fieldB = classB.getField(setterName); |
- PropertyAccessorElement setterB = classB.getSetter(setterName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(setterB.parameters[0].type.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldB.type, fieldA.type); |
- expect(setterB.parameters[0].type, setterA.parameters[0].type); |
- } |
- |
- test_inferCompilationUnit_setter_single_generic() async { |
- String setterName = 'g'; |
- CompilationUnitElement unit = await resolve(''' |
-class A<E> { |
- set $setterName(E x) {} |
-} |
-class B<E> extends A<E> { |
- set $setterName(x) {} |
-} |
-'''); |
- ClassElement classB = unit.getType('B'); |
- DartType typeBE = classB.typeParameters[0].type; |
- FieldElement fieldB = classB.getField(setterName); |
- PropertyAccessorElement setterB = classB.getSetter(setterName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(setterB.parameters[0].type.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- expect(fieldB.type, typeBE); |
- expect(setterB.parameters[0].type, typeBE); |
- } |
- |
- test_inferCompilationUnit_setter_single_inconsistentAccessors() async { |
- String getterName = 'g'; |
- CompilationUnitElement unit = await resolve(''' |
-class A { |
- int get $getterName => 0; |
- set $getterName(String value) {} |
-} |
-class B extends A { |
- set $getterName(x) {} |
-} |
-'''); |
- ClassElement classA = unit.getType('A'); |
- PropertyAccessorElement setterA = classA.getSetter(getterName); |
- ClassElement classB = unit.getType('B'); |
- FieldElement fieldB = classB.getField(getterName); |
- PropertyAccessorElement setterB = classB.getSetter(getterName); |
- expect(fieldB.type.isDynamic, isTrue); |
- expect(setterB.parameters[0].type.isDynamic, isTrue); |
- |
- _runInferrer(unit); |
- |
- // Expected behavior is that the getter is inferred: getters and setters |
- // are treated as independent methods. |
- expect(setterB.parameters[0].type, setterA.parameters[0].type); |
- |
- // Note that B's synthetic field type will be String. This matches what |
- // resolver would do if we explicitly typed the parameter as 'String' |
- expect(fieldB.type, setterB.parameters[0].type); |
- } |
- |
InstanceMemberInferrer _runInferrer(CompilationUnitElement unit) { |
InstanceMemberInferrer inferrer = createInferrer(unit.library); |
inferrer.inferCompilationUnit(unit); |