class Class<T> {
  static var field;
}

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

main() {}
