// 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=() -> dynamic*/ () =>
    a. /*@typeArgs=() -> dynamic*/ /*@target=A.f*/ f(c);
var c = /*@returnType=dynamic*/ () =>
    a. /*@typeArgs=dynamic*/ /*@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() {}
