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

import "dart:async";

class D<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::D<self::D::T%>
    : super core::Object::•()
    ;
}
class E<T extends core::Object? = dynamic> extends self::D<self::E::T%> {
  synthetic constructor •() → self::E<self::E::T%>
    : super self::D::•()
    ;
}
class B<T extends core::Object? = dynamic> extends core::Object {
  covariant-by-class field self::D<self::B::T%> x = throw "";
  synthetic constructor •() → self::B<self::B::T%>
    : super core::Object::•()
    ;
}
class C<U extends core::Object? = dynamic> extends self::B<asy::Future<self::C::U%>> {
  synthetic constructor •() → self::C<self::C::U%>
    : super self::B::•()
    ;
  get x() → self::E<asy::Future<self::C::U%>>
    return throw "";
  set x(covariant-by-class core::Object x) → void {}
  method g() → void {
    self::D<asy::Future<self::C::U%>> y = super.{self::B::x};
  }
}
static method main() → dynamic {}
