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

typedef F<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
class C<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T%>
    ;
  method f(covariant-by-class self::C::T% x) → void
    ;
  method g1(covariant-by-class self::C::T% x) → void
    ;
  method g2(covariant-by-class self::C::T% x) → void
    ;
  method g3(covariant-by-class self::C<self::C::T%> c, covariant-by-class self::C::T% x) → void
    ;
  method g4() → (self::C::T%) → dynamic
    ;
}
class D extends self::C<core::int> {
  synthetic constructor •() → self::D
    ;
}
class E extends self::C<core::num> {
  synthetic constructor •() → self::E
    ;
  method f(covariant-by-declaration covariant-by-class core::int x) → void
    ;
}
static method test() → dynamic
  ;
static method main() → dynamic
  ;
