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

class B extends core::Object {
  final field core::int x;
  constructor •(core::int x) → self::B
    : self::B::x = x, super core::Object::•()
    ;
}
class C extends self::B {
  field core::int? _#C#y = null;
  field core::bool _#C#y#isSet = false;
  constructor •(core::int x) → self::C
    : super self::B::•(x)
    ;
  get y() → core::int
    return let final core::int? #t1 = this.{self::C::_#C#y}{core::int?} in #t1 == null ?{core::int} let final core::int #t2 = this.{self::B::x}{core::int}.{core::num::+}(1){(core::num) → core::int} in this.{self::C::_#C#y}{core::int?} == null ?{core::int} this.{self::C::_#C#y} = #t2 : throw new _in::LateError::fieldADI("y") : #t1{core::int};
  method method() → dynamic
    return this.{self::B::x}{core::int};
}
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::int? lateStaticField2Init = null;
  static field core::int? _#lateStaticField2 = null;
  field core::int? lateInstanceFieldInit = null;
  field core::int? _#Class#lateInstanceField = null;
  covariant-by-class field self::Class::T? lateGenericFieldInit = null;
  final field self::Class::T% field;
  field self::Class::T? _#Class#lateGenericField = null;
  field core::bool _#Class#lateGenericField#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
    return let final core::int? #t3 = self::Class::_#lateStaticField1 in #t3 == null ?{core::int} let final core::int #t4 = self::Class::initLateStaticField1(87) in self::Class::_#lateStaticField1 == null ?{core::int} self::Class::_#lateStaticField1 = #t4 : throw new _in::LateError::fieldADI("lateStaticField1") : #t3{core::int};
  static method initLateStaticField2(core::int value) → core::int {
    return self::Class::lateStaticField2Init = value;
  }
  static get lateStaticField2() → core::int
    return let final core::int? #t5 = self::Class::_#lateStaticField2 in #t5 == null ?{core::int} let final core::int #t6 = self::Class::initLateStaticField2(42) in self::Class::_#lateStaticField2 == null ?{core::int} self::Class::_#lateStaticField2 = #t6 : throw new _in::LateError::fieldADI("lateStaticField2") : #t5{core::int};
  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
    return let final core::int? #t7 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t7 == null ?{core::int} let final core::int #t8 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int} in this.{self::Class::_#Class#lateInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#lateInstanceField} = #t8 : throw new _in::LateError::fieldADI("lateInstanceField") : #t7{core::int};
  method initLateGenericField(covariant-by-class self::Class::T% value) → self::Class::T% {
    return this.{self::Class::lateGenericFieldInit} = value;
  }
  get lateGenericField() → self::Class::T% {
    if(!this.{self::Class::_#Class#lateGenericField#isSet}{core::bool}) {
      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field}{self::Class::T%}){(self::Class::T%) → self::Class::T%};
      if(this.{self::Class::_#Class#lateGenericField#isSet}{core::bool})
        throw new _in::LateError::fieldADI("lateGenericField");
      this.{self::Class::_#Class#lateGenericField} = #t9;
      this.{self::Class::_#Class#lateGenericField#isSet} = true;
    }
    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField}{self::Class::T?} in #t10{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::lateGenericFieldInit}{self::Class::T?});
    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField}{self::Class::T%});
    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericFieldInit}{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 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 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::int? Extension|lateExtensionField1Init;
static field core::int? _#Extension|lateExtensionField1 = null;
static field core::int? Extension|lateExtensionField2Init;
static field core::int? _#Extension|lateExtensionField2 = null;
static method initLateTopLevelField1(core::int value) → core::int {
  return self::lateTopLevelField1Init = value;
}
static get lateTopLevelField1() → core::int
  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11 == null ?{core::int} let final core::int #t12 = self::initLateTopLevelField1(123) in self::_#lateTopLevelField1 == null ?{core::int} self::_#lateTopLevelField1 = #t12 : throw new _in::LateError::fieldADI("lateTopLevelField1") : #t11{core::int};
static method Extension|initLateExtensionField1(core::int value) → core::int {
  return self::Extension|lateExtensionField1Init = value;
}
static get Extension|lateExtensionField1() → core::int
  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13 == null ?{core::int} let final core::int #t14 = self::Extension|initLateExtensionField1(87) in self::_#Extension|lateExtensionField1 == null ?{core::int} self::_#Extension|lateExtensionField1 = #t14 : throw new _in::LateError::fieldADI("lateExtensionField1") : #t13{core::int};
static method Extension|initLateExtensionField2(core::int value) → core::int {
  return self::Extension|lateExtensionField2Init = value;
}
static get Extension|lateExtensionField2() → core::int
  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15 == null ?{core::int} let final core::int #t16 = self::Extension|initLateExtensionField2(42) in self::_#Extension|lateExtensionField2 == null ?{core::int} self::_#Extension|lateExtensionField2 = #t16 : throw new _in::LateError::fieldADI("lateExtensionField2") : #t15{core::int};
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>(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();
  self::expect(2, new self::C::•(1).{self::C::y}{core::int});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
