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

test() {
  Future<int> f;
  Future<List<int>> b = /*info:ASSIGNMENT_CAST should be pass*/ f
      . /*@ typeArgs=List<dynamic>* */ /*@target=Future.then*/ then(
          /*@ returnType=List<dynamic>* */ (/*@ type=int* */ x) => /*@ typeArgs=dynamic */ [])
      . /*@target=Future.whenComplete*/ whenComplete(
          /*@ returnType=Null */ () {});
  b = f. /*@ typeArgs=List<int*>* */ /*@target=Future.then*/ then(
      /*@ returnType=List<int*>* */ (/*@ type=int* */ x) => /*@ typeArgs=int* */ []);
}

main() {}
