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

class A<X extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::A<self::A::X%>
    : super core::Object::•()
    ;
}
class B<X extends core::Object? = dynamic> extends self::A<self::B::X%> {
  synthetic constructor •() → self::B<self::B::X%>
    : super self::A::•()
    ;
}
class C extends self::B<core::int> {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
}
class A2 extends core::Object {
  synthetic constructor •() → self::A2
    : super core::Object::•()
    ;
}
class B2 extends self::A2 {
  synthetic constructor •() → self::B2
    : super self::A2::•()
    ;
}
class C2 extends self::B2 {
  synthetic constructor •() → self::C2
    : super self::B2::•()
    ;
}
class A3 extends core::Object {
  field core::int? field = null;
  field core::String? field2 = null;
  synthetic constructor •() → self::A3
    : super core::Object::•()
    ;
  method foo() → void {}
  get getter() → core::int
    return 42;
  set setter(core::int value) → void {}
  set setter2(core::int value) → void {}
  set setter3(core::int value) → void {}
  operator +(self::A3 other) → self::A3
    return other;
  operator *(self::A3 other) → self::A3
    return this;
}
class B3 extends self::A3 {
  synthetic constructor •() → self::B3
    : super self::A3::•()
    ;
  method bar() → void {}
}
class C3 extends self::B3 {
  synthetic constructor •() → self::C3
    : super self::B3::•()
    ;
  method baz() → void {}
}
extension type E on self::C show-types self::B<core::int> hide-types self::A<core::int> {
}
extension type E2 on self::C2 show-types self::B2 hide-types self::A2 {
}
extension type E3 on self::C3 show-types self::B3 show-methods self::C3::baz show-getters self::A3::field, self::C3::baz show-setters self::A3::setter, self::A3::field, self::A3::field2 show-operators self::A3::+ hide-methods self::A3::foo hide-getters self::A3::getter, self::A3::foo, self::A3::field hide-setters self::A3::setter2, self::A3::setter3 hide-operators self::A3::* {
}
static method main() → dynamic {}
