// 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() => throw '';
}

T F<T>() => throw '';

Future f() async {
  dynamic d;
  Object o;
  for (var /*@type=Object?*/ x in /*@typeArgs=Iterable<Object?>*/ 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=Object?*/ x in /*@typeArgs=Stream<Object?>*/ 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>()) {}
}
