| Index: pkg/analyzer/test/src/task/strong/checker_test.dart
|
| diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
|
| index e831248476124217afcc0f8bd3e431792bec2c5d..ccfe62b74b83cea5cb6c3e6f5c8840432fe318c1 100644
|
| --- a/pkg/analyzer/test/src/task/strong/checker_test.dart
|
| +++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
|
| @@ -387,8 +387,8 @@ class DefaultEquality<S> extends EqualityBase<S> {
|
| const DefaultEquality();
|
| }
|
| class SetEquality<T> implements Equality<T> {
|
| - final Equality<T> field = const DefaultEquality();
|
| - const SetEquality([Equality<T> inner = const DefaultEquality()]);
|
| + final Equality<T> field = /*info:INFERRED_TYPE_ALLOCATION*/const DefaultEquality();
|
| + const SetEquality([Equality<T> inner = /*info:INFERRED_TYPE_ALLOCATION*/const DefaultEquality()]);
|
| }
|
| class C<Q> {
|
| final List<Q> list = /*info:INFERRED_TYPE_LITERAL*/const [];
|
| @@ -2430,10 +2430,10 @@ class D<T, S> extends /*error:IMPLICIT_DYNAMIC_TYPE*/C
|
| implements /*error:IMPLICIT_DYNAMIC_TYPE*/I {}
|
|
|
| C f(D d) {
|
| - D x = new /*error:IMPLICIT_DYNAMIC_TYPE*/D();
|
| + D x = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNAMIC_TYPE*/D();
|
| D<int, dynamic> y = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNAMIC_TYPE*/D();
|
| D<dynamic, int> z = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNAMIC_TYPE*/D();
|
| - return new /*error:IMPLICIT_DYNAMIC_TYPE*/C();
|
| + return /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNAMIC_TYPE*/C();
|
| }
|
|
|
| class A<T extends num> {}
|
| @@ -3389,7 +3389,7 @@ void main() {
|
| lOfDs = lOfDs;
|
| lOfDs = lOfOs;
|
| lOfDs = lOfAs;
|
| - lOfDs = new L(); // Reset type propagation.
|
| + lOfDs = /*info:INFERRED_TYPE_ALLOCATION*/new L(); // Reset type propagation.
|
| }
|
| {
|
| lOfOs = mOfDs;
|
| @@ -3416,7 +3416,7 @@ void main() {
|
| mOfDs = /*info:DOWN_CAST_IMPLICIT*/lOfDs;
|
| mOfDs = /*info:DOWN_CAST_IMPLICIT*/lOfOs;
|
| mOfDs = /*error:INVALID_ASSIGNMENT*/lOfAs;
|
| - mOfDs = new M(); // Reset type propagation.
|
| + mOfDs = /*info:INFERRED_TYPE_ALLOCATION*/new M(); // Reset type propagation.
|
| }
|
| {
|
| mOfOs = mOfDs;
|
| @@ -3771,10 +3771,10 @@ test() {
|
| l = <int>[i, /*info:DOWN_CAST_IMPLICIT*/n, /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/s];
|
| }
|
| {
|
| - List l = /*info:INFERRED_TYPE_LITERAL*/[i];
|
| - l = /*info:INFERRED_TYPE_LITERAL*/[s];
|
| - l = /*info:INFERRED_TYPE_LITERAL*/[n];
|
| - l = /*info:INFERRED_TYPE_LITERAL*/[i, n, s];
|
| + List l = [i];
|
| + l = [s];
|
| + l = [n];
|
| + l = [i, n, s];
|
| }
|
| {
|
| Map<String, int> m = <String, int>{s: i};
|
| @@ -3787,15 +3787,13 @@ test() {
|
| // TODO(leafp): We can't currently test for key errors since the
|
| // error marker binds to the entire entry.
|
| {
|
| - Map m = /*info:INFERRED_TYPE_LITERAL*/{s: i};
|
| - m = /*info:INFERRED_TYPE_LITERAL*/{s: s};
|
| - m = /*info:INFERRED_TYPE_LITERAL*/{s: n};
|
| - m = /*info:INFERRED_TYPE_LITERAL*/
|
| - {s: i,
|
| + Map m = {s: i};
|
| + m = {s: s};
|
| + m = {s: n};
|
| + m = {s: i,
|
| s: n,
|
| s: s};
|
| - m = /*info:INFERRED_TYPE_LITERAL*/
|
| - {i: s,
|
| + m = {i: s,
|
| n: s,
|
| s: s};
|
| }
|
| @@ -3866,14 +3864,11 @@ void f/*<T extends num>*/(T x, T y) {
|
| q = /*info:DOWN_CAST_COMPOSITE*/z;
|
| /*info:DYNAMIC_INVOKE*/f()./*error:UNDEFINED_GETTER*/isEven;
|
|
|
| - // This does not capture the type `T extends int`. Instead the return type
|
| - // is `T extends num`. What happens is we substitute {T/T} on the function
|
| - // type, and the way it is implemented, this leads back to `T extends num`.
|
| - // See https://github.com/dart-lang/sdk/issues/27725
|
| + // This captures the type `T extends int`.
|
| var g = () => x;
|
| - g = f;
|
| - /*info:DYNAMIC_INVOKE*/g()./*error:UNDEFINED_GETTER*/isEven;
|
| - q = /*info:DOWN_CAST_COMPOSITE*/g();
|
| + g = /*info:DOWN_CAST_COMPOSITE*/f;
|
| + g().isEven;
|
| + q = g();
|
| int r = x;
|
| }
|
| }
|
|
|