| Index: pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart
|
| diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart
|
| index 6e56f082065a56a6df8e2736f07c3dda823ef66b..4942e4a754f5d09b0f64cc1f32ff7d1c42c44478 100644
|
| --- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart
|
| +++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart
|
| @@ -11,61 +11,59 @@ class Foo {
|
|
|
| class Bar<T extends Iterable<String>> {
|
| void foo(T t) {
|
| - for (var i in /*@promotedType=none*/ t) {
|
| - int x = /*error:INVALID_ASSIGNMENT*/ /*@promotedType=none*/ i;
|
| + for (var i in t) {
|
| + int x = /*error:INVALID_ASSIGNMENT*/ i;
|
| }
|
| }
|
| }
|
|
|
| class Baz<T, E extends Iterable<T>, S extends E> {
|
| void foo(S t) {
|
| - for (var i in /*@promotedType=none*/ t) {
|
| - int x = /*error:INVALID_ASSIGNMENT*/ /*@promotedType=none*/ i;
|
| - T y = /*@promotedType=none*/ i;
|
| + for (var i in t) {
|
| + int x = /*error:INVALID_ASSIGNMENT*/ i;
|
| + T y = i;
|
| }
|
| }
|
| }
|
|
|
| test() {
|
| var /*@type=List<Foo>*/ list = <Foo>[];
|
| - for (var x in /*@promotedType=none*/ list) {
|
| - String y = /*error:INVALID_ASSIGNMENT*/ /*@promotedType=none*/ x;
|
| + for (var x in list) {
|
| + String y = /*error:INVALID_ASSIGNMENT*/ x;
|
| }
|
|
|
| - for (dynamic x in /*@promotedType=none*/ list) {
|
| - String y = /*info:DYNAMIC_CAST*/ /*@promotedType=none*/ x;
|
| + for (dynamic x in list) {
|
| + String y = /*info:DYNAMIC_CAST*/ x;
|
| }
|
|
|
| - for (String x
|
| - in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ /*@promotedType=none*/ list) {
|
| - String y = /*@promotedType=none*/ x;
|
| + for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
|
| + String y = x;
|
| }
|
|
|
| var /*@type=dynamic*/ z;
|
| - for (z in /*@promotedType=none*/ list) {
|
| - String y = /*info:DYNAMIC_CAST*/ /*@promotedType=none*/ z;
|
| + for (z in list) {
|
| + String y = /*info:DYNAMIC_CAST*/ z;
|
| }
|
|
|
| - Iterable iter = /*@promotedType=none*/ list;
|
| - for (Foo /*info:DYNAMIC_CAST*/ x in /*@promotedType=none*/ iter) {
|
| - var /*@type=Foo*/ y = /*@promotedType=none*/ x;
|
| + Iterable iter = list;
|
| + for (Foo /*info:DYNAMIC_CAST*/ x in iter) {
|
| + var /*@type=Foo*/ y = x;
|
| }
|
|
|
| - dynamic iter2 = /*@promotedType=none*/ list;
|
| - for (Foo /*info:DYNAMIC_CAST*/ x
|
| - in /*info:DYNAMIC_CAST*/ /*@promotedType=none*/ iter2) {
|
| - var /*@type=Foo*/ y = /*@promotedType=none*/ x;
|
| + dynamic iter2 = list;
|
| + for (Foo /*info:DYNAMIC_CAST*/ x in /*info:DYNAMIC_CAST*/ iter2) {
|
| + var /*@type=Foo*/ y = x;
|
| }
|
|
|
| var /*@type=Map<String, Foo>*/ map = <String, Foo>{};
|
| // Error: map must be an Iterable.
|
| - for (var x in /*error:FOR_IN_OF_INVALID_TYPE*/ /*@promotedType=none*/ map) {
|
| - String y = /*info:DYNAMIC_CAST*/ /*@promotedType=none*/ x;
|
| + for (var x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
|
| + String y = /*info:DYNAMIC_CAST*/ x;
|
| }
|
|
|
| // We're not properly inferring that map.keys is an Iterable<String>
|
| // and that x is a String.
|
| - for (var x in /*@promotedType=none*/ map.keys) {
|
| - String y = /*@promotedType=none*/ x;
|
| + for (var x in map.keys) {
|
| + String y = x;
|
| }
|
| }
|
|
|