library;
//
// Problems in library:
//
// pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart:5:1: Error: A library can't opt out of null safety by default, when using sound null safety.
// // @dart=2.8
// ^^^^^^^^^^^^
//
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 dynamic _#Class#finalInstanceField = null;
  field core::bool _#Class#finalInstanceField#isSet = false;
  generic-covariant-impl field non::Class::T? _#Class#instanceTypeVariable = null;
  field non::Class::T? _#Class#finalInstanceTypeVariable = null;
  static field core::int? _#staticField = null;
  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 let final core::int? #t1 = this.{non::Class::_#Class#instanceField} in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Field 'instanceField' has not been initialized.") : #t1{core::int};
  set instanceField(core::int #t2) → void
    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::LateInitializationErrorImpl::•("Field 'finalInstanceField' has not been initialized.");
  set finalInstanceField(dynamic #t3) → void
    if(this.{non::Class::_#Class#finalInstanceField#isSet})
      throw new _in::LateInitializationErrorImpl::•("Field 'finalInstanceField' has already been initialized.");
    else {
      this.{non::Class::_#Class#finalInstanceField#isSet} = true;
      this.{non::Class::_#Class#finalInstanceField} = #t3;
    }
  get instanceTypeVariable() → non::Class::T
    return let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable} in #t4.==(null) ?{non::Class::T} throw new _in::LateInitializationErrorImpl::•("Field 'instanceTypeVariable' has not been initialized.") : #t4{non::Class::T};
  set instanceTypeVariable(generic-covariant-impl non::Class::T #t5) → void
    this.{non::Class::_#Class#instanceTypeVariable} = #t5;
  get finalInstanceTypeVariable() → non::Class::T
    return let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable} in #t6.==(null) ?{non::Class::T} throw new _in::LateInitializationErrorImpl::•("Field 'finalInstanceTypeVariable' has not been initialized.") : #t6{non::Class::T};
  set finalInstanceTypeVariable(non::Class::T #t7) → void
    if(this.{non::Class::_#Class#finalInstanceTypeVariable}.==(null))
      this.{non::Class::_#Class#finalInstanceTypeVariable} = #t7;
    else
      throw new _in::LateInitializationErrorImpl::•("Field 'finalInstanceTypeVariable' has already been initialized.");
  static get staticField() → core::int
    return let final core::int? #t8 = non::Class::_#staticField in #t8.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Field 'staticField' has not been initialized.") : #t8{core::int};
  static set staticField(core::int #t9) → void
    non::Class::_#staticField = #t9;
  static get staticFinalField() → dynamic
    return non::Class::_#staticFinalField#isSet ?{dynamic} non::Class::_#staticFinalField : throw new _in::LateInitializationErrorImpl::•("Field 'staticFinalField' has not been initialized.");
  static set staticFinalField(dynamic #t10) → void
    if(non::Class::_#staticFinalField#isSet)
      throw new _in::LateInitializationErrorImpl::•("Field 'staticFinalField' has already been initialized.");
    else {
      non::Class::_#staticFinalField#isSet = true;
      non::Class::_#staticFinalField = #t10;
    }
}
static field core::int? _#topLevelField = null;
static field dynamic _#finalTopLevelField = null;
static field core::bool _#finalTopLevelField#isSet = false;
static get topLevelField() → core::int
  return let final core::int? #t11 = non::_#topLevelField in #t11.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Field 'topLevelField' has not been initialized.") : #t11{core::int};
static set topLevelField(core::int #t12) → void
  non::_#topLevelField = #t12;
static get finalTopLevelField() → dynamic
  return non::_#finalTopLevelField#isSet ?{dynamic} non::_#finalTopLevelField : throw new _in::LateInitializationErrorImpl::•("Field 'finalTopLevelField' has not been initialized.");
static set finalTopLevelField(dynamic #t13) → void
  if(non::_#finalTopLevelField#isSet)
    throw new _in::LateInitializationErrorImpl::•("Field 'finalTopLevelField' has already been initialized.");
  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;
  function #local#get() → core::int
    return let final core::int? #t14 = local in #t14.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local' has not been initialized.") : #t14{core::int};
  function #local#set(core::int #t15) → dynamic
    return local = #t15;
  final dynamic finalLocal;
  core::bool #finalLocal#isSet = false;
  function #finalLocal#get() → dynamic
    return #finalLocal#isSet ?{dynamic} finalLocal : throw new _in::LateInitializationErrorImpl::•("Local 'finalLocal' has not been initialized.");
  function #finalLocal#set(dynamic #t16) → dynamic
    if(#finalLocal#isSet)
      throw new _in::LateInitializationErrorImpl::•("Local 'finalLocal' has already been initialized.");
    else {
      #finalLocal#isSet = true;
      return finalLocal = #t16;
    }
  non::method::T? localTypeVariable;
  function #localTypeVariable#get() → non::method::T
    return let final non::method::T? #t17 = localTypeVariable in #t17.==(null) ?{non::method::T} throw new _in::LateInitializationErrorImpl::•("Local 'localTypeVariable' has not been initialized.") : #t17{non::method::T};
  function #localTypeVariable#set(non::method::T #t18) → dynamic
    return localTypeVariable = #t18;
  final non::method::T? finalLocalTypeVariable;
  function #finalLocalTypeVariable#get() → non::method::T
    return let final non::method::T? #t19 = finalLocalTypeVariable in #t19.==(null) ?{non::method::T} throw new _in::LateInitializationErrorImpl::•("Local 'finalLocalTypeVariable' has not been initialized.") : #t19{non::method::T};
  function #finalLocalTypeVariable#set(non::method::T #t20) → dynamic
    if(finalLocalTypeVariable.==(null))
      return finalLocalTypeVariable = #t20;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'finalLocalTypeVariable' has already been initialized.");
  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(() → core::int => #finalLocal#set.call(i));
  non::throws(() → non::method::T => #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";
}
