library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

class Foo<T extends core::Object? = dynamic> extends core::Object {
  final field () → asy::Future<dynamic> quux;
  covariant-by-class field self::Foo::T% t;
  constructor •(() → asy::Future<dynamic> quux, self::Foo::T% t) → self::Foo<self::Foo::T%>
    : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
    ;
  method call() → asy::Future<self::Foo::T%>
    return this.{self::Foo::quux}{() → asy::Future<dynamic>}(){() → asy::Future<dynamic>}.{asy::Future::then}<self::Foo::T%>((dynamic _) → self::Foo::T% => this.{self::Foo::t}{self::Foo::T%}){((dynamic) → FutureOr<self::Foo::T%>, {onError: core::Function?}) → asy::Future<self::Foo::T%>};
}
class Bar extends core::Object {
  field self::Foo<self::Baz> qux = throw "";
  synthetic constructor •() → self::Bar
    : super core::Object::•()
    ;
  method quuz() → asy::Future<void>
    return this.{self::Bar::qux}{self::Foo<self::Baz>}.{self::Foo::call}(){() → asy::Future<self::Baz>}.{asy::Future::then}<self::Grault>((self::Baz baz) → self::Grault => this.{self::Bar::corge}(baz){(self::Baz) → self::Grault}){((self::Baz) → FutureOr<self::Grault>, {onError: core::Function?}) → asy::Future<self::Grault>}.{asy::Future::then}<void>((self::Grault grault) → void => this.{self::Bar::garply}(grault){(self::Grault) → void}){((self::Grault) → FutureOr<void>, {onError: core::Function?}) → asy::Future<void>};
  method corge(self::Baz baz) → self::Grault
    return throw "";
  method garply(self::Grault grault) → void {}
}
class Baz extends core::Object {
  synthetic constructor •() → self::Baz
    : super core::Object::•()
    ;
}
class Grault extends core::Object {
  synthetic constructor •() → self::Grault
    : super core::Object::•()
    ;
}
static method main() → dynamic {}
