// 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() {}
