// 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';

main() async {
  var /*@type=Future<B>*/ b = new Future<B>.value(new B());
  var /*@type=Future<C>*/ c = new Future<C>.value(new C());
  var /*@type=List<Future<A>>*/ lll = /*@typeArgs=Future<A>*/ [b, c];
  var /*@type=List<A>*/ result = await Future. /*@typeArgs=A*/ wait(lll);
  var /*@type=List<A>*/ result2 = await Future. /*@typeArgs=A*/ wait(
      /*@typeArgs=Future<A>*/ [b, c]);
  List<A> list = result;
  list = result2;
}

class A {}

class B extends A {}

class C extends A {}
