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

typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
typedef G<contravariant T extends core::Object? = dynamic, U extends core::Object? = dynamic> = (T%) → U%;
class C<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T%>
    : super core::Object::•()
    ;
  method f1(covariant-by-class self::C::T% x) → void {}
  method f2(covariant-by-class core::List<self::C::T%> x) → self::C::T%
    return x.{core::Iterable::first}{self::C::T%};
}
static method g1(self::C<core::num> c) → (core::num) → void {
  return c.{self::C::f1}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
}
static method g2(self::C<core::int> c, core::Object x) → void {
  (core::Object) → void f = self::g1(c) as{ForNonNullableByDefault} (core::Object) → void;
  f(x){(core::Object) → void};
}
static method g3(self::C<core::num> c) → (core::List<core::num>) → core::num {
  return c.{self::C::f2}{(core::List<core::num>) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::List<core::num>) → core::num;
}
static method test() → void {
  (core::num) → void x = self::g1(new self::C::•<core::int>());
  x(1.5){(core::num) → void};
  self::g3(new self::C::•<core::int>());
}
static method main() → dynamic {}
