| 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 f4a6c9d163664fc49e15aa3915884757f976899c..0490b74423930601e3a8eda715d1380745ba21ed 100644
|
| --- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| +++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| @@ -625,9 +625,8 @@ class C<T> {
|
|
|
| var x = /*info:INFERRED_TYPE_ALLOCATION*/new C(42);
|
|
|
| -// Don't infer if we had a context type.
|
| num y;
|
| -C<int> c_int = /*info:INFERRED_TYPE_ALLOCATION*/new C(/*info:DOWN_CAST_IMPLICIT*/y);
|
| +C<int> c_int = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/C(/*info:DOWN_CAST_IMPLICIT*/y);
|
|
|
| // These hints are not reported because we resolve with a null error listener.
|
| C<num> c_num = /*pass should be info:INFERRED_TYPE_ALLOCATION*/new C(123);
|
| @@ -1225,10 +1224,10 @@ void main() {
|
| A<int, String> a5 = /*error:STATIC_TYPE_ERROR*/new A<dynamic, dynamic>.named(3, "hello");
|
| }
|
| {
|
| - A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new A(
|
| + A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/A(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello",
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| - A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new A.named(
|
| + A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/A.named(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello",
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| }
|
| @@ -1241,10 +1240,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 B(
|
| + A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/B(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3,
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| - A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new B.named(
|
| + A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/B.named(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3,
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| }
|
| @@ -1257,9 +1256,9 @@ void main() {
|
| A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/new C<dynamic>.named(3);
|
| }
|
| {
|
| - A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new C(
|
| + A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/C(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| - A<int, int> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new C.named(
|
| + A<int, int> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/C.named(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| }
|
| {
|
| @@ -1271,9 +1270,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 D(
|
| + A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/D(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| - A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new D.named(
|
| + A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/D.named(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| }
|
| {
|
| @@ -1288,9 +1287,9 @@ void main() {
|
| 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 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",
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello", /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
|
| - A<int, String> a5 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
|
| + A<int, String> a5 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_INFER*/F.named(3, "hello",
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
|
| }
|
| }
|
| @@ -1706,7 +1705,7 @@ class MyFuture<T> implements Future<T> {
|
| $declared f;
|
| // Instantiates Future<int>
|
| $downwards<int> t1 = f.then((_) =>
|
| - ${allocInfo}new $upwards.value(
|
| + ${allocInfo}new /*error:COULD_NOT_INFER*/$upwards.value(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/'hi'));
|
|
|
| // Instantiates List<int>
|
| @@ -1774,7 +1773,7 @@ main() {
|
| var c = new Foo().method("str");
|
| s = c;
|
|
|
| - new Foo<String>().method(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/42);
|
| + new Foo<String>()./*error:COULD_NOT_INFER*/method(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/42);
|
| }
|
| ''');
|
| }
|
| @@ -1800,14 +1799,14 @@ main() {
|
| printInt(myMax(1, 2) as int);
|
|
|
| // Mixing int and double means return type is num.
|
| - printInt(/*info:DOWN_CAST_IMPLICIT*/max(1, 2.0));
|
| - printInt(/*info:DOWN_CAST_IMPLICIT*/min(1, 2.0));
|
| - printDouble(/*info:DOWN_CAST_IMPLICIT*/max(1, 2.0));
|
| - printDouble(/*info:DOWN_CAST_IMPLICIT*/min(1, 2.0));
|
| + 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));
|
|
|
| // Types other than int and double are not accepted.
|
| printInt(
|
| - /*info:DOWN_CAST_IMPLICIT*/min(
|
| + /*error:COULD_NOT_INFER*/min(
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hi",
|
| /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"there"));
|
| }
|
| @@ -1877,6 +1876,15 @@ main() {
|
| ''');
|
| }
|
|
|
| + void test_genericMethods_inferenceError() {
|
| + checkFile(r'''
|
| +main() {
|
| + List<String> y;
|
| + Iterable<String> x = y./*error:COULD_NOT_INFER*/map(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(String z) => 1.0);
|
| +}
|
| + ''');
|
| + }
|
| +
|
| void test_genericMethods_inferGenericFunctionParameterType() {
|
| var mainUnit = checkFile('''
|
| class C<T> extends D<T> {
|
|
|