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

extension E on self::ET? /* erasure=core::int? */ {
  method foo = self::E|foo;
  method tearoff foo = self::E|get#foo;
}
extension type ET(core::int? i) {
  abstract extension-type-member representation-field get i() → core::int?;
  method foo = self::ET|foo;
  method tearoff foo = self::ET|get#foo;
  constructor • = self::ET|constructor#;
  constructor tearoff • = self::ET|constructor#_#new#tearOff;
}
static extension-member method E|foo(lowered final self::ET? /* erasure=core::int? */ #this, core::int i) → void
  ;
static extension-member method E|get#foo(lowered final self::ET? /* erasure=core::int? */ #this) → (core::int) → void
  return (core::int i) → void => self::E|foo(#this, i);
static extension-type-member method ET|constructor#(core::int? i) → self::ET% /* erasure=core::int?, declared=! */
  ;
static extension-type-member method ET|constructor#_#new#tearOff(core::int? i) → self::ET% /* erasure=core::int?, declared=! */
  return self::ET|constructor#(i);
static extension-type-member method ET|foo(lowered final self::ET% /* erasure=core::int?, declared=! */ #this) → void
  ;
static extension-type-member method ET|get#foo(lowered final self::ET% /* erasure=core::int?, declared=! */ #this) → () → void
  return () → void => self::ET|foo(#this);
static method method<X extends self::ET% /* erasure=core::int?, declared=! */, Y extends self::ET? /* erasure=core::int? */>(self::ET% /* erasure=core::int?, declared=! */ et1, self::ET? /* erasure=core::int? */ et2, self::method::X% x1, self::method::X? x2, self::method::Y% y1, self::method::Y? y2) → dynamic
  ;
