library test /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:5: Error: Can't infer the type of 'b': circularity found during type inference.
// Specify the type explicitly.
// var b = /*@returnType=() -> dynamic*/ () =>
//     ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    : 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 invalid-type b = () → () → dynamic => self::a.{self::A::f}<() → dynamic>(self::c){(() → dynamic) → () → dynamic};
static field () → dynamic c = () → dynamic => self::a.{self::A::f}<dynamic>(self::b){(dynamic) → dynamic};
static field () → () → core::int d = () → () → core::int => self::a.{self::A::f}<() → core::int>(self::e){(() → core::int) → () → core::int};
static field () → core::int e = () → core::int => self::a.{self::A::g}(self::d){(dynamic) → core::int};
static method main() → dynamic {}
