docs: Optional<ExecutableElement> findGetterMethodFor(Element field) {
          String getterName = getterNameFor(field);
          // 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 (getterName.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();
      }