// 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> base;
  var /*@ type=Future<bool*>* */ f =
      base. /*@ typeArgs=bool* */ /*@target=Future::then*/ then(
          /*@ returnType=bool* */ (/*@ type=int* */ x) {
    return x /*@target=num::==*/ == 0;
  });
  var /*@ type=Future<bool*>* */ g =
      base. /*@ typeArgs=bool* */ /*@target=Future::then*/ then(
          /*@ returnType=bool* */ (/*@ type=int* */ x) => x /*@target=num::==*/ == 0);
  Future<bool> b = f;
  b = g;
}

main() {}
