// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/*@testedFeatures=inference*/
library test;

import 'dart:async';

abstract class MyStream<T> extends Stream<T> {
  factory MyStream() => null;
}

T F<T>() => null;

Future f() async {
  dynamic d;
  Object o;
  for (var /*@ type=dynamic */ x in /*@ typeArgs=Iterable<dynamic>* */ F()) {}
  for (dynamic x in /*@ typeArgs=Iterable<dynamic>* */ F()) {}
  for (Object x in /*@ typeArgs=Iterable<Object*>* */ F()) {}
  for (d in /*@ typeArgs=Iterable<dynamic>* */ F()) {}
  for (o in /*@ typeArgs=Iterable<Object*>* */ F()) {}
  await for (var /*@ type=dynamic */ x in /*@ typeArgs=Stream<dynamic>* */ F()) {}
  await for (dynamic x in /*@ typeArgs=Stream<dynamic>* */ F()) {}
  await for (Object x in /*@ typeArgs=Stream<Object*>* */ F()) {}
  await for (d in /*@ typeArgs=Stream<dynamic>* */ F()) {}
  await for (o in /*@ typeArgs=Stream<Object*>* */ F()) {}
}

Future main() async {
  for (int x in /*@ typeArgs=int* */ [1, 2, 3]) {}
  for (num x in /*@ typeArgs=num* */ [1, 2, 3]) {}
  for (var /*@ type=int* */ x in /*@ typeArgs=int* */ [1, 2, 3]) {}
  await for (int x in new /*@ typeArgs=int* */ MyStream()) {}
  await for (var /*@ type=int* */ x in new MyStream<int>()) {}
}
