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

class A1 extends core::Object {
  field core::Object? field = null;
  synthetic constructor •() → self::A1
    : super core::Object::•()
    ;
  method method1() → void {}
}
extension A2 on self::A1 {
  method method2 = self::A2|method2;
  method tearoff method2 = self::A2|get#method2;
  method method3 = self::A2|method3;
  method tearoff method3 = self::A2|get#method3;
  method method4 = self::A2|method4;
  method tearoff method4 = self::A2|get#method4;
}
static extension-member method A2|method2(lowered final self::A1 #this) → void
  return #this.{self::A1::method1}(){() → void};
static extension-member method A2|get#method2(lowered final self::A1 #this) → () → void
  return () → void => self::A2|method2(#this);
static extension-member method A2|method3(lowered final self::A1 #this) → core::Object?
  return #this.{self::A1::field}{core::Object?};
static extension-member method A2|get#method3(lowered final self::A1 #this) → () → core::Object?
  return () → core::Object? => self::A2|method3(#this);
static extension-member method A2|method4(lowered final self::A1 #this, core::Object o) → void {
  #this.{self::A1::field} = o;
}
static extension-member method A2|get#method4(lowered final self::A1 #this) → (core::Object) → void
  return (core::Object o) → void => self::A2|method4(#this, o);
static method main() → dynamic {}
