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 instanceField#param) → void;
  get finalInstanceField() → dynamic;
  set finalInstanceField(dynamic finalInstanceField#param) → void;
  get instanceTypeVariable() → self2::Class::T;
  set instanceTypeVariable(covariant-by-class self2::Class::T instanceTypeVariable#param) → void;
  get finalInstanceTypeVariable() → self2::Class::T;
  set finalInstanceTypeVariable(self2::Class::T finalInstanceTypeVariable#param) → void;
  static get staticField() → core::int;
  static set staticField(core::int staticField#param) → void;
  static get staticFinalField() → dynamic;
  static set staticFinalField(dynamic staticFinalField#param) → 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 topLevelField#param) → void;
static get finalTopLevelField() → dynamic;
static set finalTopLevelField(dynamic finalTopLevelField#param) → 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
  ;
