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

class Class1 extends core::Object {
  final field core::int field1;
  final field core::int field2;
  static final field dynamic _redirecting# = <dynamic>[self::Class1::redirectPositionalSame, self::Class1::redirectPositionalFewer1, self::Class1::redirectPositionalFewer2, self::Class1::redirectNamedSame, self::Class1::redirectNamedReorder, self::Class1::redirectNamedFewer1, self::Class1::redirectNamedFewer2, self::Class1::redirectNamedFewer3]/*isLegacy*/;
  constructor positional([core::int field1, core::int field2]) → self::Class1
    ;
  constructor named({core::int field1, core::int field2}) → self::Class1
    ;
  static method _#positional#tearOff([core::int field1, core::int field2]) → self::Class1
    return new self::Class1::positional(field1, field2);
  static factory redirectPositionalSame([core::int field1, core::int field2]) → self::Class1
    return new self::Class1::positional(field1, field2);
  static method _#redirectPositionalSame#tearOff([core::int field1, core::int field2]) → self::Class1
    return new self::Class1::positional(field1, field2);
  static factory redirectPositionalFewer1([core::int field1]) → self::Class1
    return new self::Class1::positional(field1);
  static method _#redirectPositionalFewer1#tearOff([core::int field1]) → self::Class1
    return new self::Class1::positional(field1);
  static factory redirectPositionalFewer2() → self::Class1
    return new self::Class1::positional();
  static method _#redirectPositionalFewer2#tearOff() → self::Class1
    return new self::Class1::positional();
  static method _#named#tearOff({core::int field1, core::int field2}) → self::Class1
    return new self::Class1::named(field1: field1, field2: field2);
  static factory redirectNamedSame({core::int field1, core::int field2}) → self::Class1
    return new self::Class1::named(field1: field1, field2: field2);
  static method _#redirectNamedSame#tearOff({core::int field1, core::int field2}) → self::Class1
    return new self::Class1::named(field1: field1, field2: field2);
  static factory redirectNamedReorder({core::int field2, core::int field1}) → self::Class1
    return new self::Class1::named(field2: field2, field1: field1);
  static method _#redirectNamedReorder#tearOff({core::int field2, core::int field1}) → self::Class1
    return new self::Class1::named(field2: field2, field1: field1);
  static factory redirectNamedFewer1({core::int field1}) → self::Class1
    return new self::Class1::named(field1: field1);
  static method _#redirectNamedFewer1#tearOff({core::int field1}) → self::Class1
    return new self::Class1::named(field1: field1);
  static factory redirectNamedFewer2({core::int field2}) → self::Class1
    return new self::Class1::named(field2: field2);
  static method _#redirectNamedFewer2#tearOff({core::int field2}) → self::Class1
    return new self::Class1::named(field2: field2);
  static factory redirectNamedFewer3() → self::Class1
    return new self::Class1::named();
  static method _#redirectNamedFewer3#tearOff() → self::Class1
    return new self::Class1::named();
}
static final field core::bool inSoundMode;
static method main() → dynamic
  ;
static method testDefaultValues() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
  ;
