class Class<T> {
  static var field;
}

extension Extension<T> on Class<T> {
  fieldAccessFromInstanceContext() {}
  getterCallsFromInstanceContext(T value) {}
  invocationsFromInstanceContext(T value) {}
  static fieldAccessFromStaticContext() {}
  static genericWriteSetterNamed<S>({S value}) {}
  static genericWriteSetterOptional<S>([S value]) {}
  static genericWriteSetterRequired<S>(S value) {}
  static get property => Class.field;
  static get tearOffGetterGenericNamed => genericWriteSetterNamed;
  static get tearOffGetterGenericOptional => genericWriteSetterOptional;
  static get tearOffGetterGenericRequired => genericWriteSetterRequired;
  static get tearOffGetterNamed => writeSetterNamed;
  static get tearOffGetterNoArgs => readGetter;
  static get tearOffGetterOptional => writeSetterOptional;
  static get tearOffGetterRequired => writeSetterRequired;
  static getterCallsFromStaticContext(int value) {}
  static invocationsFromStaticContext(int value) {}
  static readGetter() {}
  static set property(value) {}
  static tearOffsFromStaticContext(int value) {}
  static var field;
  static writeSetterNamed({value}) {}
  static writeSetterOptional([value]) {}
  static writeSetterRequired(value) {}
  tearOffsFromInstanceContext(T value) {}
}

main() {}
