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

class Class extends core::Object {
  static field core::int? _#lateStaticField1 = null;
  static field core::bool _#lateStaticField1#isSet = false;
  static field core::int? _#lateStaticField2 = null;
  static field core::bool _#lateStaticField2#isSet = false;
  field core::int? _#Class#lateInstanceField = null;
  field core::bool _#Class#lateInstanceField#isSet = false;
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  static get lateStaticField1() → core::int
    return self::Class::_#lateStaticField1#isSet ?{core::int} let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1{core::int} : throw new _in::LateError::fieldNI("lateStaticField1");
  static set lateStaticField1(core::int lateStaticField1#param) → void
    if(self::Class::_#lateStaticField1#isSet)
      throw new _in::LateError::fieldAI("lateStaticField1");
    else {
      self::Class::_#lateStaticField1#isSet = true;
      self::Class::_#lateStaticField1 = lateStaticField1#param;
    }
  static get lateStaticField2() → core::int
    return self::Class::_#lateStaticField2#isSet ?{core::int} let final core::int? #t2 = self::Class::_#lateStaticField2 in #t2{core::int} : throw new _in::LateError::fieldNI("lateStaticField2");
  static set lateStaticField2(core::int lateStaticField2#param) → void
    if(self::Class::_#lateStaticField2#isSet)
      throw new _in::LateError::fieldAI("lateStaticField2");
    else {
      self::Class::_#lateStaticField2#isSet = true;
      self::Class::_#lateStaticField2 = lateStaticField2#param;
    }
  static method staticMethod() → dynamic {
    self::throws(() → core::int => self::Class::lateStaticField2, "Read value from uninitialized Class.lateStaticField2");
    self::Class::lateStaticField2 = 42;
    self::expect(42, self::Class::lateStaticField2);
    self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
  }
  get lateInstanceField() → core::int
    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t3 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t3{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
  set lateInstanceField(core::int lateInstanceField#param) → void
    if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
      throw new _in::LateError::fieldAI("lateInstanceField");
    else {
      this.{self::Class::_#Class#lateInstanceField#isSet} = true;
      this.{self::Class::_#Class#lateInstanceField} = lateInstanceField#param;
    }
  method instanceMethod() → dynamic {
    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
    this.{self::Class::lateInstanceField} = 16;
    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
    self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
  }
}
extension Extension on self::Class {
  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? _#lateTopLevelField = null;
static field core::bool _#lateTopLevelField#isSet = false;
static field core::int? _#Extension|lateExtensionField1 = null;
static field core::bool _#Extension|lateExtensionField1#isSet = false;
static field core::int? _#Extension|lateExtensionField2 = null;
static field core::bool _#Extension|lateExtensionField2#isSet = false;
static get lateTopLevelField() → core::int
  return self::_#lateTopLevelField#isSet ?{core::int} let final core::int? #t4 = self::_#lateTopLevelField in #t4{core::int} : throw new _in::LateError::fieldNI("lateTopLevelField");
static set lateTopLevelField(core::int lateTopLevelField#param) → void
  if(self::_#lateTopLevelField#isSet)
    throw new _in::LateError::fieldAI("lateTopLevelField");
  else {
    self::_#lateTopLevelField#isSet = true;
    self::_#lateTopLevelField = lateTopLevelField#param;
  }
static get Extension|lateExtensionField1() → core::int
  return self::_#Extension|lateExtensionField1#isSet ?{core::int} let final core::int? #t5 = self::_#Extension|lateExtensionField1 in #t5{core::int} : throw new _in::LateError::fieldNI("lateExtensionField1");
static set Extension|lateExtensionField1(core::int Extension|lateExtensionField1#param) → void
  if(self::_#Extension|lateExtensionField1#isSet)
    throw new _in::LateError::fieldAI("lateExtensionField1");
  else {
    self::_#Extension|lateExtensionField1#isSet = true;
    self::_#Extension|lateExtensionField1 = Extension|lateExtensionField1#param;
  }
static get Extension|lateExtensionField2() → core::int
  return self::_#Extension|lateExtensionField2#isSet ?{core::int} let final core::int? #t6 = self::_#Extension|lateExtensionField2 in #t6{core::int} : throw new _in::LateError::fieldNI("lateExtensionField2");
static set Extension|lateExtensionField2(core::int Extension|lateExtensionField2#param) → void
  if(self::_#Extension|lateExtensionField2#isSet)
    throw new _in::LateError::fieldAI("lateExtensionField2");
  else {
    self::_#Extension|lateExtensionField2#isSet = true;
    self::_#Extension|lateExtensionField2 = Extension|lateExtensionField2#param;
  }
static method Extension|staticMethod() → dynamic {
  self::throws(() → core::int => self::Extension|lateExtensionField2, "Read value from uninitialized Class.lateExtensionField2");
  self::Extension|lateExtensionField2 = 42;
  self::expect(42, self::Extension|lateExtensionField2);
  self::throws(() → core::int => self::Extension|lateExtensionField2 = 43, "Write value to initialized Class.lateExtensionField2");
}
static method main() → dynamic {
  self::throws(() → core::int => self::lateTopLevelField, "Read value from uninitialized lateTopLevelField");
  self::lateTopLevelField = 123;
  self::expect(123, self::lateTopLevelField);
  self::throws(() → core::int => self::lateTopLevelField = 124, "Write value to initialized lateTopLevelField");
  self::throws(() → core::int => self::Class::lateStaticField1, "Read value from uninitialized Class.lateStaticField1");
  self::Class::lateStaticField1 = 87;
  self::expect(87, self::Class::lateStaticField1);
  self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
  self::Class::staticMethod();
  new self::Class::•().{self::Class::instanceMethod}(){() → dynamic};
  self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
  self::Extension|lateExtensionField1 = 87;
  self::expect(87, self::Extension|lateExtensionField1);
  self::throws(() → core::int => self::Extension|lateExtensionField1 = 88, "Write value to initialized Extension.lateExtensionField1");
  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}";
}
static method throws(() → dynamic f, core::String message) → dynamic {
  dynamic value;
  try {
    value = f(){() → dynamic};
  }
  on core::Error catch(final core::Error e) {
    core::print(e);
    return;
  }
  throw "${message}: ${value}";
}
