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

class D<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class E<T extends core::Object = dynamic> extends self::D<self::E::T> {
  synthetic constructor •() → void
    : super self::D::•()
    ;
}
class B<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method g(generic-covariant-impl self::E<self::B::T> x) → self::D<self::B::T>
    return null;
}
class C<U extends core::Object = dynamic> extends self::B<asy::Future<self::C::U>> {
  synthetic constructor •() → void
    : super self::B::•()
    ;
  method g(generic-covariant-impl core::Object x) → self::E<asy::Future<self::C::U>>
    return null;
  method h() → void {
    self::D<asy::Future<self::C::U>> x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U>>>());
  }
}
static method f<T extends core::Object = dynamic>() → self::f::T
  return null;
static method main() → dynamic {}
