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 {}
