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

Unified Diff: pkg/analyzer/test/src/task/strong/inferred_type_test.dart

Issue 1780783002: Don't report redundant type errors in strong mode. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Stop type propagation in test. Created 4 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/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];
« no previous file with comments | « pkg/analyzer/test/src/task/strong/checker_test.dart ('k') | pkg/analyzer/test/src/task/strong/strong_test_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698