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

abstract class A extends core::Object {
  constructor •(core::int initializedField1) → self::A
    ;
  external get fieldWithInitializer() → core::int;
  external set fieldWithInitializer(core::int #externalFieldValue) → void;
  external get initializedField1() → core::int;
  external set initializedField1(core::int #externalFieldValue) → void;
  external get initializedField2() → core::int;
  external set initializedField2(core::int #externalFieldValue) → void;
  external static get staticField() → core::int;
  external static set staticField(core::int #externalFieldValue) → void;
  external static get finalStaticField() → core::int;
}
abstract class B extends core::Object /*isMixinDeclaration*/  {
  external static get staticField() → core::int;
  external static set staticField(core::int #externalFieldValue) → void;
  external static get finalStaticField() → core::int;
}
extension Extension on self::A {
  get extensionInstanceField = self::Extension|get#extensionInstanceField;
  set extensionInstanceField = self::Extension|set#extensionInstanceField;
  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
  static get extensionStaticField = get self::Extension|extensionStaticField;
  static set extensionStaticField = set self::Extension|extensionStaticField;
  static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
}
external static get topLevelField() → core::int;
external static set topLevelField(core::int #externalFieldValue) → void;
external static get finalTopLevelField() → core::int;
external static get constField() → core::int;
external static set constField(core::int #externalFieldValue) → void;
external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
external static get Extension|extensionStaticField() → core::int;
external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
external static get Extension|finalExtensionStaticField() → core::int;
static method main() → dynamic
  ;
