library;
import self as self;
import "non_nullable_from_opt_out_lib.dart" as non;
import "dart:core" as core;

import "org-dartlang-testcase:///non_nullable_from_opt_out_lib.dart";

static method main() → dynamic {
  non::topLevelField = null;
  non::finalTopLevelField = null;
  non::Class<core::int*>* c = new non::Class::•<core::int*>();
  c.{non::Class::instanceField} = null;
  c.{non::Class::finalInstanceField} = null;
  c.{non::Class::instanceTypeVariable} = null;
  c.{non::Class::finalInstanceTypeVariable} = null;
  non::Class::staticField = null;
  non::Class::staticFinalField = null;
  non::expect(null, non::topLevelField);
  non::expect(null, non::finalTopLevelField);
  non::expect(null, c.{non::Class::instanceField});
  non::expect(null, c.{non::Class::finalInstanceField});
  non::expect(null, c.{non::Class::instanceTypeVariable});
  non::expect(null, c.{non::Class::finalInstanceTypeVariable});
  non::expect(null, non::Class::staticField);
  non::expect(null, non::Class::staticFinalField);
  non::throws(() → core::Null? => non::finalTopLevelField = null);
  non::throws(() → core::Null? => c.{non::Class::finalInstanceField} = null);
  non::throws(() → core::Null? => c.{non::Class::finalInstanceTypeVariable} = null);
  non::throws(() → core::Null? => non::Class::staticFinalField = null);
  non::method<core::Null?>(true, null, null);
}

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

class Class<T extends core::Object = core::Object> extends core::Object {
  field core::int? _#Class#instanceField = null;
  field core::bool _#Class#instanceField#isSet = false;
  field dynamic _#Class#finalInstanceField = null;
  field core::bool _#Class#finalInstanceField#isSet = false;
  generic-covariant-impl field non::Class::T? _#Class#instanceTypeVariable = null;
  field core::bool _#Class#instanceTypeVariable#isSet = false;
  field non::Class::T? _#Class#finalInstanceTypeVariable = null;
  field core::bool _#Class#finalInstanceTypeVariable#isSet = false;
  static field core::int? _#staticField = null;
  static field core::bool _#staticField#isSet = false;
  static field dynamic _#staticFinalField = null;
  static field core::bool _#staticFinalField#isSet = false;
  synthetic constructor •() → non::Class<non::Class::T>
    : super core::Object::•()
    ;
  get instanceField() → core::int
    return this.{non::Class::_#Class#instanceField#isSet} ?{core::int} let final core::int? #t1 = this.{non::Class::_#Class#instanceField} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
  set instanceField(core::int #t2) → void {
    this.{non::Class::_#Class#instanceField#isSet} = true;
    this.{non::Class::_#Class#instanceField} = #t2;
  }
  get finalInstanceField() → dynamic
    return this.{non::Class::_#Class#finalInstanceField#isSet} ?{dynamic} this.{non::Class::_#Class#finalInstanceField} : throw new _in::LateError::fieldNI("finalInstanceField");
  set finalInstanceField(dynamic #t3) → void
    if(this.{non::Class::_#Class#finalInstanceField#isSet})
      throw new _in::LateError::fieldAI("finalInstanceField");
    else {
      this.{non::Class::_#Class#finalInstanceField#isSet} = true;
      this.{non::Class::_#Class#finalInstanceField} = #t3;
    }
  get instanceTypeVariable() → non::Class::T
    return this.{non::Class::_#Class#instanceTypeVariable#isSet} ?{non::Class::T} let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable} in #t4{non::Class::T} : throw new _in::LateError::fieldNI("instanceTypeVariable");
  set instanceTypeVariable(generic-covariant-impl non::Class::T #t5) → void {
    this.{non::Class::_#Class#instanceTypeVariable#isSet} = true;
    this.{non::Class::_#Class#instanceTypeVariable} = #t5;
  }
  get finalInstanceTypeVariable() → non::Class::T
    return this.{non::Class::_#Class#finalInstanceTypeVariable#isSet} ?{non::Class::T} let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable} in #t6{non::Class::T} : throw new _in::LateError::fieldNI("finalInstanceTypeVariable");
  set finalInstanceTypeVariable(non::Class::T #t7) → void
    if(this.{non::Class::_#Class#finalInstanceTypeVariable#isSet})
      throw new _in::LateError::fieldAI("finalInstanceTypeVariable");
    else {
      this.{non::Class::_#Class#finalInstanceTypeVariable#isSet} = true;
      this.{non::Class::_#Class#finalInstanceTypeVariable} = #t7;
    }
  static get staticField() → core::int
    return non::Class::_#staticField#isSet ?{core::int} let final core::int? #t8 = non::Class::_#staticField in #t8{core::int} : throw new _in::LateError::fieldNI("staticField");
  static set staticField(core::int #t9) → void {
    non::Class::_#staticField#isSet = true;
    non::Class::_#staticField = #t9;
  }
  static get staticFinalField() → dynamic
    return non::Class::_#staticFinalField#isSet ?{dynamic} non::Class::_#staticFinalField : throw new _in::LateError::fieldNI("staticFinalField");
  static set staticFinalField(dynamic #t10) → void
    if(non::Class::_#staticFinalField#isSet)
      throw new _in::LateError::fieldAI("staticFinalField");
    else {
      non::Class::_#staticFinalField#isSet = true;
      non::Class::_#staticFinalField = #t10;
    }
}
static field core::int? _#topLevelField = null;
static field core::bool _#topLevelField#isSet = false;
static field dynamic _#finalTopLevelField = null;
static field core::bool _#finalTopLevelField#isSet = false;
static get topLevelField() → core::int
  return non::_#topLevelField#isSet ?{core::int} let final core::int? #t11 = non::_#topLevelField in #t11{core::int} : throw new _in::LateError::fieldNI("topLevelField");
static set topLevelField(core::int #t12) → void {
  non::_#topLevelField#isSet = true;
  non::_#topLevelField = #t12;
}
static get finalTopLevelField() → dynamic
  return non::_#finalTopLevelField#isSet ?{dynamic} non::_#finalTopLevelField : throw new _in::LateError::fieldNI("finalTopLevelField");
static set finalTopLevelField(dynamic #t13) → void
  if(non::_#finalTopLevelField#isSet)
    throw new _in::LateError::fieldAI("finalTopLevelField");
  else {
    non::_#finalTopLevelField#isSet = true;
    non::_#finalTopLevelField = #t13;
  }
static method method<T extends core::Object = core::Object>(core::bool b, core::int i, non::method::T t) → dynamic {
  core::int? local;
  core::bool #local#isSet = false;
  function #local#get() → core::int
    return #local#isSet ?{core::int} local{core::int} : throw new _in::LateError::localNI("local");
  function #local#set(core::int #t14) → dynamic {
    #local#isSet = true;
    return local = #t14;
  }
  final dynamic finalLocal;
  core::bool #finalLocal#isSet = false;
  function #finalLocal#get() → dynamic
    return #finalLocal#isSet ?{dynamic} finalLocal : throw new _in::LateError::localNI("finalLocal");
  function #finalLocal#set(dynamic #t15) → dynamic
    if(#finalLocal#isSet)
      throw new _in::LateError::localAI("finalLocal");
    else {
      #finalLocal#isSet = true;
      return finalLocal = #t15;
    }
  non::method::T? localTypeVariable;
  core::bool #localTypeVariable#isSet = false;
  function #localTypeVariable#get() → non::method::T
    return #localTypeVariable#isSet ?{non::method::T} localTypeVariable{non::method::T} : throw new _in::LateError::localNI("localTypeVariable");
  function #localTypeVariable#set(non::method::T #t16) → dynamic {
    #localTypeVariable#isSet = true;
    return localTypeVariable = #t16;
  }
  final non::method::T? finalLocalTypeVariable;
  core::bool #finalLocalTypeVariable#isSet = false;
  function #finalLocalTypeVariable#get() → non::method::T
    return #finalLocalTypeVariable#isSet ?{non::method::T} finalLocalTypeVariable{non::method::T} : throw new _in::LateError::localNI("finalLocalTypeVariable");
  function #finalLocalTypeVariable#set(non::method::T #t17) → dynamic
    if(#finalLocalTypeVariable#isSet)
      throw new _in::LateError::localAI("finalLocalTypeVariable");
    else {
      #finalLocalTypeVariable#isSet = true;
      return finalLocalTypeVariable = #t17;
    }
  if(b) {
    #local#set.call(i);
    #finalLocal#set.call(i);
    #localTypeVariable#set.call(t);
    #finalLocalTypeVariable#set.call(t);
    non::expect(i, #local#get.call());
    non::expect(i, #finalLocal#get.call());
    non::expect(t, #localTypeVariable#get.call());
    non::expect(t, #finalLocalTypeVariable#get.call());
  }
  non::throws(() → void => #finalLocal#set.call(i));
  non::throws(() → void => #finalLocalTypeVariable#set.call(t));
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
static method throws(() → void f) → dynamic {
  try {
    f.call();
  }
  on core::Object catch(final core::Object _) {
    return;
  }
  throw "Missing exception";
}
