class A1 {
  int _instanceField = 0;
  int getInstanceField() => _instanceField;
  void setInstanceField(int value) {}
  static int _staticField = 0;
  static int getStaticField() => _staticField;
  static void setStaticField(int value) {}
}

extension A2 on A1 {
  int get instanceProperty => getInstanceField();
  void set instanceProperty(int value) {}
  int operator +(int value) {}
  int operator -(int value) {}
  int operator -() {}
  static int staticField = A1.getStaticField();
  static int get staticProperty => A1.getStaticField();
  static void set staticProperty(int value) {}
}

main() {}
