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

class Test1 extends core::Object {
  field core::int prop;
  field core::int? prop2;
  synthetic constructor •() → self::Test1
    ;
  static method test(self::Test1? t) → void
    ;
}
class Test2 extends core::Object {
  field core::num prop;
  field core::num? prop2;
  synthetic constructor •() → self::Test2
    ;
  static method test(self::Test2? t) → void
    ;
}
class Test3 extends core::Object {
  field core::double prop;
  field core::double? prop2;
  synthetic constructor •() → self::Test3
    ;
  static method test3(self::Test3? t) → void
    ;
}
static method getInt() → core::int
  ;
static method getNum() → core::num
  ;
static method getDouble() → core::double
  ;
static method main() → dynamic
  ;
