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

class Class<T extends core::Object? = dynamic> extends core::Object {
  static field core::int? lateStaticField1Init = null;
  static field core::int? _#lateStaticField1 = null;
  static field core::bool _#lateStaticField1#isSet = false;
  static field core::int? lateStaticField2Init = null;
  static field core::int? _#lateStaticField2 = null;
  static field core::bool _#lateStaticField2#isSet = false;
  field core::int? lateInstanceFieldInit = null;
  field core::int? _#Class#lateInstanceField = null;
  field core::bool _#Class#lateInstanceField#isSet = false;
  covariant-by-class field self::Class::T? lateGenericInstanceFieldInit = null;
  final field self::Class::T? field;
  field self::Class::T? _#Class#lateGenericInstanceField = null;
  field core::bool _#Class#lateGenericInstanceField#isSet = false;
  constructor •(self::Class::T? field) → self::Class<self::Class::T%>
    : self::Class::field = field, super core::Object::•()
    ;
  static method initLateStaticField1(core::int value) → core::int? {
    return self::Class::lateStaticField1Init = value;
  }
  static get lateStaticField1() → core::int? {
    if(!self::Class::_#lateStaticField1#isSet) {
      final core::int? #t1 = self::Class::initLateStaticField1(87);
      if(self::Class::_#lateStaticField1#isSet)
        throw new _in::LateError::fieldADI("lateStaticField1");
      self::Class::_#lateStaticField1 = #t1;
      self::Class::_#lateStaticField1#isSet = true;
    }
    return self::Class::_#lateStaticField1;
  }
  static method initLateStaticField2(core::int value) → core::int? {
    return self::Class::lateStaticField2Init = value;
  }
  static get lateStaticField2() → core::int? {
    if(!self::Class::_#lateStaticField2#isSet) {
      final core::int? #t2 = self::Class::initLateStaticField2(42);
      if(self::Class::_#lateStaticField2#isSet)
        throw new _in::LateError::fieldADI("lateStaticField2");
      self::Class::_#lateStaticField2 = #t2;
      self::Class::_#lateStaticField2#isSet = true;
    }
    return self::Class::_#lateStaticField2;
  }
  static method staticMethod() → dynamic {
    self::expect(null, self::Class::lateStaticField2Init);
    self::expect(42, self::Class::lateStaticField2);
    self::expect(42, self::Class::lateStaticField2Init);
  }
  method initLateInstanceField(core::int value) → core::int? {
    return this.{self::Class::lateInstanceFieldInit} = value;
  }
  get lateInstanceField() → core::int? {
    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int?};
      if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
        throw new _in::LateError::fieldADI("lateInstanceField");
      this.{self::Class::_#Class#lateInstanceField} = #t3;
      this.{self::Class::_#Class#lateInstanceField#isSet} = true;
    }
    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
  }
  method initLateGenericInstanceField(covariant-by-class self::Class::T? value) → self::Class::T? {
    return this.{self::Class::lateGenericInstanceFieldInit} = value;
  }
  get lateGenericInstanceField() → self::Class::T? {
    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field}{self::Class::T?}){(self::Class::T?) → self::Class::T?};
      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
        throw new _in::LateError::fieldADI("lateGenericInstanceField");
      this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
      this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
    }
    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
  }
  method instanceMethod() → dynamic {
    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
  }
}
extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
  static field lateExtensionField1Init = self::Extension|lateExtensionField1Init;
  static method initLateExtensionField1 = self::Extension|initLateExtensionField1;
  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
  static field lateExtensionField2Init = self::Extension|lateExtensionField2Init;
  static method initLateExtensionField2 = self::Extension|initLateExtensionField2;
  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
  static method staticMethod = self::Extension|staticMethod;
}
static field core::int? lateTopLevelField1Init;
static field core::int? _#lateTopLevelField1 = null;
static field core::bool _#lateTopLevelField1#isSet = false;
static field core::int? Extension|lateExtensionField1Init;
static field core::int? _#Extension|lateExtensionField1 = null;
static field core::bool _#Extension|lateExtensionField1#isSet = false;
static field core::int? Extension|lateExtensionField2Init;
static field core::int? _#Extension|lateExtensionField2 = null;
static field core::bool _#Extension|lateExtensionField2#isSet = false;
static method initLateTopLevelField1(core::int value) → core::int? {
  return self::lateTopLevelField1Init = value;
}
static get lateTopLevelField1() → core::int? {
  if(!self::_#lateTopLevelField1#isSet) {
    final core::int? #t5 = self::initLateTopLevelField1(123);
    if(self::_#lateTopLevelField1#isSet)
      throw new _in::LateError::fieldADI("lateTopLevelField1");
    self::_#lateTopLevelField1 = #t5;
    self::_#lateTopLevelField1#isSet = true;
  }
  return self::_#lateTopLevelField1;
}
static method Extension|initLateExtensionField1(core::int value) → core::int? {
  return self::Extension|lateExtensionField1Init = value;
}
static get Extension|lateExtensionField1() → core::int? {
  if(!self::_#Extension|lateExtensionField1#isSet) {
    final core::int? #t6 = self::Extension|initLateExtensionField1(87);
    if(self::_#Extension|lateExtensionField1#isSet)
      throw new _in::LateError::fieldADI("lateExtensionField1");
    self::_#Extension|lateExtensionField1 = #t6;
    self::_#Extension|lateExtensionField1#isSet = true;
  }
  return self::_#Extension|lateExtensionField1;
}
static method Extension|initLateExtensionField2(core::int value) → core::int? {
  return self::Extension|lateExtensionField2Init = value;
}
static get Extension|lateExtensionField2() → core::int? {
  if(!self::_#Extension|lateExtensionField2#isSet) {
    final core::int? #t7 = self::Extension|initLateExtensionField2(42);
    if(self::_#Extension|lateExtensionField2#isSet)
      throw new _in::LateError::fieldADI("lateExtensionField2");
    self::_#Extension|lateExtensionField2 = #t7;
    self::_#Extension|lateExtensionField2#isSet = true;
  }
  return self::_#Extension|lateExtensionField2;
}
static method Extension|staticMethod() → dynamic {
  self::expect(null, self::Extension|lateExtensionField2Init);
  self::expect(42, self::Extension|lateExtensionField2);
  self::expect(42, self::Extension|lateExtensionField2Init);
}
static method main() → dynamic {
  self::expect(null, self::lateTopLevelField1Init);
  self::expect(123, self::lateTopLevelField1);
  self::expect(123, self::lateTopLevelField1Init);
  self::expect(null, self::Class::lateStaticField1Init);
  self::expect(87, self::Class::lateStaticField1);
  self::expect(87, self::Class::lateStaticField1Init);
  self::Class::staticMethod();
  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(){() → dynamic};
  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(){() → dynamic};
  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
  self::expect(null, self::Extension|lateExtensionField1Init);
  self::expect(87, self::Extension|lateExtensionField1);
  self::expect(87, self::Extension|lateExtensionField1Init);
  self::Extension|staticMethod();
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
