// 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.

// @dart=2.9

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