| Index: pkg/analyzer/test/src/task/strong/checker_test.dart
|
| diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
|
| index 9a7b128a5e556098782b417bbecdbd6b4cad6da8..28ab23aa81a90a172b1a8dbc7725a5d356d6de3b 100644
|
| --- a/pkg/analyzer/test/src/task/strong/checker_test.dart
|
| +++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
|
| @@ -229,10 +229,8 @@ void main() {
|
|
|
| test('dynamic invocation', () {
|
| checkFile('''
|
| - class A {
|
| - dynamic call(dynamic x) => x;
|
| - }
|
| - class B extends A {
|
| + typedef dynamic A(dynamic x);
|
| + class B {
|
| int call(int x) => x;
|
| double col(double x) => x;
|
| }
|
| @@ -276,7 +274,6 @@ void main() {
|
| /*info:DYNAMIC_INVOKE*/g.foo(42.0);
|
| /*info:DYNAMIC_INVOKE*/g./*info:UNDEFINED_GETTER*/x;
|
| A f = new B();
|
| - f.call(/*info:ARGUMENT_TYPE_NOT_ASSIGNABLE*/32.0);
|
| /*info:DYNAMIC_INVOKE*/f.col(42.0);
|
| /*info:DYNAMIC_INVOKE*/f.foo(42.0);
|
| /*info:DYNAMIC_INVOKE*/f./*warning:UNDEFINED_GETTER*/x;
|
| @@ -2002,6 +1999,99 @@ void main() {
|
| ''');
|
| });
|
|
|
| + test('method override, fuzzy arrows', () {
|
| + checkFile('''
|
| + abstract class A {
|
| + bool operator ==(Object object);
|
| + }
|
| +
|
| + class B implements A {}
|
| +
|
| +
|
| + class F {
|
| + void f(x) {}
|
| + void g(int x) {}
|
| + }
|
| +
|
| + class G extends F {
|
| + /*severe:INVALID_METHOD_OVERRIDE*/void f(int x) {}
|
| + void g(dynamic x) {}
|
| + }
|
| +
|
| + class H implements F {
|
| + /*severe:INVALID_METHOD_OVERRIDE*/void f(int x) {}
|
| + void g(dynamic x) {}
|
| + }
|
| +
|
| + ''');
|
| + });
|
| +
|
| + test('getter override, fuzzy arrows', () {
|
| + checkFile('''
|
| + typedef void ToVoid<T>(T x);
|
| + class F {
|
| + ToVoid<dynamic> get f => null;
|
| + ToVoid<int> get g => null;
|
| + }
|
| +
|
| + class G extends F {
|
| + ToVoid<int> get f => null;
|
| + /*severe:INVALID_METHOD_OVERRIDE*/ToVoid<dynamic> get g => null;
|
| + }
|
| +
|
| + class H implements F {
|
| + ToVoid<int> get f => null;
|
| + /*severe:INVALID_METHOD_OVERRIDE*/ToVoid<dynamic> get g => null;
|
| + }
|
| + ''');
|
| + });
|
| +
|
| + test('setter override, fuzzy arrows', () {
|
| + checkFile('''
|
| + typedef void ToVoid<T>(T x);
|
| + class F {
|
| + void set f(ToVoid<dynamic> x) {}
|
| + void set g(ToVoid<int> x) {}
|
| + void set h(dynamic x) {}
|
| + void set i(int x) {}
|
| + }
|
| +
|
| + class G extends F {
|
| + /*severe:INVALID_METHOD_OVERRIDE*/void set f(ToVoid<int> x) {}
|
| + void set g(ToVoid<dynamic> x) {}
|
| + void set h(int x) {}
|
| + /*severe:INVALID_METHOD_OVERRIDE*/void set i(dynamic x) {}
|
| + }
|
| +
|
| + class H implements F {
|
| + /*severe:INVALID_METHOD_OVERRIDE*/void set f(ToVoid<int> x) {}
|
| + void set g(ToVoid<dynamic> x) {}
|
| + void set h(int x) {}
|
| + /*severe:INVALID_METHOD_OVERRIDE*/void set i(dynamic x) {}
|
| + }
|
| + ''');
|
| + });
|
| +
|
| + test('field override, fuzzy arrows', () {
|
| + checkFile('''
|
| + typedef void ToVoid<T>(T x);
|
| + class F {
|
| + final ToVoid<dynamic> f = null;
|
| + final ToVoid<int> g = null;
|
| + }
|
| +
|
| + class G extends F {
|
| + /*severe:INVALID_FIELD_OVERRIDE*/final ToVoid<int> f = null;
|
| + /*severe:INVALID_FIELD_OVERRIDE, severe:INVALID_METHOD_OVERRIDE*/final ToVoid<dynamic> g = null;
|
| + }
|
| +
|
| + class H implements F {
|
| + final ToVoid<int> f = null;
|
| + /*severe:INVALID_METHOD_OVERRIDE*/final ToVoid<dynamic> g = null;
|
| + }
|
| + ''');
|
| + });
|
| +
|
| test('generic class method override', () {
|
| checkFile('''
|
| class A {}
|
| @@ -2631,7 +2721,7 @@ void main() {
|
| implements I1 {}
|
|
|
| class T2 extends Base implements I1 {
|
| - /*severe:INVALID_METHOD_OVERRIDE,severe:INVALID_METHOD_OVERRIDE*/m(a) {}
|
| + m(a) {}
|
| }
|
|
|
| class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T3
|
| @@ -2639,7 +2729,7 @@ void main() {
|
| implements I1 {}
|
|
|
| class T4 extends Object with Base implements I1 {
|
| - /*severe:INVALID_METHOD_OVERRIDE,severe:INVALID_METHOD_OVERRIDE*/m(a) {}
|
| + m(a) {}
|
| }
|
| ''');
|
| });
|
|
|