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

class A {
  T f<T>(T t) => t;
  int g(dynamic i) => 0;
}

var a = new A();

// There's a circularity between b and c because a.f is generic, so the type of
// c is required to infer b, and vice versa.

var b = /*@ returnType=() ->* invalid-type */ () =>
    a. /*@ typeArgs=() ->* invalid-type */ /*@target=A::f*/ f(c);
var c = /*@ returnType=invalid-type */ () =>
    a. /*@ typeArgs=invalid-type */ /*@target=A::f*/ f(b);

// e's use of a.g breaks the circularity, because a.g is not generic, therefore
// the type of e does not depend on the type of d.

var d = /*@ returnType=() ->* int* */ () =>
    a. /*@ typeArgs=() ->* int* */ /*@target=A::f*/ f(e);
var e = /*@ returnType=int* */ () => a. /*@target=A::g*/ g(d);

main() {}
