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

class A1 extends core::Object {
  field core::int* _instanceField;
  static field core::int* _staticField;
  synthetic constructor •() → self::A1*
    ;
  method getInstanceField() → core::int*
    ;
  method setInstanceField(core::int* value) → void
    ;
  static method getStaticField() → core::int*
    ;
  static method setStaticField(core::int* value) → void
    ;
}
extension A2 on self::A1* {
  get instanceProperty = self::A2|get#instanceProperty;
  operator + = self::A2|+;
  operator - = self::A2|-;
  operator unary- = self::A2|unary-;
  static field staticField = self::A2|staticField;
  static get staticProperty = get self::A2|staticProperty;
  set instanceProperty = self::A2|set#instanceProperty;
  static set staticProperty = set self::A2|staticProperty;
}
static field core::int* A2|staticField;
static method A2|get#instanceProperty(final self::A1* #this) → core::int*
  ;
static method A2|set#instanceProperty(final self::A1* #this, core::int* value) → void
  ;
static method A2|+(final self::A1* #this, core::int* value) → core::int*
  ;
static method A2|-(final self::A1* #this, core::int* value) → core::int*
  ;
static method A2|unary-(final self::A1* #this) → core::int*
  ;
static get A2|staticProperty() → core::int*
  ;
static set A2|staticProperty(core::int* value) → void
  ;
static method main() → dynamic
  ;
