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

class Class1 extends core::Object {
  final field core::int field;
  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
  constructor _([core::int field]) → self::Class1
    ;
  static method _#_#tearOff([core::int field]) → self::Class1
    return new self::Class1::_(field);
  static factory •([core::int field]) → self::Class1
    return new self::Class1::_(field);
  static method _#new#tearOff([core::int field]) → self::Class1
    return new self::Class1::_(field);
}
class Class2 extends core::Object {
  final field core::int field;
  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
  constructor _({core::int field}) → self::Class2
    ;
  static method _#_#tearOff({core::int field}) → self::Class2
    return new self::Class2::_(field: field);
  static factory •({core::int field}) → self::Class2
    return new self::Class2::_(field: field);
  static method _#new#tearOff({core::int field}) → self::Class2
    return new self::Class2::_(field: field);
}
static final field core::bool inSoundMode;
static method main() → dynamic
  ;
static method testDefaultValues() → void
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
  ;
