| Index: pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| index 9f75d5dbdf85208b1f3cfa54df7bf02fd7c31957..3290d9bde153dfd33c72a15de0d7af8fa5b4abc2 100644
|
| --- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| +++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| @@ -19,7 +19,7 @@ void main() {
|
| checkFile('''
|
| test1() {
|
| int x = 3;
|
| - x = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + x = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| }
|
| ''');
|
| });
|
| @@ -29,7 +29,7 @@ void main() {
|
| checkFile('''
|
| test2() {
|
| var x = 3;
|
| - x = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + x = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| }
|
| ''');
|
| });
|
| @@ -69,13 +69,13 @@ void main() {
|
|
|
| test1() {
|
| var a = x;
|
| - a = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + a = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| a = 3;
|
| var b = y;
|
| - b = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + b = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| b = 4;
|
| var c = z;
|
| - c = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + c = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| c = 4;
|
| }
|
|
|
| @@ -91,13 +91,13 @@ void main() {
|
|
|
| test1() {
|
| var a = x;
|
| - a = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + a = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| a = 3;
|
| var b = y;
|
| - b = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + b = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| b = 4;
|
| var c = z;
|
| - c = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + c = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| c = 4;
|
| }
|
|
|
| @@ -120,11 +120,11 @@ void main() {
|
|
|
| test() {
|
| x = "hi";
|
| - y = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + y = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| A.x = "hi";
|
| - A.y = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + A.y = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| new A().x2 = "hi";
|
| - new A().y2 = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + new A().y2 = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| }
|
| ''');
|
| });
|
| @@ -140,8 +140,8 @@ void main() {
|
| var y = x;
|
|
|
| test1() {
|
| - x = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| - y = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + x = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| + y = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| }
|
| ''');
|
| });
|
| @@ -157,8 +157,8 @@ void main() {
|
| class B { static var y = A.x; }
|
|
|
| test1() {
|
| - A.x = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| - B.y = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + A.x = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| + B.y = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| }
|
| ''');
|
| });
|
| @@ -332,7 +332,7 @@ void main() {
|
|
|
| test('infer from complex expressions if the outer-most value is precise', () {
|
| checkFile('''
|
| - class A { int x; B operator+(other) {} }
|
| + class A { int x; B operator+(other) => null; }
|
| class B extends A { B(ignore); }
|
| var a = new A();
|
| // Note: it doesn't matter that some of these refer to 'x'.
|
| @@ -350,28 +350,28 @@ void main() {
|
| var j = null as B;
|
|
|
| test1() {
|
| - a = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + a = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| a = new B(3);
|
| - b = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + b = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| b = new B(3);
|
| c1 = [];
|
| - c1 = /*severe:STATIC_TYPE_ERROR*/{};
|
| + c1 = /*warning:INVALID_ASSIGNMENT*/{};
|
| c2 = [];
|
| - c2 = /*severe:STATIC_TYPE_ERROR*/{};
|
| + c2 = /*warning:INVALID_ASSIGNMENT*/{};
|
| d = {};
|
| - d = /*severe:STATIC_TYPE_ERROR*/3;
|
| + d = /*warning:INVALID_ASSIGNMENT*/3;
|
| e = new A();
|
| - e = /*severe:STATIC_TYPE_ERROR*/{};
|
| + e = /*warning:INVALID_ASSIGNMENT*/{};
|
| f = 3;
|
| - f = /*severe:STATIC_TYPE_ERROR*/false;
|
| + f = /*warning:INVALID_ASSIGNMENT*/false;
|
| g = 1;
|
| - g = /*severe:STATIC_TYPE_ERROR*/false;
|
| - h = /*severe:STATIC_TYPE_ERROR*/false;
|
| + g = /*warning:INVALID_ASSIGNMENT*/false;
|
| + h = /*warning:INVALID_ASSIGNMENT*/false;
|
| h = new B('b');
|
| i = false;
|
| j = new B('b');
|
| - j = /*severe:STATIC_TYPE_ERROR*/false;
|
| - j = /*severe:STATIC_TYPE_ERROR*/[];
|
| + j = /*warning:INVALID_ASSIGNMENT*/false;
|
| + j = /*warning:INVALID_ASSIGNMENT*/[];
|
| }
|
| ''');
|
| });
|
| @@ -448,7 +448,7 @@ main() {
|
| class Bar<T extends Iterable<String>> {
|
| void foo(T t) {
|
| for (var i in t) {
|
| - int x = /*severe:STATIC_TYPE_ERROR*/i;
|
| + int x = /*warning:INVALID_ASSIGNMENT*/i;
|
| }
|
| }
|
| }
|
| @@ -456,7 +456,7 @@ main() {
|
| class Baz<T, E extends Iterable<T>, S extends E> {
|
| void foo(S t) {
|
| for (var i in t) {
|
| - int x = /*severe:STATIC_TYPE_ERROR*/i;
|
| + int x = /*warning:INVALID_ASSIGNMENT*/i;
|
| T y = i;
|
| }
|
| }
|
| @@ -465,20 +465,22 @@ main() {
|
| test() {
|
| var list = <Foo>[];
|
| for (var x in list) {
|
| - String y = /*severe:STATIC_TYPE_ERROR*/x;
|
| + String y = /*warning:INVALID_ASSIGNMENT*/x;
|
| }
|
|
|
| for (dynamic x in list) {
|
| - String y = /*info:DYNAMIC_CAST*/x;
|
| + // The INVALID_ASSIGNMENT hint is because type propagation knows x is
|
| + // a Foo.
|
| + String y = /*info:DYNAMIC_CAST,info:INVALID_ASSIGNMENT*/x;
|
| }
|
|
|
| - for (String x in /*severe:STATIC_TYPE_ERROR*/list) {
|
| + for (String x in /*warning:FOR_IN_OF_INVALID_ELEMENT_TYPE*/list) {
|
| String y = x;
|
| }
|
|
|
| var z;
|
| for(z in list) {
|
| - String y = /*info:DYNAMIC_CAST*/z;
|
| + String y = /*info:DYNAMIC_CAST,info:INVALID_ASSIGNMENT*/z;
|
| }
|
|
|
| Iterable iter = list;
|
| @@ -493,7 +495,7 @@ main() {
|
|
|
| var map = <String, Foo>{};
|
| // Error: map must be an Iterable.
|
| - for (var x in /*severe:STATIC_TYPE_ERROR*/map) {
|
| + for (var x in /*warning:FOR_IN_OF_INVALID_TYPE*/map) {
|
| String y = /*info:DYNAMIC_CAST*/x;
|
| }
|
|
|
| @@ -555,10 +557,10 @@ main() {
|
|
|
| test5() {
|
| var a1 = new A();
|
| - a1.x = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + a1.x = /*warning:INVALID_ASSIGNMENT*/"hi";
|
|
|
| A a2 = new A();
|
| - a2.x = /*severe:STATIC_TYPE_ERROR*/"hi";
|
| + a2.x = /*warning:INVALID_ASSIGNMENT*/"hi";
|
| }
|
| ''');
|
| });
|
| @@ -603,7 +605,7 @@ main() {
|
| }
|
|
|
| foo() {
|
| - String y = /*severe:STATIC_TYPE_ERROR*/new B().x;
|
| + String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
|
| int z = new B().x;
|
| }
|
| ''');
|
| @@ -612,7 +614,7 @@ main() {
|
| test('4', () {
|
| checkFile('''
|
| class A {
|
| - int x = 2;
|
| + final int x = 2;
|
| }
|
|
|
| class B implements A {
|
| @@ -620,7 +622,7 @@ main() {
|
| }
|
|
|
| foo() {
|
| - String y = /*severe:STATIC_TYPE_ERROR*/new B().x;
|
| + String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
|
| int z = new B().x;
|
| }
|
| ''');
|
| @@ -631,7 +633,7 @@ main() {
|
| test('infer', () {
|
| checkFile('''
|
| class A<T> {
|
| - T x;
|
| + final T x = null;
|
| }
|
|
|
| class B implements A<int> {
|
| @@ -648,17 +650,17 @@ main() {
|
| test('3', () {
|
| checkFile('''
|
| class A<T> {
|
| - T x;
|
| - T w;
|
| + final T x = null;
|
| + final T w = null;
|
| }
|
|
|
| class B implements A<int> {
|
| get x => 3;
|
| - get w => /*severe:STATIC_TYPE_ERROR*/"hello";
|
| + get w => /*warning:RETURN_OF_INVALID_TYPE*/"hello";
|
| }
|
|
|
| foo() {
|
| - String y = /*severe:STATIC_TYPE_ERROR*/new B().x;
|
| + String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
|
| int z = new B().x;
|
| }
|
| ''');
|
| @@ -676,7 +678,7 @@ main() {
|
| }
|
|
|
| foo() {
|
| - int y = /*severe:STATIC_TYPE_ERROR*/new B<String>().x;
|
| + int y = /*warning:INVALID_ASSIGNMENT*/new B<String>().x;
|
| String z = new B<String>().x;
|
| }
|
| ''');
|
| @@ -694,7 +696,7 @@ main() {
|
| }
|
|
|
| abstract class M {
|
| - int y;
|
| + final int y = 0;
|
| }
|
|
|
| class B<E> extends A<E> implements M {
|
| @@ -705,7 +707,7 @@ main() {
|
| }
|
|
|
| foo () {
|
| - int y = /*severe:STATIC_TYPE_ERROR*/new B().m(null, null);
|
| + int y = /*warning:INVALID_ASSIGNMENT*/new B().m(null, null);
|
| String z = new B().m(null, null);
|
| }
|
| ''');
|
| @@ -723,14 +725,14 @@ main() {
|
| checkFile('''
|
| import 'b.dart';
|
| class C extends B {
|
| - get x;
|
| + get x => null;
|
| }
|
| class A {
|
| - int get x;
|
| + int get x => 0;
|
| }
|
| - foo () {
|
| + foo() {
|
| int y = new C().x;
|
| - String z = /*severe:STATIC_TYPE_ERROR*/new C().x;
|
| + String z = /*warning:INVALID_ASSIGNMENT*/new C().x;
|
| }
|
| ''');
|
| });
|
| @@ -753,11 +755,11 @@ main() {
|
| abstract class A<E> implements I<E> {
|
| const A();
|
|
|
| - E value;
|
| + final E value = null;
|
| }
|
|
|
| abstract class M {
|
| - int y;
|
| + final int y = 0;
|
| }
|
|
|
| class B<E> extends A<E> implements M {
|
| @@ -768,7 +770,7 @@ main() {
|
| }
|
|
|
| foo () {
|
| - int y = /*severe:STATIC_TYPE_ERROR*/new B<String>().m(null, null).value;
|
| + int y = /*warning:INVALID_ASSIGNMENT*/new B<String>().m(null, null).value;
|
| String z = new B<String>().m(null, null).value;
|
| }
|
| ''');
|
| @@ -778,7 +780,7 @@ main() {
|
| test('infer', () {
|
| checkFile('''
|
| class A {
|
| - int x = 2;
|
| + final int x = 2;
|
| }
|
|
|
| class B implements A {
|
| @@ -803,11 +805,11 @@ main() {
|
| }
|
|
|
| class A {
|
| - final I1 a;
|
| + final I1 a = null;
|
| }
|
|
|
| class B {
|
| - final I2 a;
|
| + final I2 a = null;
|
| }
|
|
|
| class C1 implements A, B {
|
| @@ -836,11 +838,11 @@ main() {
|
| }
|
|
|
| class A {
|
| - final I1 a;
|
| + final I1 a = null;
|
| }
|
|
|
| class B {
|
| - final I2 a;
|
| + final I2 a = null;
|
| }
|
|
|
| class C1 implements A, B {
|
| @@ -873,7 +875,7 @@ main() {
|
| test('infer from RHS only if it wont conflict with overridden fields 2', () {
|
| checkFile('''
|
| class A {
|
| - final x;
|
| + final x = null;
|
| }
|
|
|
| class B implements A {
|
| @@ -881,7 +883,7 @@ main() {
|
| }
|
|
|
| foo() {
|
| - String y = /*severe:STATIC_TYPE_ERROR*/new B().x;
|
| + String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
|
| int z = new B().x;
|
| }
|
| ''');
|
| @@ -902,13 +904,13 @@ main() {
|
| int i;
|
|
|
| s = /*info:DYNAMIC_CAST*/new B().x;
|
| - s = /*severe:STATIC_TYPE_ERROR*/new B().y;
|
| + s = /*warning:INVALID_ASSIGNMENT*/new B().y;
|
| s = new B().z;
|
| - s = /*severe:STATIC_TYPE_ERROR*/new B().w;
|
| + s = /*warning:INVALID_ASSIGNMENT*/new B().w;
|
|
|
| i = /*info:DYNAMIC_CAST*/new B().x;
|
| i = new B().y;
|
| - i = /*severe:STATIC_TYPE_ERROR*/new B().z;
|
| + i = /*warning:INVALID_ASSIGNMENT*/new B().z;
|
| i = new B().w;
|
| }
|
| ''');
|
| @@ -1046,7 +1048,7 @@ main() {
|
| f(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/{y: x}]);
|
| }
|
| {
|
| - int f(int x) {};
|
| + int f(int x) => 0;
|
| A<int> a = /*info:INFERRED_TYPE_ALLOCATION*/new A(f);
|
| }
|
| }
|
| @@ -1097,8 +1099,12 @@ main() {
|
| A<int, String> a5 = /*severe:STATIC_TYPE_ERROR*/new A<dynamic, dynamic>.named(3, "hello");
|
| }
|
| {
|
| - A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new A(/*severe:STATIC_TYPE_ERROR*/"hello", /*severe:STATIC_TYPE_ERROR*/3);
|
| - A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new A.named(/*severe:STATIC_TYPE_ERROR*/"hello", /*severe:STATIC_TYPE_ERROR*/3);
|
| + A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new A(
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello",
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| + A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new A.named(
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello",
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| }
|
| {
|
| A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new B("hello", 3);
|
| @@ -1109,8 +1115,12 @@ main() {
|
| A<int, String> a5 = /*severe:STATIC_TYPE_ERROR*/new B<dynamic, dynamic>.named("hello", 3);
|
| }
|
| {
|
| - A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new B(/*severe:STATIC_TYPE_ERROR*/3, /*severe:STATIC_TYPE_ERROR*/"hello");
|
| - A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new B.named(/*severe:STATIC_TYPE_ERROR*/3, /*severe:STATIC_TYPE_ERROR*/"hello");
|
| + A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new B(
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3,
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| + A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new B.named(
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3,
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| }
|
| {
|
| A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new C(3);
|
| @@ -1121,8 +1131,10 @@ main() {
|
| A<int, int> a5 = /*severe:STATIC_TYPE_ERROR*/new C<dynamic>.named(3);
|
| }
|
| {
|
| - A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new C(/*severe:STATIC_TYPE_ERROR*/"hello");
|
| - A<int, int> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new C.named(/*severe:STATIC_TYPE_ERROR*/"hello");
|
| + A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new C(
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| + A<int, int> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new C.named(
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| }
|
| {
|
| A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new D("hello");
|
| @@ -1133,19 +1145,27 @@ main() {
|
| A<int, String> a5 = /*severe:STATIC_TYPE_ERROR*/new D<dynamic, dynamic>.named("hello");
|
| }
|
| {
|
| - A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new D(/*severe:STATIC_TYPE_ERROR*/3);
|
| - A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new D.named(/*severe:STATIC_TYPE_ERROR*/3);
|
| + A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new D(
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| + A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new D.named(
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| }
|
| { // Currently we only allow variable constraints. Test that we reject.
|
| A<C<int>, String> a0 = /*severe:STATIC_TYPE_ERROR*/new E("hello");
|
| }
|
| { // Check named and optional arguments
|
| - A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello", a: /*info:INFERRED_TYPE_LITERAL*/[3], b: /*info:INFERRED_TYPE_LITERAL*/["hello"]);
|
| - A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello", a: /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"], b: /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/3]);
|
| + A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello",
|
| + a: /*info:INFERRED_TYPE_LITERAL*/[3],
|
| + b: /*info:INFERRED_TYPE_LITERAL*/["hello"]);
|
| + A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello",
|
| + a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| + b: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3]);
|
| A<int, String> a2 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello", 3, "hello");
|
| A<int, String> a3 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello");
|
| - A<int, String> a4 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello", /*severe:STATIC_TYPE_ERROR*/"hello", /*severe:STATIC_TYPE_ERROR*/3);
|
| - A<int, String> a5 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello", /*severe:STATIC_TYPE_ERROR*/"hello");
|
| + A<int, String> a4 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello", /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| + A<int, String> a5 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| }
|
| }
|
| ''');
|
| @@ -1156,15 +1176,15 @@ main() {
|
| test('infer downwards', () {
|
| checkFile('''
|
| void foo([List<String> list1 = /*info:INFERRED_TYPE_LITERAL*/const [],
|
| - List<String> list2 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:STATIC_TYPE_ERROR*/42]]) {
|
| + List<String> list2 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]]) {
|
| }
|
|
|
| void main() {
|
| {
|
| List<int> l0 = /*info:INFERRED_TYPE_LITERAL*/[];
|
| List<int> l1 = /*info:INFERRED_TYPE_LITERAL*/[3];
|
| - List<int> l2 = /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"];
|
| - List<int> l3 = /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello", 3];
|
| + List<int> l2 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| + List<int> l3 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
|
| }
|
| {
|
| List<dynamic> l0 = [];
|
| @@ -1175,20 +1195,20 @@ main() {
|
| {
|
| List<int> l0 = /*severe:STATIC_TYPE_ERROR*/<num>[];
|
| List<int> l1 = /*severe:STATIC_TYPE_ERROR*/<num>[3];
|
| - List<int> l2 = /*severe:STATIC_TYPE_ERROR*/<num>[/*severe:STATIC_TYPE_ERROR*/"hello"];
|
| - List<int> l3 = /*severe:STATIC_TYPE_ERROR*/<num>[/*severe:STATIC_TYPE_ERROR*/"hello", 3];
|
| + List<int> l2 = /*severe:STATIC_TYPE_ERROR*/<num>[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| + List<int> l3 = /*severe:STATIC_TYPE_ERROR*/<num>[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
|
| }
|
| {
|
| Iterable<int> i0 = /*info:INFERRED_TYPE_LITERAL*/[];
|
| Iterable<int> i1 = /*info:INFERRED_TYPE_LITERAL*/[3];
|
| - Iterable<int> i2 = /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"];
|
| - Iterable<int> i3 = /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello", 3];
|
| + Iterable<int> i2 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| + Iterable<int> i3 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
|
| }
|
| {
|
| const List<int> c0 = /*info:INFERRED_TYPE_LITERAL*/const [];
|
| const List<int> c1 = /*info:INFERRED_TYPE_LITERAL*/const [3];
|
| - const List<int> c2 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:STATIC_TYPE_ERROR*/"hello"];
|
| - const List<int> c3 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:STATIC_TYPE_ERROR*/"hello", 3];
|
| + const List<int> c2 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| + const List<int> c3 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
|
| }
|
| }
|
| ''');
|
| @@ -1265,28 +1285,28 @@ main() {
|
| void main() {
|
| f0(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| f0(/*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - f0(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]);
|
| - f0(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello", 3]);
|
| + f0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + f0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
|
|
| f1(a: /*info:INFERRED_TYPE_LITERAL*/[]);
|
| f1(a: /*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]);
|
| - f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello", 3]);
|
| + f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
|
|
| f2(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| f2(/*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - f2(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]);
|
| - f2(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello", 3]);
|
| + f2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + f2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
|
|
| f3(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| - f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]]);
|
| - f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| + f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
|
|
| f4(a: /*info:INFERRED_TYPE_LITERAL*/[]);
|
| f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| - f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]]);
|
| - f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| + f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| }
|
| ''');
|
| });
|
| @@ -1313,30 +1333,30 @@ main() {
|
| void main() {
|
| new F0(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F0(/*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - new F0(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]);
|
| - new F0(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello",
|
| + new F0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello",
|
| 3]);
|
|
|
| new F1(a: /*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F1(a: /*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]);
|
| - new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello", 3]);
|
| + new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
|
|
| new F2(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F2(/*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - new F2(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]);
|
| - new F2(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello", 3]);
|
| + new F2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
|
|
| new F3(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| - new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]]);
|
| - new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"],
|
| + new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
|
|
| new F4(a: /*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| - new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]]);
|
| - new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"],
|
| + new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| }
|
| ''');
|
| @@ -1364,30 +1384,30 @@ main() {
|
| void main() {
|
| new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]);
|
| - new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello",
|
| + new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello",
|
| 3]);
|
|
|
| new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]);
|
| - new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello", 3]);
|
| + new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
|
|
| new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]);
|
| - new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello", 3]);
|
| + new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
|
|
| new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| - new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]]);
|
| - new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"],
|
| + new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
|
|
| new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| - new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"]]);
|
| - new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"],
|
| + new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
|
|
| new F3(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| @@ -1408,15 +1428,28 @@ main() {
|
| test('infer downwards', () {
|
| checkFile('''
|
| void foo([Map<int, String> m1 = /*info:INFERRED_TYPE_LITERAL*/const {1: "hello"},
|
| - Map<int, String> m2 = /*info:INFERRED_TYPE_LITERAL*/const {(/*severe:STATIC_TYPE_ERROR*/"hello"): "world"}]) {
|
| + Map<int, String> m2 = /*info:INFERRED_TYPE_LITERAL*/const {
|
| + // The warning is the type error, and the severe is the compile time
|
| + // error from const evaluation.
|
| + /*severe:MAP_KEY_TYPE_NOT_ASSIGNABLE,warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
|
| + "world"
|
| + }]) {
|
| }
|
| void main() {
|
| {
|
| Map<int, String> l0 = /*info:INFERRED_TYPE_LITERAL*/{};
|
| Map<int, String> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"};
|
| - Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{(/*severe:STATIC_TYPE_ERROR*/"hello"): "hello"};
|
| - Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{3: /*severe:STATIC_TYPE_ERROR*/3};
|
| - Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{3:"hello", (/*severe:STATIC_TYPE_ERROR*/"hello"): /*severe:STATIC_TYPE_ERROR*/3};
|
| + Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{
|
| + /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello"
|
| + };
|
| + Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{
|
| + 3: /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| + };
|
| + Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{
|
| + 3: "hello",
|
| + /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
|
| + /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| + };
|
| }
|
| {
|
| Map<dynamic, dynamic> l0 = {};
|
| @@ -1429,15 +1462,25 @@ main() {
|
| Map<dynamic, String> l0 = /*info:INFERRED_TYPE_LITERAL*/{};
|
| Map<dynamic, String> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"};
|
| Map<dynamic, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{"hello": "hello"};
|
| - Map<dynamic, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{3: /*severe:STATIC_TYPE_ERROR*/3};
|
| - Map<dynamic, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{3:"hello", "hello": /*severe:STATIC_TYPE_ERROR*/3};
|
| + Map<dynamic, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{
|
| + 3: /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| + };
|
| + Map<dynamic, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{
|
| + 3: "hello",
|
| + "hello": /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| + };
|
| }
|
| {
|
| Map<int, dynamic> l0 = /*info:INFERRED_TYPE_LITERAL*/{};
|
| Map<int, dynamic> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"};
|
| - Map<int, dynamic> l2 = /*info:INFERRED_TYPE_LITERAL*/{(/*severe:STATIC_TYPE_ERROR*/"hello"): "hello"};
|
| + Map<int, dynamic> l2 = /*info:INFERRED_TYPE_LITERAL*/{
|
| + /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello"
|
| + };
|
| Map<int, dynamic> l3 = /*info:INFERRED_TYPE_LITERAL*/{3: 3};
|
| - Map<int, dynamic> l4 = /*info:INFERRED_TYPE_LITERAL*/{3:"hello", (/*severe:STATIC_TYPE_ERROR*/"hello"): 3};
|
| + Map<int, dynamic> l4 = /*info:INFERRED_TYPE_LITERAL*/{
|
| + 3:"hello",
|
| + /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": 3
|
| + };
|
| }
|
| {
|
| Map<int, String> l0 = /*severe:STATIC_TYPE_ERROR*/<num, dynamic>{};
|
| @@ -1447,9 +1490,18 @@ main() {
|
| {
|
| const Map<int, String> l0 = /*info:INFERRED_TYPE_LITERAL*/const {};
|
| const Map<int, String> l1 = /*info:INFERRED_TYPE_LITERAL*/const {3: "hello"};
|
| - const Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/const {(/*severe:STATIC_TYPE_ERROR*/"hello"): "hello"};
|
| - const Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/const {3: /*severe:STATIC_TYPE_ERROR*/3};
|
| - const Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/const {3:"hello", (/*severe:STATIC_TYPE_ERROR*/"hello"): /*severe:STATIC_TYPE_ERROR*/3};
|
| + const Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/const {
|
| + /*severe:MAP_KEY_TYPE_NOT_ASSIGNABLE,warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
|
| + "hello"
|
| + };
|
| + const Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/const {
|
| + 3: /*severe:MAP_VALUE_TYPE_NOT_ASSIGNABLE,warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| + };
|
| + const Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/const {
|
| + 3:"hello",
|
| + /*severe:MAP_KEY_TYPE_NOT_ASSIGNABLE,warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
|
| + /*severe:MAP_VALUE_TYPE_NOT_ASSIGNABLE,warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| + };
|
| }
|
| }
|
| ''');
|
| @@ -1464,28 +1516,28 @@ main() {
|
| {
|
| Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => null;
|
| Function2<int, String> l1 = (int x) => "hello";
|
| - Function2<int, String> l2 = /*severe:STATIC_TYPE_ERROR*/(String x) => "hello";
|
| - Function2<int, String> l3 = /*severe:STATIC_TYPE_ERROR*/(int x) => 3;
|
| - Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*severe:STATIC_TYPE_ERROR*/3;};
|
| + Function2<int, String> l2 = /*warning:INVALID_ASSIGNMENT*/(String x) => "hello";
|
| + Function2<int, String> l3 = /*warning:INVALID_ASSIGNMENT*/(int x) => 3;
|
| + Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
|
| }
|
| {
|
| Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => null;
|
| Function2<int, String> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => "hello";
|
| - Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, severe:STATIC_TYPE_ERROR*/(x) => 3;
|
| - Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) {return /*severe:STATIC_TYPE_ERROR*/3;};
|
| - Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) {return /*severe:STATIC_TYPE_ERROR*/x;};
|
| + Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*/(x) => 3;
|
| + Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
|
| + Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/x;};
|
| }
|
| {
|
| Function2<int, List<String>> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => null;
|
| Function2<int, List<String>> l1 = (int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| - Function2<int, List<String>> l2 = /*severe:STATIC_TYPE_ERROR*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| - Function2<int, List<String>> l3 = (int x) => /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/3];
|
| - Function2<int, List<String>> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/3];};
|
| + Function2<int, List<String>> l2 = /*warning:INVALID_ASSIGNMENT*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| + Function2<int, List<String>> l3 = (int x) => /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
|
| + Function2<int, List<String>> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
|
| }
|
| {
|
| Function2<int, int> l0 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x;
|
| Function2<int, int> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x+1;
|
| - Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, severe:STATIC_TYPE_ERROR*/(x) => x;
|
| + Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*/(x) => x;
|
| Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/x.substring(3);
|
| Function2<String, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x.substring(3);
|
| }
|
| @@ -1501,27 +1553,27 @@ main() {
|
| var v = f;
|
| v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) => null;
|
| v = /*<T>*/(int x) => "hello";
|
| - v = /*severe:STATIC_TYPE_ERROR*//*<T>*/(String x) => "hello";
|
| - v = /*severe:STATIC_TYPE_ERROR*//*<T>*/(int x) => 3;
|
| - v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*severe:STATIC_TYPE_ERROR*/3;};
|
| + v = /*warning:INVALID_ASSIGNMENT*//*<T>*/(String x) => "hello";
|
| + v = /*warning:INVALID_ASSIGNMENT*//*<T>*/(int x) => 3;
|
| + v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
|
| }
|
| {
|
| String f/*<S>*/(int x) => null;
|
| var v = f;
|
| v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => null;
|
| v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => "hello";
|
| - v = /*info:INFERRED_TYPE_CLOSURE, severe:STATIC_TYPE_ERROR*//*<T>*/(x) => 3;
|
| - v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {return /*severe:STATIC_TYPE_ERROR*/3;};
|
| - v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {return /*severe:STATIC_TYPE_ERROR*/x;};
|
| + v = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*//*<T>*/(x) => 3;
|
| + v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
|
| + v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/x;};
|
| }
|
| {
|
| List<String> f/*<S>*/(int x) => null;
|
| var v = f;
|
| v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) => null;
|
| v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| - v = /*severe:STATIC_TYPE_ERROR*//*<T>*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| - v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/3];
|
| - v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/3];};
|
| + v = /*warning:INVALID_ASSIGNMENT*//*<T>*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| + v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
|
| + v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
|
| }
|
| {
|
| int int2int/*<S>*/(int x) => null;
|
| @@ -1531,7 +1583,7 @@ main() {
|
| x = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x;
|
| x = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x+1;
|
| var y = int2String;
|
| - y = /*info:INFERRED_TYPE_CLOSURE, severe:STATIC_TYPE_ERROR*//*<T>*/(x) => x;
|
| + y = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*//*<T>*/(x) => x;
|
| y = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => /*info:DYNAMIC_INVOKE, info:DYNAMIC_CAST*/x.substring(3);
|
| var z = string2String;
|
| z = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x.substring(3);
|
| @@ -1579,7 +1631,7 @@ main() {
|
| test('downwards inference async/await', () {
|
| checkFile('''
|
| import 'dart:async';
|
| - Future<int> test() async {
|
| + Future test() async {
|
| dynamic d;
|
| List<int> l0 = /*warning:DOWN_CAST_COMPOSITE should be pass*/await /*pass should be info:INFERRED_TYPE_LITERAL*/[d];
|
| List<int> l1 = await /*info:INFERRED_TYPE_ALLOCATION*/new Future.value(/*info:INFERRED_TYPE_LITERAL*/[/*info:DYNAMIC_CAST*/d]);
|
| @@ -1591,10 +1643,8 @@ main() {
|
| checkFile('''
|
| import 'dart:async';
|
| Future main() async {
|
| - for(int x in /*info:INFERRED_TYPE_LITERAL*/[1, 2, 3]) {
|
| - }
|
| - await for(int x in /*info:INFERRED_TYPE_ALLOCATION*/new Stream()) {
|
| - }
|
| + for(int x in /*info:INFERRED_TYPE_LITERAL*/[1, 2, 3]) {}
|
| + await for(int x in /*info:INFERRED_TYPE_ALLOCATION*/new Stream()) {}
|
| }
|
| ''');
|
| });
|
| @@ -1604,15 +1654,15 @@ main() {
|
| import 'dart:async';
|
| Stream<List<int>> foo() async* {
|
| yield /*info:INFERRED_TYPE_LITERAL*/[];
|
| - yield /*severe:STATIC_TYPE_ERROR*/new Stream();
|
| - yield* /*severe:STATIC_TYPE_ERROR*/[];
|
| + yield /*warning:YIELD_OF_INVALID_TYPE*/new Stream();
|
| + yield* /*warning:YIELD_OF_INVALID_TYPE*/[];
|
| yield* /*info:INFERRED_TYPE_ALLOCATION*/new Stream();
|
| }
|
|
|
| Iterable<Map<int, int>> bar() sync* {
|
| yield /*info:INFERRED_TYPE_LITERAL*/{};
|
| - yield /*severe:STATIC_TYPE_ERROR*/new List();
|
| - yield* /*severe:STATIC_TYPE_ERROR*/{};
|
| + yield /*warning:YIELD_OF_INVALID_TYPE*/new List();
|
| + yield* /*warning:YIELD_OF_INVALID_TYPE*/{};
|
| yield* /*info:INFERRED_TYPE_ALLOCATION*/new List();
|
| }
|
| ''');
|
| @@ -1635,7 +1685,7 @@ main() {
|
| checkFile('''
|
| void main() {
|
| List<int> l;
|
| - l = /*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/"hello"];
|
| + l = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| l = (l = /*info:INFERRED_TYPE_LITERAL*/[1]);
|
| }
|
| ''');
|
| @@ -1645,7 +1695,7 @@ main() {
|
| checkFile('''
|
| class Foo {
|
| var x = 1;
|
| - Foo([this.x = /*severe:STATIC_TYPE_ERROR*/"1"]);
|
| + Foo([this.x = /*warning:INVALID_ASSIGNMENT*/"1"]);
|
| }''');
|
| });
|
|
|
| @@ -1679,8 +1729,8 @@ main() {
|
| // Types other than int and double are not accepted.
|
| printInt(
|
| /*info:DOWN_CAST_IMPLICIT*/min(
|
| - /*severe:STATIC_TYPE_ERROR*/"hi",
|
| - /*severe:STATIC_TYPE_ERROR*/"there"));
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hi",
|
| + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"there"));
|
| }
|
| ''');
|
| });
|
| @@ -1706,10 +1756,10 @@ main() {
|
| checkFile('''
|
| import 'dart:_foreign_helper' show JS;
|
| main() {
|
| - String x = /*severe:STATIC_TYPE_ERROR*/JS('int', '42');
|
| + String x = /*warning:INVALID_ASSIGNMENT*/JS('int', '42');
|
| var y = JS('String', '"hello"');
|
| y = "world";
|
| - y = /*severe:STATIC_TYPE_ERROR*/42;
|
| + y = /*warning:INVALID_ASSIGNMENT*/42;
|
| }
|
| ''');
|
| });
|
| @@ -1734,11 +1784,11 @@ main() {
|
| takeIIO(math.max);
|
| takeDDO(math.max);
|
|
|
| - takeOOI(/*severe:STATIC_TYPE_ERROR*/math.max);
|
| - takeIDI(/*severe:STATIC_TYPE_ERROR*/math.max);
|
| - takeDID(/*severe:STATIC_TYPE_ERROR*/math.max);
|
| - takeOON(/*severe:STATIC_TYPE_ERROR*/math.max);
|
| - takeOOO(/*severe:STATIC_TYPE_ERROR*/math.max);
|
| + takeOOI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
|
| + takeIDI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
|
| + takeDID(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
|
| + takeOON(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
|
| + takeOOO(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
|
|
|
| // Also test SimpleIdentifier
|
| takeIII(min);
|
| @@ -1751,11 +1801,11 @@ main() {
|
| takeIIO(min);
|
| takeDDO(min);
|
|
|
| - takeOOI(/*severe:STATIC_TYPE_ERROR*/min);
|
| - takeIDI(/*severe:STATIC_TYPE_ERROR*/min);
|
| - takeDID(/*severe:STATIC_TYPE_ERROR*/min);
|
| - takeOON(/*severe:STATIC_TYPE_ERROR*/min);
|
| - takeOOO(/*severe:STATIC_TYPE_ERROR*/min);
|
| + takeOOI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
|
| + takeIDI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
|
| + takeDID(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
|
| + takeOON(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
|
| + takeOOO(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
|
|
|
| // Also PropertyAccess
|
| takeIII(new C().m);
|
| @@ -1777,14 +1827,14 @@ main() {
|
| //
|
| // That's legal because we're loosening parameter types.
|
| //
|
| - takeOON(/*warning:DOWN_CAST_COMPOSITE*/new C().m);
|
| - takeOOO(/*warning:DOWN_CAST_COMPOSITE*/new C().m);
|
| + takeOON(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
|
| + takeOOO(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
|
|
|
| // Note: this is a warning because a downcast of a method tear-off could work
|
| // in "normal" Dart, due to bivariance.
|
| - takeOOI(/*warning:DOWN_CAST_COMPOSITE*/new C().m);
|
| - takeIDI(/*warning:DOWN_CAST_COMPOSITE*/new C().m);
|
| - takeDID(/*warning:DOWN_CAST_COMPOSITE*/new C().m);
|
| + takeOOI(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
|
| + takeIDI(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
|
| + takeDID(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
|
| }
|
|
|
| void takeIII(int fn(int a, int b)) {}
|
| @@ -1864,7 +1914,7 @@ main() {
|
| new Foo<String>().method("str");
|
| new Foo().method("str");
|
|
|
| - new Foo<String>().method(/*severe:STATIC_TYPE_ERROR*/42);
|
| + new Foo<String>().method(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/42);
|
| }
|
| ''');
|
| });
|
| @@ -1884,7 +1934,7 @@ main() {
|
| /*=T*/ f/*<T>*/(List/*<T>*/ s) => null;
|
| main() {
|
| String x = f(/*info:INFERRED_TYPE_LITERAL*/['hi']);
|
| - String y = f(/*info:INFERRED_TYPE_LITERAL*/[/*severe:STATIC_TYPE_ERROR*/42]);
|
| + String y = f(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]);
|
| }
|
| ''');
|
| });
|
| @@ -1939,14 +1989,14 @@ void functionExpressionInvocation() {
|
| checkFile(r'''
|
| test1() {
|
| var x = [1, 2, 3];
|
| - x.add(/*severe:STATIC_TYPE_ERROR*/'hi');
|
| - x.add(/*severe:STATIC_TYPE_ERROR*/4.0);
|
| + x.add(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/'hi');
|
| + x.add(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/4.0);
|
| x.add(4);
|
| List<num> y = x;
|
| }
|
| test2() {
|
| var x = [1, 2.0, 3];
|
| - x.add(/*severe:STATIC_TYPE_ERROR*/'hi');
|
| + x.add(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/'hi');
|
| x.add(4.0);
|
| List<int> y = /*info:ASSIGNMENT_CAST*/x;
|
| }
|
| @@ -1969,18 +2019,18 @@ test1() {
|
| test1() {
|
| var x = { 1: 'x', 2: 'y' };
|
| x[3] = 'z';
|
| - x[/*severe:STATIC_TYPE_ERROR*/'hi'] = 'w';
|
| - x[/*severe:STATIC_TYPE_ERROR*/4.0] = 'u';
|
| - x[3] = /*severe:STATIC_TYPE_ERROR*/42;
|
| + x[/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/'hi'] = 'w';
|
| + x[/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/4.0] = 'u';
|
| + x[3] = /*warning:INVALID_ASSIGNMENT*/42;
|
| Map<num, String> y = x;
|
| }
|
|
|
| test2() {
|
| var x = { 1: 'x', 2: 'y', 3.0: new RegExp('.') };
|
| x[3] = 'z';
|
| - x[/*severe:STATIC_TYPE_ERROR*/'hi'] = 'w';
|
| + x[/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/'hi'] = 'w';
|
| x[4.0] = 'u';
|
| - x[3] = /*severe:STATIC_TYPE_ERROR*/42;
|
| + x[3] = /*warning:INVALID_ASSIGNMENT*/42;
|
| Pattern p = null;
|
| x[2] = p;
|
| Map<int, String> y = /*info:ASSIGNMENT_CAST*/x;
|
| @@ -2208,7 +2258,7 @@ test1() {
|
| main() {
|
| String f() => null;
|
| var g = f;
|
| - g = /*info:INFERRED_TYPE_CLOSURE*/() { return /*severe:STATIC_TYPE_ERROR*/1; };
|
| + g = /*info:INFERRED_TYPE_CLOSURE*/() { return /*warning:RETURN_OF_INVALID_TYPE*/1; };
|
| }
|
| ''');
|
| var f = mainUnit.element.functions[0].localVariables[0];
|
|
|