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

Unified Diff: pkg/analyzer/test/src/task/strong_mode_test.dart

Issue 2761633002: Infer fields/getters/setters types according to the new top-level inference rules. (Closed)
Patch Set: Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
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);
« no previous file with comments | « pkg/analyzer/test/src/task/strong/inferred_type_test.dart ('k') | pkg/dev_compiler/test/not_yet_strong_tests.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698