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::int? _#lateStaticField2;
  field core::int? _#Class#lateInstanceField;
  final field self::Class::T% field;
  generic-covariant-impl field self::Class::T? _#Class#lateGenericField1;
  field core::bool _#Class#lateGenericField1#isSet;
  generic-covariant-impl 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 #t1) → void;
  static get lateStaticField2() → core::int;
  static set lateStaticField2(core::int #t2) → void;
  static method staticMethod() → dynamic
    ;
  get lateInstanceField() → core::int;
  set lateInstanceField(core::int #t3) → void;
  get lateGenericField1() → self::Class::T%;
  set lateGenericField1(self::Class::T% #t4) → void;
  get lateGenericField2() → self::Class::T%;
  set lateGenericField2(self::Class::T% #t5) → void;
  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic
    ;
}
extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
  static set lateExtensionField1 = set self::Extension|lateExtensionField1;
  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
  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::int? _#Extension|lateExtensionField1;
static field core::int? _#Extension|lateExtensionField2;
static get lateTopLevelField1() → core::int;
static set lateTopLevelField1(core::int #t6) → void;
static get Extension|lateExtensionField1() → core::int;
static set Extension|lateExtensionField1(core::int #t7) → void;
static get Extension|lateExtensionField2() → core::int;
static set Extension|lateExtensionField2(core::int #t8) → void;
static method Extension|staticMethod() → dynamic
  ;
static method main() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
