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

typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
class C<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T%>
    : super core::Object::•()
    ;
  get f1() → (self::C::T%) → void
    return throw "";
  get f2() → core::List<(self::C::T%) → void> {
    return <(self::C::T%) → void>[this.{self::C::f1}{(self::C::T%) → void}];
  }
}
static method g1(self::C<core::num> c) → void {
  (core::num) → void x = c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
  core::print("hello");
  x(1.5){(core::num) → void};
}
static method g2(self::C<core::num> c) → void {
  (core::int) → void x = c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
  x(1){(core::int) → void};
}
static method g3(self::C<core::num> c) → void {
  core::List<(core::num) → void> x = c.{self::C::f2}{core::List<(core::num) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::List<(core::num) → void>;
}
static method main() → void {}
