| 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 2e0f50fd9e90cf6ab235a0ef70d08ab6670e90c5..85b4761903b8a71d6a17b79e2068bc9048fb44a6 100644
|
| --- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| +++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| @@ -37,8 +37,8 @@ abstract class InferredTypeMixin {
|
| */
|
| Future<CompilationUnitElement> checkFileElement(String content);
|
|
|
| - /// Duplicates top-level errors if needed due to being analyze multiple times.
|
| - String _duplicateErrors(String errors) => '$errors,$errors';
|
| + /// Extra top-level errors if needed due to being analyze multiple times.
|
| + bool get hasExtraTaskModelPass => true;
|
|
|
| test_asyncClosureReturnType_flatten() async {
|
| var mainUnit = await checkFileElement('''
|
| @@ -650,8 +650,8 @@ void main() {
|
| }
|
|
|
| test_constructors_inferenceFBounded() async {
|
| - var errors =
|
| - _duplicateErrors('error:COULD_NOT_INFER,error:COULD_NOT_INFER');
|
| + var errors = 'error:COULD_NOT_INFER,error:COULD_NOT_INFER';
|
| + if (hasExtraTaskModelPass) errors = '$errors,$errors';
|
| var unit = await checkFileElement('''
|
| class Clonable<T> {}
|
|
|
| @@ -678,7 +678,7 @@ class C<T> {
|
| var x = /*info:INFERRED_TYPE_ALLOCATION*/new C(42);
|
|
|
| num y;
|
| -C<int> c_int = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/C(/*info:DOWN_CAST_IMPLICIT*/y);
|
| +C<int> c_int = /*info:INFERRED_TYPE_ALLOCATION*/new C(/*info:DOWN_CAST_IMPLICIT*/y);
|
|
|
| // These hints are not reported because we resolve with a null error listener.
|
| C<num> c_num = /*info:INFERRED_TYPE_ALLOCATION*/new C(123);
|
| @@ -714,8 +714,12 @@ var b = new C<Object>(/*info:INFERRED_TYPE_LITERAL*/[123]);
|
| }
|
|
|
| test_constructors_inferFromArguments_argumentNotAssignable() async {
|
| - var infos = _duplicateErrors('info:INFERRED_TYPE_ALLOCATION');
|
| - var errors = _duplicateErrors('error:COULD_NOT_INFER');
|
| + var infos = 'info:INFERRED_TYPE_ALLOCATION';
|
| + var errors = '';
|
| + if (hasExtraTaskModelPass) {
|
| + infos = '$infos,$infos';
|
| + errors = '/*error:COULD_NOT_INFER*/';
|
| + }
|
| var unit = await checkFileElement('''
|
| class A {}
|
|
|
| @@ -728,8 +732,7 @@ class C<T extends A> {
|
| class NotA {}
|
| NotA myF() => null;
|
|
|
| -var V = /*$infos*/new
|
| - /*$errors*/C(/*error:INVALID_CAST_FUNCTION*/myF);
|
| +var V = /*$infos*/new ${errors}C(/*error:INVALID_CAST_FUNCTION*/myF);
|
| ''');
|
| var vars = unit.topLevelVariables;
|
| expect(vars[0].type.toString(), 'C<NotA>');
|
| @@ -948,6 +951,21 @@ test() {
|
| ''');
|
| }
|
|
|
| + test_downwardInference_fixes_noUpwardsErrors() async {
|
| + await checkFileElement(r'''
|
| +import 'dart:math';
|
| +// T max<T extends num>(T x, T y);
|
| +main() {
|
| + num x;
|
| + dynamic y;
|
| +
|
| + num a = max(x, /*info:DYNAMIC_CAST*/y);
|
| + Object b = max(x, /*info:DYNAMIC_CAST*/y);
|
| + dynamic c = /*error:COULD_NOT_INFER*/max(x, y);
|
| + var d = /*error:COULD_NOT_INFER*/max(x, y);
|
| +}''');
|
| + }
|
| +
|
| test_downwardInference_miscellaneous() async {
|
| await checkFileElement('''
|
| typedef T Function2<S, T>(S x);
|
| @@ -987,7 +1005,7 @@ class Baz {}
|
| await checkFileElement('''
|
| void main() {
|
| List<int> l;
|
| - l = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| + l = /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| l = (l = /*info:INFERRED_TYPE_LITERAL*/[1]);
|
| }
|
| ''');
|
| @@ -998,7 +1016,7 @@ void main() {
|
| import 'dart:async';
|
| Future test() async {
|
| dynamic d;
|
| - List<int> l0 = await /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*info:DYNAMIC_CAST*/d];
|
| + List<int> l0 = await /*info:INFERRED_TYPE_LITERAL*/[/*info:DYNAMIC_CAST*/d];
|
| List<int> l1 = await /*info:INFERRED_TYPE_ALLOCATION*/new Future.value([d]);
|
| }
|
| ''');
|
| @@ -1053,30 +1071,30 @@ class F4 {
|
| void main() {
|
| new F0(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F0(/*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - new F0(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| - new F0(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello",
|
| + new F0(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F0(/*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| - new F1(a: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
| + new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| - new F2(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
| + new F2(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F2(/*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| - new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| + new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| - new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| + new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| }
|
| ''');
|
| @@ -1092,28 +1110,28 @@ void f4({Iterable<Iterable<int>> a}) {}
|
| void main() {
|
| f0(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| f0(/*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - f0(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| - f0(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
| + f0(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + f0(/*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| - f1(a: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
| + f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
|
|
| f2(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| f2(/*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - f2(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| - f2(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
| + f2(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + f2(/*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| - f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| + f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| - f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| + f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
| }
|
| ''');
|
| }
|
| @@ -1141,8 +1159,8 @@ void main () {
|
| 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 = /*error:INVALID_ASSIGNMENT*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| - Function2<int, List<String>> l3 = (int x) => /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
|
| - Function2<int, List<String>> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
|
| + Function2<int, List<String>> l3 = (int x) => /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
|
| + Function2<int, List<String>> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
|
| }
|
| {
|
| Function2<int, int> l0 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x;
|
| @@ -1234,30 +1252,30 @@ class F4<T> {
|
| void main() {
|
| new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[3]);
|
| - new F0<int>(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| - new F0<int>(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello",
|
| + new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| - new F1<int>(a: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
| + new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| - new F2<int>(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
|
| + new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
|
| + new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| - new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| + new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| - new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| + new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
|
| + new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| /*info:INFERRED_TYPE_LITERAL*/[3]]);
|
|
|
| new F3(/*info:INFERRED_TYPE_LITERAL*/[]);
|
| @@ -1302,8 +1320,8 @@ void main () {
|
| v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) => null;
|
| v = <T>(int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| v = /*error:INVALID_ASSIGNMENT*/<T>(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| - v = <T>(int x) => /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
|
| - v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) {return /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
|
| + v = <T>(int x) => /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
|
| + v = /*info:INFERRED_TYPE_CLOSURE*/<T>(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
|
| }
|
| {
|
| int int2int<S>(int x) => null;
|
| @@ -1349,8 +1367,8 @@ void main () {
|
| v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) => null;
|
| v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| v = /*error:INVALID_ASSIGNMENT*//*<T>*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
|
| - v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
|
| - v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
|
| + v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
|
| + v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
|
| }
|
| {
|
| int int2int/*<S>*/(int x) => null;
|
| @@ -1412,10 +1430,10 @@ void main() {
|
| A<int, String> a5 = /*error:INVALID_CAST_NEW_EXPR*/new A<dynamic, dynamic>.named(3, "hello");
|
| }
|
| {
|
| - A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/A(
|
| + A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new A(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello",
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| - A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/A.named(
|
| + A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new A.named(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello",
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| }
|
| @@ -1428,10 +1446,10 @@ void main() {
|
| A<int, String> a5 = /*error:INVALID_ASSIGNMENT*/new B<dynamic, dynamic>.named("hello", 3);
|
| }
|
| {
|
| - A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/B(
|
| + A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new B(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3,
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| - A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/B.named(
|
| + A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new B.named(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3,
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| }
|
| @@ -1444,9 +1462,9 @@ void main() {
|
| A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/new C<dynamic>.named(3);
|
| }
|
| {
|
| - A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/C(
|
| + A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new C(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| - A<int, int> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/C.named(
|
| + A<int, int> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new C.named(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| }
|
| {
|
| @@ -1458,9 +1476,9 @@ void main() {
|
| A<int, String> a5 = /*error:INVALID_ASSIGNMENT*/new D<dynamic, dynamic>.named("hello");
|
| }
|
| {
|
| - A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/D(
|
| + A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new D(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| - A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/D.named(
|
| + A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new D.named(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| }
|
| {
|
| @@ -1471,13 +1489,13 @@ void main() {
|
| 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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| - b: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3]);
|
| + a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
|
| + b: /*info:INFERRED_TYPE_LITERAL*/[/*error: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 /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/F.named(3, "hello",
|
| + A<int, String> a4 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello", /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| - A<int, String> a5 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/F.named(3, "hello",
|
| + A<int, String> a5 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| }
|
| }
|
| @@ -1487,15 +1505,15 @@ void main() {
|
| test_downwardsInferenceOnListLiterals_inferDownwards() async {
|
| await checkFileElement('''
|
| void foo([List<String> list1 = /*info:INFERRED_TYPE_LITERAL*/const [],
|
| - List<String> list2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/const [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]]) {
|
| + List<String> list2 = /*info:INFERRED_TYPE_LITERAL*/const [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error: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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| - List<int> l3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
|
| + List<int> l2 = /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| + List<int> l3 = /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
|
| }
|
| {
|
| List<dynamic> l0 = [];
|
| @@ -1512,14 +1530,14 @@ void main() {
|
| {
|
| Iterable<int> i0 = /*info:INFERRED_TYPE_LITERAL*/[];
|
| Iterable<int> i1 = /*info:INFERRED_TYPE_LITERAL*/[3];
|
| - Iterable<int> i2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| - Iterable<int> i3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
|
| + Iterable<int> i2 = /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| + Iterable<int> i3 = /*info:INFERRED_TYPE_LITERAL*/[/*error: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,error:COULD_NOT_INFER*/const [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| - const List<int> c3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/const [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
|
| + const List<int> c2 = /*info:INFERRED_TYPE_LITERAL*/const [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
|
| + const List<int> c3 = /*info:INFERRED_TYPE_LITERAL*/const [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
|
| }
|
| }
|
| ''');
|
| @@ -1587,7 +1605,7 @@ main() {
|
| test_downwardsInferenceOnMapLiterals() async {
|
| await checkFileElement('''
|
| void foo([Map<int, String> m1 = /*info:INFERRED_TYPE_LITERAL*/const {1: "hello"},
|
| - Map<int, String> m2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/const {
|
| + Map<int, String> m2 = /*info:INFERRED_TYPE_LITERAL*/const {
|
| // One error is from type checking and the other is from const evaluation.
|
| /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
|
| "world"
|
| @@ -1597,13 +1615,13 @@ 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,error:COULD_NOT_INFER*/{
|
| + Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{
|
| /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello"
|
| };
|
| - Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/{
|
| + Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{
|
| 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| };
|
| - Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER,error:COULD_NOT_INFER*/{
|
| + Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{
|
| 3: "hello",
|
| /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
|
| /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| @@ -1620,10 +1638,10 @@ void 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,error:COULD_NOT_INFER*/{
|
| + Map<dynamic, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{
|
| 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| };
|
| - Map<dynamic, String> l4 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/{
|
| + Map<dynamic, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{
|
| 3: "hello",
|
| "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| };
|
| @@ -1631,11 +1649,11 @@ void main() {
|
| {
|
| 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,error:COULD_NOT_INFER*/{
|
| + Map<int, dynamic> l2 = /*info:INFERRED_TYPE_LITERAL*/{
|
| /*error: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,error:COULD_NOT_INFER*/{
|
| + Map<int, dynamic> l4 = /*info:INFERRED_TYPE_LITERAL*/{
|
| 3:"hello",
|
| /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": 3
|
| };
|
| @@ -1648,14 +1666,14 @@ void 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,error:COULD_NOT_INFER*/const {
|
| + const Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/const {
|
| /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
|
| "hello"
|
| };
|
| - const Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/const {
|
| + const Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/const {
|
| 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| };
|
| - const Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER,error:COULD_NOT_INFER*/const {
|
| + const Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/const {
|
| 3:"hello",
|
| /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
|
| /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
|
| @@ -1808,7 +1826,7 @@ void main() {
|
| (x) async => x ? 2 : await new $upwards<int>.value(3));
|
| $downwards<int> t2 = f.then(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) async { // TODO(leafp): Why the duplicate here?
|
| return await x ? 2 : new $upwards<int>.value(3);});
|
| - $downwards<int> t5 = f./*error:COULD_NOT_INFER*/then(/*info:INFERRED_TYPE_CLOSURE,error:INVALID_CAST_FUNCTION_EXPR*/
|
| + $downwards<int> t5 = f.then(/*info:INFERRED_TYPE_CLOSURE,error:INVALID_CAST_FUNCTION_EXPR*/
|
| (x) => x ? 2 : new $upwards<int>.value(3));
|
| $downwards<int> t6 = f.then(/*info:INFERRED_TYPE_CLOSURE*/
|
| (x) {return /*info:DOWN_CAST_COMPOSITE*/x ? 2 : new $upwards<int>.value(3);});
|
| @@ -2292,14 +2310,14 @@ main() {
|
| printInt(myMax(1, 2) as int);
|
|
|
| // Mixing int and double means return type is num.
|
| - printInt(/*error:COULD_NOT_INFER*/max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/2.0));
|
| - printInt(/*error:COULD_NOT_INFER*/min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/2.0));
|
| - printDouble(/*error:COULD_NOT_INFER*/max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/1, 2.0));
|
| - printDouble(/*error:COULD_NOT_INFER*/min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/1, 2.0));
|
| + printInt(max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/2.0));
|
| + printInt(min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/2.0));
|
| + printDouble(max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/1, 2.0));
|
| + printDouble(min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/1, 2.0));
|
|
|
| // Types other than int and double are not accepted.
|
| printInt(
|
| - /*error:COULD_NOT_INFER*/min(
|
| + min(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hi",
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"there"));
|
| }
|
| @@ -2341,7 +2359,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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]);
|
| + String y = f(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]);
|
| }
|
| ''');
|
| }
|
| @@ -2351,7 +2369,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,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]);
|
| + String y = f(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]);
|
| }
|
| ''');
|
| }
|
| @@ -2398,7 +2416,7 @@ main() {
|
| await checkFileElement(r'''
|
| main() {
|
| List<String> y;
|
| - Iterable<String> x = y./*error:COULD_NOT_INFER*/map(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(String z) => 1.0);
|
| + Iterable<String> x = y.map(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(String z) => 1.0);
|
| }
|
| ''');
|
| }
|
| @@ -2640,7 +2658,7 @@ main() {
|
| => list.fold('', /*info:INFERRED_TYPE_CLOSURE*/(x, y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/x /*error:UNDEFINED_OPERATOR*/+ y.toString()));
|
|
|
| Future<String> results3 = results.then((List<int> list)
|
| - => list./*error:COULD_NOT_INFER*/fold('', /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(String x, y) => x + y.toString()));
|
| + => list.fold('', /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(String x, y) => x + y.toString()));
|
|
|
| Future<String> results4 = results.then((List<int> list)
|
| => list.fold<String>('', /*info:INFERRED_TYPE_CLOSURE*/(x, y) => x + y.toString()));
|
| @@ -3392,17 +3410,17 @@ class Foo<T> {
|
| main() {
|
| // List inside map
|
| var map = <String, List<Folder>>{
|
| - 'pkgA': /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/')],
|
| - 'pkgB': /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgB/lib/')]
|
| + 'pkgA': /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/')],
|
| + 'pkgB': /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgB/lib/')]
|
| };
|
| // Also try map inside list
|
| var list = <Map<String, Folder>>[
|
| - /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/{ 'pkgA': /*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/') },
|
| - /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/{ 'pkgB': /*info:DOWN_CAST_IMPLICIT*/getResource('/pkgB/lib/') },
|
| + /*info:INFERRED_TYPE_LITERAL*/{ 'pkgA': /*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/') },
|
| + /*info:INFERRED_TYPE_LITERAL*/{ 'pkgB': /*info:DOWN_CAST_IMPLICIT*/getResource('/pkgB/lib/') },
|
| ];
|
| // Instance creation too
|
| var foo = new Foo<List<Folder>>(
|
| - /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/')]
|
| + /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/')]
|
| );
|
| }
|
| ''');
|
| @@ -5455,7 +5473,7 @@ class InferredTypeTest_Driver extends InferredTypeTest {
|
| bool get enableNewAnalysisDriver => true;
|
|
|
| @override
|
| - String _duplicateErrors(String errors) => errors;
|
| + bool get hasExtraTaskModelPass => false;
|
|
|
| @failingTest
|
| @override
|
|
|