class Class {
  var field;
}

extension Extension on Class {
  readGetter() {}
  writeSetterRequired(value) {}
  writeSetterOptional([value]) {}
  writeSetterNamed({value}) {}
  get tearOffGetterNoArgs => readGetter;
  get tearOffGetterRequired => writeSetterRequired;
  get tearOffGetterOptional => writeSetterOptional;
  get tearOffGetterNamed => writeSetterNamed;
  get property => this.field;
  set property(value) {}
  invocations(value) {}
  tearOffs(value) {}
  getterCalls(value) {}
}

class GenericClass<T> {
  T? field;
}

extension GenericExtension<T> on GenericClass<T> {
  T? readGetter() {}
  writeSetterRequired(T value) {}
  writeSetterOptional([T? value]) {}
  writeSetterNamed({T? value}) {}
  genericWriteSetterRequired<S extends T>(S value) {}
  genericWriteSetterOptional<S extends T>([S? value]) {}
  genericWriteSetterNamed<S extends T>({S? value}) {}
  T? get property => this.field;
  void set property(T? value) {}
  get tearOffGetterNoArgs => readGetter;
  get tearOffGetterRequired => writeSetterRequired;
  get tearOffGetterOptional => writeSetterOptional;
  get tearOffGetterNamed => writeSetterNamed;
  get tearOffGetterGenericRequired => genericWriteSetterRequired;
  get tearOffGetterGenericOptional => genericWriteSetterOptional;
  get tearOffGetterGenericNamed => genericWriteSetterNamed;
  invocations<S extends T>(S value) {}
  tearOffs<S extends T>(S value) {}
  getterCalls<S extends T>(S value) {}
}

main() {}
