docs: Optional<ExecutableElement> findSetterMethodFor(Element field) {
          String name = field.getSimpleName().toString();
          if (field.asType().getKind() == TypeKind.BOOLEAN) {
              if (name.length() > 2 && Character.isUpperCase(name.charAt(2))) {
                  name = name.replaceFirst("^(is)(.+)", "$2");
              }
          }
          String setterName = setterNameFor(name);
          // FIXME refine this to discover one of possible overloaded methods with correct signature (i.e. single arg of field type)
          TypeElement typeElement = classElementFor(field);
          if (typeElement == null) {
              return Optional.empty();
          }
  
          List<? extends Element> elements = typeElement.getEnclosedElements();
          List<ExecutableElement> methods = ElementFilter.methodsIn(elements);
          return methods.stream()
              .filter(method -> {
                  String methodName = method.getSimpleName().toString();
                  if (setterName.equals(methodName)) {
                      Set<Modifier> modifiers = method.getModifiers();
                      return
                          // it's not static
                          !modifiers.contains(STATIC)
                              // it's either public or package visibility
                              && modifiers.contains(PUBLIC)
                              || !(modifiers.contains(PRIVATE) || modifiers.contains(PROTECTED));
                  }
                  return false;
              })
              .findFirst();
      }