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

abstract class I<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::I<self::I::T%>
    ;
  abstract method f1(covariant-by-class self::I::T% x) → void;
  abstract method f2(covariant-by-class self::I::T% x) → void;
}
class C<U extends core::Object? = dynamic> extends core::Object implements self::I<core::int> {
  synthetic constructor •() → self::C<self::C::U%>
    ;
  method f1(covariant-by-class core::int x) → void
    ;
  method f2(covariant-by-class core::int x, [covariant-by-class self::C::U? y = null]) → void
    ;
}
class D<U extends core::Object? = dynamic> extends self::C<self::D::U%> {
  synthetic constructor •() → self::D<self::D::U%>
    ;
  method f1(covariant-by-class core::int x) → void
    ;
  method f2(covariant-by-class core::int x, [covariant-by-class self::D::U? y = null]) → void
    ;
}
static method g1(self::C<core::num> c) → void
  ;
static method g2(self::I<core::num> i) → void
  ;
static method g3(self::C<core::num> c) → void
  ;
static method g4(self::D<core::num> d) → void
  ;
static method g5(self::D<core::num> d) → void
  ;
static method test() → void
  ;
static method main() → void
  ;
