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

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

Issue 2990843002: Removed fixed dependencies (Closed)
Patch Set: Created 3 years, 5 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
« no previous file with comments | « packages/analyzer/test/src/task/strong/test_all.dart ('k') | packages/analyzer/test/src/task/test_all.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: packages/analyzer/test/src/task/strong_mode_test.dart
diff --git a/packages/analyzer/test/src/task/strong_mode_test.dart b/packages/analyzer/test/src/task/strong_mode_test.dart
index ff87d92a6e6ff8616cac3cf4764f2485ba3d3aa4..0ede013cee37e2f4ca0bd2c983643b7f6166389f 100644
--- a/packages/analyzer/test/src/task/strong_mode_test.dart
+++ b/packages/analyzer/test/src/task/strong_mode_test.dart
@@ -2,29 +2,34 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library test.src.task.strong_mode_test;
+library analyzer.test.src.task.strong_mode_test;
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/resolver/inheritance_manager.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/task/strong_mode.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'package:unittest/unittest.dart';
-import '../../reflective_tests.dart';
import '../../utils.dart';
import '../context/abstract_context.dart';
main() {
initializeTestEnvironment();
- runReflectiveTests(InstanceMemberInferrerTest);
- runReflectiveTests(VariableGathererTest);
+ defineReflectiveTests(InstanceMemberInferrerTest);
+ defineReflectiveTests(SetFieldTypeTest);
+ defineReflectiveTests(VariableGathererTest);
}
@reflectiveTest
class InstanceMemberInferrerTest extends AbstractContextTest {
- InstanceMemberInferrer get createInferrer =>
- new InstanceMemberInferrer(context.typeProvider,
- typeSystem: context.typeSystem);
+ InstanceMemberInferrer createInferrer(LibraryElement library) {
+ return new InstanceMemberInferrer(
+ context.typeProvider, new InheritanceManager(library),
+ typeSystem: context.typeSystem);
+ }
/**
* Add a source with the given [content] and return the result of resolving
@@ -36,13 +41,12 @@ class InstanceMemberInferrerTest extends AbstractContextTest {
}
void test_creation() {
- InstanceMemberInferrer inferrer = createInferrer;
+ InstanceMemberInferrer inferrer = createInferrer(null);
expect(inferrer, isNotNull);
expect(inferrer.typeSystem, isNotNull);
}
void test_inferCompilationUnit_field_multiple_different() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A {
@@ -61,14 +65,13 @@ class C implements A, B {
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_field_multiple_different_generic() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A<E> {
@@ -87,14 +90,13 @@ class C implements A<int>, B<double> {
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_field_multiple_dynamic() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A {
@@ -113,14 +115,13 @@ class C implements A, B {
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_field_multiple_same() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A {
@@ -142,14 +143,13 @@ class C implements A, B {
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldC.type, expectedType);
expect(getterC.returnType, expectedType);
}
void test_inferCompilationUnit_field_noOverride() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A {
@@ -162,7 +162,7 @@ class A {
expect(fieldA.type.isDynamic, isTrue);
expect(getterA.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ InstanceMemberInferrer inferrer = _runInferrer(unit);
DartType intType = inferrer.typeProvider.intType;
expect(fieldA.type, intType);
@@ -170,7 +170,6 @@ class A {
}
void test_inferCompilationUnit_field_noOverride_bottom() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A {
@@ -183,14 +182,13 @@ class A {
expect(fieldA.type.isDynamic, isTrue);
expect(getterA.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldA.type.isDynamic, isTrue);
expect(getterA.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_field_single_explicitlyDynamic() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A {
@@ -209,14 +207,13 @@ class B extends A {
expect(fieldB.type.isDynamic, isTrue);
expect(getterB.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldB.type, fieldA.type);
expect(getterB.returnType, getterA.returnType);
}
void test_inferCompilationUnit_field_single_final() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A {
@@ -235,14 +232,13 @@ class B extends A {
expect(fieldB.type.isDynamic, isTrue);
expect(getterB.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldB.type, fieldA.type);
expect(getterB.returnType, getterA.returnType);
}
void test_inferCompilationUnit_field_single_final_narrowType() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A {
@@ -258,14 +254,13 @@ class B extends A {
expect(fieldB.type.isDynamic, isTrue);
expect(getterB.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ InstanceMemberInferrer inferrer = _runInferrer(unit);
expect(fieldB.type, inferrer.typeProvider.intType);
expect(getterB.returnType, fieldB.type);
}
void test_inferCompilationUnit_field_single_generic() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A<E> {
@@ -282,14 +277,13 @@ class B<E> extends A<E> {
expect(fieldB.type.isDynamic, isTrue);
expect(getterB.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldB.type, typeBE);
expect(getterB.returnType, typeBE);
}
void test_inferCompilationUnit_field_single_inconsistentAccessors() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A {
@@ -306,14 +300,13 @@ class B extends A {
expect(fieldB.type.isDynamic, isTrue);
expect(getterB.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldB.type.isDynamic, isTrue);
expect(getterB.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_field_single_noModifiers() {
- InstanceMemberInferrer inferrer = createInferrer;
String fieldName = 'f';
CompilationUnitElement unit = resolve('''
class A {
@@ -332,14 +325,35 @@ class B extends A {
expect(fieldB.type.isDynamic, isTrue);
expect(getterB.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldB.type, fieldA.type);
expect(getterB.returnType, getterA.returnType);
}
+ void test_inferCompilationUnit_fieldFormal() {
+ String fieldName = 'f';
+ CompilationUnitElement unit = 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);
+ }
+
void test_inferCompilationUnit_getter_multiple_different() {
- InstanceMemberInferrer inferrer = createInferrer;
String getterName = 'g';
CompilationUnitElement unit = resolve('''
class A {
@@ -358,14 +372,13 @@ class C implements A, B {
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_getter_multiple_dynamic() {
- InstanceMemberInferrer inferrer = createInferrer;
String getterName = 'g';
CompilationUnitElement unit = resolve('''
class A {
@@ -384,14 +397,13 @@ class C implements A, B {
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_getter_multiple_same() {
- InstanceMemberInferrer inferrer = createInferrer;
String getterName = 'g';
CompilationUnitElement unit = resolve('''
class A {
@@ -413,14 +425,13 @@ class C implements A, B {
expect(fieldC.type.isDynamic, isTrue);
expect(getterC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldC.type, expectedType);
expect(getterC.returnType, expectedType);
}
void test_inferCompilationUnit_getter_single() {
- InstanceMemberInferrer inferrer = createInferrer;
String getterName = 'g';
CompilationUnitElement unit = resolve('''
class A {
@@ -439,14 +450,13 @@ class B extends A {
expect(fieldB.type.isDynamic, isTrue);
expect(getterB.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldB.type, fieldA.type);
expect(getterB.returnType, getterA.returnType);
}
void test_inferCompilationUnit_getter_single_generic() {
- InstanceMemberInferrer inferrer = createInferrer;
String getterName = 'g';
CompilationUnitElement unit = resolve('''
class A<E> {
@@ -463,14 +473,13 @@ class B<E> extends A<E> {
expect(fieldB.type.isDynamic, isTrue);
expect(getterB.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(fieldB.type, typeBE);
expect(getterB.returnType, typeBE);
}
void test_inferCompilationUnit_getter_single_inconsistentAccessors() {
- InstanceMemberInferrer inferrer = createInferrer;
String getterName = 'g';
CompilationUnitElement unit = resolve('''
class A {
@@ -490,7 +499,7 @@ class B extends A {
expect(fieldB.type.isDynamic, isTrue);
expect(getterB.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
// Expected behavior is that the getter is inferred: getters and setters
// are treated as independent methods.
@@ -498,99 +507,16 @@ class B extends A {
expect(getterB.returnType, getterA.returnType);
}
- void test_inferCompilationUnit_setter_single() {
- InstanceMemberInferrer inferrer = createInferrer;
- String setterName = 'g';
- CompilationUnitElement unit = 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);
-
- inferrer.inferCompilationUnit(unit);
-
- expect(fieldB.type, fieldA.type);
- expect(setterB.parameters[0].type, setterA.parameters[0].type);
- }
-
- void test_inferCompilationUnit_setter_single_generic() {
- InstanceMemberInferrer inferrer = createInferrer;
- String setterName = 'g';
- CompilationUnitElement unit = 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);
-
- inferrer.inferCompilationUnit(unit);
-
- expect(fieldB.type, typeBE);
- expect(setterB.parameters[0].type, typeBE);
- }
-
- void test_inferCompilationUnit_setter_single_inconsistentAccessors() {
- InstanceMemberInferrer inferrer = createInferrer;
- String getterName = 'g';
- CompilationUnitElement unit = 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);
-
- inferrer.inferCompilationUnit(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);
- }
-
void test_inferCompilationUnit_invalid_inheritanceCycle() {
- InstanceMemberInferrer inferrer = createInferrer;
CompilationUnitElement unit = resolve('''
class A extends C {}
class B extends A {}
class C extends B {}
''');
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
}
void test_inferCompilationUnit_method_parameter_multiple_different() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -608,13 +534,12 @@ class C implements A, B {
ParameterElement parameterC = methodC.parameters[0];
expect(parameterC.type.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(parameterC.type.isDynamic, isTrue);
}
void test_inferCompilationUnit_method_parameter_multiple_named_different() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -632,13 +557,12 @@ class C implements A, B {
ParameterElement parameterC = methodC.parameters[0];
expect(parameterC.type.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(parameterC.type.isDynamic, isTrue);
}
void test_inferCompilationUnit_method_parameter_multiple_named_same() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -660,13 +584,12 @@ class C implements A, B {
ParameterElement parameterC = methodC.parameters[0];
expect(parameterC.type.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(parameterC.type, expectedType);
}
void test_inferCompilationUnit_method_parameter_multiple_namedAndRequired() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -684,13 +607,13 @@ class C implements A, B {
ParameterElement parameterC = methodC.parameters[0];
expect(parameterC.type.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(parameterC.type.isDynamic, isTrue);
}
- void test_inferCompilationUnit_method_parameter_multiple_optionalAndRequired() {
- InstanceMemberInferrer inferrer = createInferrer;
+ void
+ test_inferCompilationUnit_method_parameter_multiple_optionalAndRequired() {
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -712,13 +635,12 @@ class C implements A, B {
ParameterElement parameterC = methodC.parameters[0];
expect(parameterC.type.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(parameterC.type, expectedType);
}
void test_inferCompilationUnit_method_parameter_single_generic() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A<E> {
@@ -735,7 +657,7 @@ class C<E> implements A<E> {
expect(parameterC.type.isDynamic, isTrue);
expect(methodC.type.typeArguments, [typeCE]);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(parameterC.type, classC.typeParameters[0].type);
expect(methodC.type.typeArguments, [typeCE],
@@ -743,7 +665,6 @@ class C<E> implements A<E> {
}
void test_inferCompilationUnit_method_return_multiple_different() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -760,13 +681,12 @@ class C implements A, B {
MethodElement methodC = classC.getMethod(methodName);
expect(methodC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(methodC.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_method_return_multiple_different_generic() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A<E> {
@@ -783,13 +703,12 @@ class C implements A<int>, B<double> {
MethodElement methodC = classC.getMethod(methodName);
expect(methodC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(methodC.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_method_return_multiple_dynamic() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -806,13 +725,12 @@ class C implements A, B {
MethodElement methodC = classC.getMethod(methodName);
expect(methodC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(methodC.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_method_return_multiple_same_generic() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A<E> {
@@ -829,13 +747,12 @@ class C<E> implements A<E>, B<E> {
MethodElement methodC = classC.getMethod(methodName);
expect(methodC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(methodC.returnType, classC.typeParameters[0].type);
}
void test_inferCompilationUnit_method_return_multiple_same_nonVoid() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -855,13 +772,12 @@ class C implements A, B {
MethodElement methodC = classC.getMethod(methodName);
expect(methodC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(methodC.returnType, expectedType);
}
void test_inferCompilationUnit_method_return_multiple_same_void() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -881,13 +797,12 @@ class C implements A, B {
MethodElement methodC = classC.getMethod(methodName);
expect(methodC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(methodC.returnType, expectedType);
}
void test_inferCompilationUnit_method_return_multiple_void() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -904,13 +819,12 @@ class C implements A, B {
MethodElement methodC = classC.getMethod(methodName);
expect(methodC.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(methodC.returnType.isDynamic, isTrue);
}
void test_inferCompilationUnit_method_return_single() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A {
@@ -926,13 +840,12 @@ class B extends A {
MethodElement methodB = classB.getMethod(methodName);
expect(methodB.returnType.isDynamic, isTrue);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(methodB.returnType, methodA.returnType);
}
void test_inferCompilationUnit_method_return_single_generic() {
- InstanceMemberInferrer inferrer = createInferrer;
String methodName = 'm';
CompilationUnitElement unit = resolve('''
class A<E> {
@@ -948,34 +861,112 @@ class B<E> extends A<E> {
expect(methodB.returnType.isDynamic, isTrue);
expect(methodB.type.typeArguments, [typeBE]);
- inferrer.inferCompilationUnit(unit);
+ _runInferrer(unit);
expect(methodB.returnType, classB.typeParameters[0].type);
expect(methodB.type.typeArguments, [typeBE],
reason: 'function type should still have type arguments');
}
- void test_inferCompilationUnit_fieldFormal() {
- InstanceMemberInferrer inferrer = createInferrer;
- String fieldName = 'f';
+ void test_inferCompilationUnit_setter_single() {
+ String setterName = 'g';
CompilationUnitElement unit = resolve('''
class A {
- final $fieldName = 0;
- A([this.$fieldName = 'hello']);
+ set $setterName(int x) {}
+}
+class B extends A {
+ set $setterName(x) {}
}
''');
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);
+ 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);
+ }
+ void test_inferCompilationUnit_setter_single_generic() {
+ String setterName = 'g';
+ CompilationUnitElement unit = 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);
+ }
+
+ void test_inferCompilationUnit_setter_single_inconsistentAccessors() {
+ String getterName = 'g';
+ CompilationUnitElement unit = 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);
+ return inferrer;
+ }
+}
- DartType intType = inferrer.typeProvider.intType;
- expect(fieldA.type, intType);
- expect(paramA.type, intType);
+@reflectiveTest
+class SetFieldTypeTest extends AbstractContextTest {
+ void test_setter_withoutParameter() {
+ CompilationUnitElement unit = _resolve('''
+var x = 0;
+set x() {}
+''');
+ TopLevelVariableElement variable = unit.topLevelVariables.single;
+ setFieldType(variable, context.typeProvider.intType);
+ }
+
+ CompilationUnitElement _resolve(String content) {
+ Source source = addSource('/test.dart', content);
+ return context.resolveCompilationUnit2(source, source).element;
}
}
« no previous file with comments | « packages/analyzer/test/src/task/strong/test_all.dart ('k') | packages/analyzer/test/src/task/test_all.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698