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

class A extends core::Object {
  field core::int? _#A#nonNullableInstanceField;
  field core::bool _#A#nonNullableInstanceField#isSet;
  field core::int? _#A#nullableInstanceField;
  field core::bool _#A#nullableInstanceField#isSet;
  static field core::int? _#nonNullableStaticField;
  static field core::bool _#nonNullableStaticField#isSet;
  static field core::int? _#nullableStaticField;
  static field core::bool _#nullableStaticField#isSet;
  synthetic constructor •() → self::A
    ;
  get nonNullableInstanceField() → core::int;
  set nonNullableInstanceField(core::int nonNullableInstanceField#param) → void;
  get nullableInstanceField() → core::int?;
  set nullableInstanceField(core::int? nullableInstanceField#param) → void;
  static get nonNullableStaticField() → core::int;
  static set nonNullableStaticField(core::int nonNullableStaticField#param) → void;
  static get nullableStaticField() → core::int?;
  static set nullableStaticField(core::int? nullableStaticField#param) → void;
}
class B extends self::A {
  synthetic constructor •() → self::B
    ;
  get nonNullableInstanceField() → core::int
    ;
  set nonNullableInstanceField(core::int value) → void
    ;
  get nullableInstanceField() → core::int?
    ;
  set nullableInstanceField(core::int? value) → void
    ;
}
static field core::int? _#nonNullableTopLevelField;
static field core::bool _#nonNullableTopLevelField#isSet;
static field core::int? _#nullableTopLevelField;
static field core::bool _#nullableTopLevelField#isSet;
static method method() → core::int?
  ;
static get nonNullableTopLevelField() → core::int;
static set nonNullableTopLevelField(core::int nonNullableTopLevelField#param) → void;
static get nullableTopLevelField() → core::int?;
static set nullableTopLevelField(core::int? nullableTopLevelField#param) → void;
static method main() → dynamic
  ;
