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

class Class1 extends core::Object {
  constructor _() → self::Class1
    ;
  static method _#_#tearOff() → self::Class1
    return new self::Class1::_();
  static factory •() → self::Class1
    ;
  static method _#new#tearOff() → self::Class1
    return self::Class1::•();
}
class Class2 extends core::Object {
  constructor _() → self::Class2
    ;
  static method _#_#tearOff() → self::Class2
    return new self::Class2::_();
  static factory named() → self::Class2
    ;
  static method _#named#tearOff() → self::Class2
    return self::Class2::named();
}
class Class3 extends core::Object {
  final field core::int field;
  constructor _(core::int field) → self::Class3
    ;
  static method _#_#tearOff(core::int field) → self::Class3
    return new self::Class3::_(field);
  static factory •(core::int field) → self::Class3
    ;
  static method _#new#tearOff(core::int field) → self::Class3
    return self::Class3::•(field);
}
class Class4 extends core::Object {
  final field core::int? field;
  constructor _([core::int? field = null]) → self::Class4
    ;
  static method _#_#tearOff([core::int? field]) → self::Class4
    return new self::Class4::_(field);
  static factory •([core::int? field]) → self::Class4
    ;
  static method _#new#tearOff([core::int? field]) → self::Class4
    return self::Class4::•(field);
}
class Class5 extends core::Object {
  final field core::int field1;
  final field core::int? field2;
  constructor _(core::int field1, [core::int? field2 = null]) → self::Class5
    ;
  static method _#_#tearOff(core::int field1, [core::int? field2]) → self::Class5
    return new self::Class5::_(field1, field2);
  static factory •(core::int field1, [core::int? field2]) → self::Class5
    ;
  static method _#new#tearOff(core::int field1, [core::int? field2]) → self::Class5
    return self::Class5::•(field1, field2);
}
class Class6 extends core::Object {
  final field core::int field1;
  final field core::int? field2;
  final field core::int field3;
  constructor _(core::int field1, {core::int? field2 = null, required core::int field3 = null}) → self::Class6
    ;
  static method _#_#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
    return new self::Class6::_(field1, field2: field2, field3: field3);
  static factory •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
    ;
  static method _#new#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
    return self::Class6::•(field1, field2: field2, field3: field3);
}
static final field core::bool inSoundMode;
static method main() → dynamic
  ;
static method testNoArgs() → dynamic
  ;
static method testArgs() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
  ;
