library;
import self as self;
import "dart:core" as core;

typedef Typedef1<X extends core::num> = self::Class<X>;
typedef Typedef2<X extends core::num> = self::ExtensionType<X>% /* erasure=core::int, declared=! */;
class Class<X extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Class<self::Class::X%>
    : super core::Object::•()
    ;
}
extension type ExtensionType<X extends core::Object? = dynamic>(core::int i) {
  abstract extension-type-member representation-field get i() → core::int;
  constructor • = self::ExtensionType|constructor#;
  constructor tearoff • = self::ExtensionType|constructor#_#new#tearOff;
}
static method method1() → dynamic
  return new self::Class::•<core::num>();
static extension-type-member method ExtensionType|constructor#<X extends core::Object? = dynamic>(core::int i) → self::ExtensionType<self::ExtensionType|constructor#::X%>% /* erasure=core::int, declared=! */ {
  lowered final self::ExtensionType<self::ExtensionType|constructor#::X%>% /* erasure=core::int, declared=! */ #this = i;
  return #this;
}
static extension-type-member method ExtensionType|constructor#_#new#tearOff<X extends core::Object? = dynamic>(core::int i) → self::ExtensionType<self::ExtensionType|constructor#_#new#tearOff::X%>% /* erasure=core::int, declared=! */
  return self::ExtensionType|constructor#<self::ExtensionType|constructor#_#new#tearOff::X%>(i);
static method method2() → dynamic
  return self::ExtensionType|constructor#<core::num>(0);
static method _#Typedef1#new#tearOff<X extends core::num>() → self::Class<self::_#Typedef1#new#tearOff::X>
  return new self::Class::•<self::_#Typedef1#new#tearOff::X>();
static method _#Typedef2#new#tearOff<X extends core::num>(core::int i) → self::ExtensionType<self::_#Typedef2#new#tearOff::X>% /* erasure=core::int, declared=! */
  return self::ExtensionType|constructor#<self::_#Typedef2#new#tearOff::X>(i);
