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

class I1<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::I1<self::I1::X%, self::I1::Y%>
    : super core::Object::•()
    ;
}
class I2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::I2<self::I2::X%, self::I2::Y%, self::I2::Z%>
    : super core::Object::•()
    ;
}
class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends self::A implements self::I1<core::int, core::int> {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
  method methodB() → void {}
  method methodB2() → void {}
  get getterB() → core::int
    return throw 42;
  set setterB(core::int value) → void {}
  operator *(self::B other) → self::B
    return throw 42;
}
class C extends self::B {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
}
class D extends self::C implements self::I2<core::int, core::int, core::int> {
  synthetic constructor •() → self::D
    : super self::C::•()
    ;
  method methodD() → void {}
  get getterD() → core::int
    return throw 42;
  set setterD(core::int value) → void {}
  operator +(self::D other) → self::D
    return throw 42;
}
extension type E on self::D show-types self::I2<core::int, core::int, core::int>, self::C show-methods self::D::methodD show-getters self::D::methodD, self::D::getterD show-setters self::D::setterD show-operators self::D::+ hide-types self::I1<core::int, core::int>, self::A hide-methods self::B::methodB2, self::B::methodB hide-getters self::B::methodB2, self::B::methodB, self::B::getterB hide-setters self::B::setterB hide-operators self::B::* {
}
static method main() → dynamic {}
