| 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 3891f67b2f28d86bb10a6af1ef68b6f548e2e136..56637929b23bd3280793d9b2a49df42230e9b3f2 100644
|
| --- a/pkg/analyzer/test/src/task/strong_mode_test.dart
|
| +++ b/pkg/analyzer/test/src/task/strong_mode_test.dart
|
| @@ -106,6 +106,32 @@ class C implements A, B {
|
| expect(getterC.returnType.isDynamic, isTrue);
|
| }
|
|
|
| + void test_inferCompilationUnit_field_multiple_different_generic() {
|
| + InstanceMemberInferrer inferrer = createInferrer;
|
| + String fieldName = 'f';
|
| + CompilationUnitElement unit = 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);
|
| +
|
| + inferrer.inferCompilationUnit(unit);
|
| +
|
| + expect(fieldC.type.isDynamic, isTrue);
|
| + expect(getterC.returnType.isDynamic, isTrue);
|
| + }
|
| +
|
| void test_inferCompilationUnit_field_multiple_dynamic() {
|
| InstanceMemberInferrer inferrer = createInferrer;
|
| String fieldName = 'f';
|
| @@ -254,6 +280,30 @@ class B extends A {
|
| expect(getterB.returnType, getterA.returnType);
|
| }
|
|
|
| + void test_inferCompilationUnit_field_single_generic() {
|
| + InstanceMemberInferrer inferrer = createInferrer;
|
| + String fieldName = 'f';
|
| + CompilationUnitElement unit = 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);
|
| +
|
| + inferrer.inferCompilationUnit(unit);
|
| +
|
| + expect(fieldB.type, typeBE);
|
| + expect(getterB.returnType, typeBE);
|
| + }
|
| +
|
| void test_inferCompilationUnit_field_single_inconsistentAccessors() {
|
| InstanceMemberInferrer inferrer = createInferrer;
|
| String fieldName = 'f';
|
| @@ -411,6 +461,30 @@ class B extends A {
|
| expect(getterB.returnType, getterA.returnType);
|
| }
|
|
|
| + void test_inferCompilationUnit_getter_single_generic() {
|
| + InstanceMemberInferrer inferrer = createInferrer;
|
| + String getterName = 'g';
|
| + CompilationUnitElement unit = 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);
|
| +
|
| + inferrer.inferCompilationUnit(unit);
|
| +
|
| + expect(fieldB.type, typeBE);
|
| + expect(getterB.returnType, typeBE);
|
| + }
|
| +
|
| void test_inferCompilationUnit_getter_single_inconsistentAccessors() {
|
| InstanceMemberInferrer inferrer = createInferrer;
|
| String getterName = 'g';
|
| @@ -445,7 +519,156 @@ class C extends B {}
|
| inferrer.inferCompilationUnit(unit);
|
| }
|
|
|
| - void test_inferCompilationUnit_method_multiple_different() {
|
| + void test_inferCompilationUnit_method_parameter_multiple_different() {
|
| + InstanceMemberInferrer inferrer = createInferrer;
|
| + String methodName = 'm';
|
| + CompilationUnitElement unit = resolve('''
|
| +class A {
|
| + $methodName(int p) => 0;
|
| +}
|
| +class B {
|
| + $methodName(double p) => 0;
|
| +}
|
| +class C implements A, B {
|
| + $methodName(p) => 0;
|
| +}
|
| +''');
|
| + ClassElement classC = unit.getType('C');
|
| + MethodElement methodC = classC.getMethod(methodName);
|
| + ParameterElement parameterC = methodC.parameters[0];
|
| + expect(parameterC.type.isDynamic, isTrue);
|
| +
|
| + inferrer.inferCompilationUnit(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 {
|
| + $methodName({int p}) => 0;
|
| +}
|
| +class B {
|
| + $methodName({int q}) => 0;
|
| +}
|
| +class C implements A, B {
|
| + $methodName({p}) => 0;
|
| +}
|
| +''');
|
| + ClassElement classC = unit.getType('C');
|
| + MethodElement methodC = classC.getMethod(methodName);
|
| + ParameterElement parameterC = methodC.parameters[0];
|
| + expect(parameterC.type.isDynamic, isTrue);
|
| +
|
| + inferrer.inferCompilationUnit(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 {
|
| + $methodName({int p}) => 0;
|
| +}
|
| +class B {
|
| + $methodName({int p}) => 0;
|
| +}
|
| +class C implements A, B {
|
| + $methodName({p}) => 0;
|
| +}
|
| +''');
|
| + ClassElement classA = unit.getType('A');
|
| + MethodElement methodA = classA.getMethod(methodName);
|
| + ParameterElement parameterA = methodA.parameters[0];
|
| + DartType expectedType = parameterA.type;
|
| + ClassElement classC = unit.getType('C');
|
| + MethodElement methodC = classC.getMethod(methodName);
|
| + ParameterElement parameterC = methodC.parameters[0];
|
| + expect(parameterC.type.isDynamic, isTrue);
|
| +
|
| + inferrer.inferCompilationUnit(unit);
|
| +
|
| + expect(parameterC.type, expectedType);
|
| + }
|
| +
|
| + void test_inferCompilationUnit_method_parameter_multiple_namedAndRequired() {
|
| + InstanceMemberInferrer inferrer = createInferrer;
|
| + String methodName = 'm';
|
| + CompilationUnitElement unit = resolve('''
|
| +class A {
|
| + $methodName({int p}) => 0;
|
| +}
|
| +class B {
|
| + $methodName(int p) => 0;
|
| +}
|
| +class C implements A, B {
|
| + $methodName(p) => 0;
|
| +}
|
| +''');
|
| + ClassElement classC = unit.getType('C');
|
| + MethodElement methodC = classC.getMethod(methodName);
|
| + ParameterElement parameterC = methodC.parameters[0];
|
| + expect(parameterC.type.isDynamic, isTrue);
|
| +
|
| + inferrer.inferCompilationUnit(unit);
|
| +
|
| + expect(parameterC.type.isDynamic, isTrue);
|
| + }
|
| +
|
| + void test_inferCompilationUnit_method_parameter_multiple_optionalAndRequired() {
|
| + InstanceMemberInferrer inferrer = createInferrer;
|
| + String methodName = 'm';
|
| + CompilationUnitElement unit = resolve('''
|
| +class A {
|
| + $methodName(int p) => 0;
|
| +}
|
| +class B {
|
| + $methodName([int p]) => 0;
|
| +}
|
| +class C implements A, B {
|
| + $methodName(p) => 0;
|
| +}
|
| +''');
|
| + ClassElement classA = unit.getType('A');
|
| + MethodElement methodA = classA.getMethod(methodName);
|
| + ParameterElement parameterA = methodA.parameters[0];
|
| + DartType expectedType = parameterA.type;
|
| + ClassElement classC = unit.getType('C');
|
| + MethodElement methodC = classC.getMethod(methodName);
|
| + ParameterElement parameterC = methodC.parameters[0];
|
| + expect(parameterC.type.isDynamic, isTrue);
|
| +
|
| + inferrer.inferCompilationUnit(unit);
|
| +
|
| + expect(parameterC.type, expectedType);
|
| + }
|
| +
|
| + void test_inferCompilationUnit_method_parameter_single_generic() {
|
| + InstanceMemberInferrer inferrer = createInferrer;
|
| + String methodName = 'm';
|
| + CompilationUnitElement unit = resolve('''
|
| +class A<E> {
|
| + $methodName(E p) => 0;
|
| +}
|
| +class C<E> implements A<E> {
|
| + $methodName(p) => 0;
|
| +}
|
| +''');
|
| + ClassElement classC = unit.getType('C');
|
| + MethodElement methodC = classC.getMethod(methodName);
|
| + ParameterElement parameterC = methodC.parameters[0];
|
| + expect(parameterC.type.isDynamic, isTrue);
|
| +
|
| + inferrer.inferCompilationUnit(unit);
|
| +
|
| + expect(parameterC.type, classC.typeParameters[0].type);
|
| + }
|
| +
|
| + void test_inferCompilationUnit_method_return_multiple_different() {
|
| InstanceMemberInferrer inferrer = createInferrer;
|
| String methodName = 'm';
|
| CompilationUnitElement unit = resolve('''
|
| @@ -468,7 +691,30 @@ class C implements A, B {
|
| expect(methodC.returnType.isDynamic, isTrue);
|
| }
|
|
|
| - void test_inferCompilationUnit_method_multiple_dynamic() {
|
| + void test_inferCompilationUnit_method_return_multiple_different_generic() {
|
| + InstanceMemberInferrer inferrer = createInferrer;
|
| + String methodName = 'm';
|
| + CompilationUnitElement unit = resolve('''
|
| +class A<E> {
|
| + E $methodName() => null;
|
| +}
|
| +class B<E> {
|
| + E $methodName() => null;
|
| +}
|
| +class C implements A<int>, B<double> {
|
| + $methodName() => null;
|
| +}
|
| +''');
|
| + ClassElement classC = unit.getType('C');
|
| + MethodElement methodC = classC.getMethod(methodName);
|
| + expect(methodC.returnType.isDynamic, isTrue);
|
| +
|
| + inferrer.inferCompilationUnit(unit);
|
| +
|
| + expect(methodC.returnType.isDynamic, isTrue);
|
| + }
|
| +
|
| + void test_inferCompilationUnit_method_return_multiple_dynamic() {
|
| InstanceMemberInferrer inferrer = createInferrer;
|
| String methodName = 'm';
|
| CompilationUnitElement unit = resolve('''
|
| @@ -491,7 +737,30 @@ class C implements A, B {
|
| expect(methodC.returnType.isDynamic, isTrue);
|
| }
|
|
|
| - void test_inferCompilationUnit_method_multiple_same_nonVoid() {
|
| + void test_inferCompilationUnit_method_return_multiple_same_generic() {
|
| + InstanceMemberInferrer inferrer = createInferrer;
|
| + String methodName = 'm';
|
| + CompilationUnitElement unit = resolve('''
|
| +class A<E> {
|
| + E $methodName() => 0;
|
| +}
|
| +class B<E> {
|
| + E $methodName() => 0;
|
| +}
|
| +class C<E> implements A<E>, B<E> {
|
| + $methodName() => 0;
|
| +}
|
| +''');
|
| + ClassElement classC = unit.getType('C');
|
| + MethodElement methodC = classC.getMethod(methodName);
|
| + expect(methodC.returnType.isDynamic, isTrue);
|
| +
|
| + inferrer.inferCompilationUnit(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('''
|
| @@ -499,7 +768,7 @@ class A {
|
| int $methodName() => 0;
|
| }
|
| class B {
|
| - int $methodName() => 0.0;
|
| + int $methodName() => 0;
|
| }
|
| class C implements A, B {
|
| $methodName() => 0;
|
| @@ -517,7 +786,7 @@ class C implements A, B {
|
| expect(methodC.returnType, expectedType);
|
| }
|
|
|
| - void test_inferCompilationUnit_method_multiple_same_void() {
|
| + void test_inferCompilationUnit_method_return_multiple_same_void() {
|
| InstanceMemberInferrer inferrer = createInferrer;
|
| String methodName = 'm';
|
| CompilationUnitElement unit = resolve('''
|
| @@ -543,7 +812,7 @@ class C implements A, B {
|
| expect(methodC.returnType, expectedType);
|
| }
|
|
|
| - void test_inferCompilationUnit_method_multiple_void() {
|
| + void test_inferCompilationUnit_method_return_multiple_void() {
|
| InstanceMemberInferrer inferrer = createInferrer;
|
| String methodName = 'm';
|
| CompilationUnitElement unit = resolve('''
|
| @@ -566,7 +835,7 @@ class C implements A, B {
|
| expect(methodC.returnType.isDynamic, isTrue);
|
| }
|
|
|
| - void test_inferCompilationUnit_method_single() {
|
| + void test_inferCompilationUnit_method_return_single() {
|
| InstanceMemberInferrer inferrer = createInferrer;
|
| String methodName = 'm';
|
| CompilationUnitElement unit = resolve('''
|
| @@ -587,4 +856,24 @@ class B extends A {
|
|
|
| expect(methodB.returnType, methodA.returnType);
|
| }
|
| +
|
| + void test_inferCompilationUnit_method_return_single_generic() {
|
| + InstanceMemberInferrer inferrer = createInferrer;
|
| + String methodName = 'm';
|
| + CompilationUnitElement unit = resolve('''
|
| +class A<E> {
|
| + E $methodName() => 0;
|
| +}
|
| +class B<E> extends A<E> {
|
| + $methodName() => 0;
|
| +}
|
| +''');
|
| + ClassElement classB = unit.getType('B');
|
| + MethodElement methodB = classB.getMethod(methodName);
|
| + expect(methodB.returnType.isDynamic, isTrue);
|
| +
|
| + inferrer.inferCompilationUnit(unit);
|
| +
|
| + expect(methodB.returnType, classB.typeParameters[0].type);
|
| + }
|
| }
|
|
|