// Errors:
//
// pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:20:67: Error: Can't infer the type of 'c': circularity found during type inference.
// Specify the type explicitly.
// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ c = /*@returnType=dynamic*/ () =>
//                                                                   ^
//
// pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:67: Error: Can't infer the type of 'b': circularity found during type inference.
// Specify the type explicitly.
// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>
//                                                                   ^

library test;
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method f<T extends core::Object = dynamic>(self::A::f::T t) → self::A::f::T
    return t;
  method g(dynamic i) → core::int
    return 0;
}
static field self::A a = new self::A::•();
static field dynamic b = () → dynamic => self::a.{self::A::f}<dynamic>(self::c);
static field dynamic c = () → dynamic => self::a.{self::A::f}<dynamic>(self::b);
static field () → () → core::int d = () → () → core::int => self::a.{self::A::f}<() → core::int>(self::e);
static field () → core::int e = () → core::int => self::a.{self::A::g}(self::d);
static method main() → dynamic {}
