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

class B<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::B<self::B::T%>
    ;
  method f(covariant-by-class self::B::T% x) → void
    ;
  method g({required covariant-by-class self::B::T% x = null}) → void
    ;
  method h<covariant-by-class U extends self::B::T%>() → void
    ;
}
class C extends self::B<core::int> {
  synthetic constructor •() → self::C
    ;
}
static method g1(self::B<core::num> b) → void
  ;
static method g2(self::C c) → void
  ;
static method test() → void
  ;
static method main() → void
  ;
