library;
import self as self;

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

static method main() → dynamic
  ;

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

class Class<T extends core::Object> extends core::Object {
  field core::int? _#Class#instanceField;
  field core::bool _#Class#instanceField#isSet;
  field dynamic _#Class#finalInstanceField;
  field core::bool _#Class#finalInstanceField#isSet;
  covariant-by-class field self2::Class::T? _#Class#instanceTypeVariable;
  field core::bool _#Class#instanceTypeVariable#isSet;
  field self2::Class::T? _#Class#finalInstanceTypeVariable;
  field core::bool _#Class#finalInstanceTypeVariable#isSet;
  static field core::int? _#staticField;
  static field core::bool _#staticField#isSet;
  static field dynamic _#staticFinalField;
  static field core::bool _#staticFinalField#isSet;
  synthetic constructor •() → self2::Class<self2::Class::T>
    ;
  get instanceField() → core::int;
  set instanceField(core::int #t1) → void;
  get finalInstanceField() → dynamic;
  set finalInstanceField(dynamic #t2) → void;
  get instanceTypeVariable() → self2::Class::T;
  set instanceTypeVariable(covariant-by-class self2::Class::T #t3) → void;
  get finalInstanceTypeVariable() → self2::Class::T;
  set finalInstanceTypeVariable(self2::Class::T #t4) → void;
  static get staticField() → core::int;
  static set staticField(core::int #t5) → void;
  static get staticFinalField() → dynamic;
  static set staticFinalField(dynamic #t6) → void;
}
static field core::int? _#topLevelField;
static field core::bool _#topLevelField#isSet;
static field dynamic _#finalTopLevelField;
static field core::bool _#finalTopLevelField#isSet;
static get topLevelField() → core::int;
static set topLevelField(core::int #t7) → void;
static get finalTopLevelField() → dynamic;
static set finalTopLevelField(dynamic #t8) → void;
static method method<T extends core::Object>(core::bool b, core::int i, self2::method::T t) → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method throws(() → void f) → dynamic
  ;
