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

class Foo<X extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Foo<self::Foo::X%>
    : super core::Object::•()
    ;
}
class Bar<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Bar<self::Bar::X%, self::Bar::Y%>
    : super core::Object::•()
    ;
}
extension A1 on dynamic {
}
extension A2<X extends core::Object? = dynamic> on self::Foo<X%> {
}
extension A3<X extends core::Object? = dynamic, Y extends (X%) → dynamic = (Never) → dynamic> on self::Bar<X%, Y> {
}
extension A4<X extends core::Object? = dynamic, Y extends (X%) → dynamic = (Never) → dynamic> on self::Foo<Y> {
}
static method foo1(self::A1 a) → self::A1
  return throw 42;
static method foo2(self::A2<core::int> a, self::A2<dynamic> ai) → self::A2<dynamic>
  return throw 42;
static method foo3(self::A3<core::int, (core::num) → dynamic> a, self::A3<dynamic, (Never) → dynamic> ai) → self::A3<dynamic, (Never) → dynamic>
  return throw 42;
static method foo4(self::A4<core::int, (core::num) → dynamic> a, self::A4<dynamic, (Never) → dynamic> ai) → self::A4<dynamic, (Never) → dynamic>
  return throw 42;
static method bar() → dynamic {
  self::A1 a1;
  self::A2<core::int> a2;
  self::A2<dynamic> a2i;
  self::A3<core::int, (core::num) → dynamic> a3;
  self::A3<dynamic, (Never) → dynamic> a3i;
  self::A4<core::int, (core::num) → dynamic> a4;
  self::A4<dynamic, (Never) → dynamic> a4i;
}
static method main() → dynamic {}
