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

class Class<T extends core::Object? = dynamic> extends core::Object {
  static field core::int? _#lateStaticField1;
  static field core::bool _#lateStaticField1#isSet;
  static field core::int? _#lateStaticField2;
  static field core::bool _#lateStaticField2#isSet;
  field core::int? _#Class#lateInstanceField;
  field core::bool _#Class#lateInstanceField#isSet;
  final field self::Class::T% field;
  covariant-by-class field self::Class::T? _#Class#lateGenericField1;
  field core::bool _#Class#lateGenericField1#isSet;
  covariant-by-class field self::Class::T? _#Class#lateGenericField2;
  field core::bool _#Class#lateGenericField2#isSet;
  constructor •(self::Class::T% field) → self::Class<self::Class::T%>
    ;
  static get lateStaticField1() → core::int;
  static set lateStaticField1(core::int lateStaticField1#param) → void;
  static get lateStaticField2() → core::int;
  static set lateStaticField2(core::int lateStaticField2#param) → void;
  static method staticMethod() → dynamic
    ;
  get lateInstanceField() → core::int;
  set lateInstanceField(core::int lateInstanceField#param) → void;
  get lateGenericField1() → self::Class::T%;
  set lateGenericField1(covariant-by-class self::Class::T% lateGenericField1#param) → void;
  get lateGenericField2() → self::Class::T%;
  set lateGenericField2(covariant-by-class self::Class::T% lateGenericField2#param) → void;
  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic
    ;
}
extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
  static set lateExtensionField1 = set self::Extension|lateExtensionField1;
  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
  static set lateExtensionField2 = set self::Extension|lateExtensionField2;
  static method staticMethod = self::Extension|staticMethod;
}
static field core::int? _#lateTopLevelField1;
static field core::bool _#lateTopLevelField1#isSet;
static field core::int? _#Extension|lateExtensionField1;
static field core::bool _#Extension|lateExtensionField1#isSet;
static field core::int? _#Extension|lateExtensionField2;
static field core::bool _#Extension|lateExtensionField2#isSet;
static get lateTopLevelField1() → core::int;
static set lateTopLevelField1(core::int lateTopLevelField1#param) → void;
static get Extension|lateExtensionField1() → core::int;
static set Extension|lateExtensionField1(core::int Extension|lateExtensionField1#param) → void;
static get Extension|lateExtensionField2() → core::int;
static set Extension|lateExtensionField2(core::int Extension|lateExtensionField2#param) → void;
static method Extension|staticMethod() → dynamic
  ;
static method main() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
