code: private boolean methodIsAbstractGetter(TypeElement valueType, ExecutableElement method) {
      Set<Modifier> modifiers = method.getModifiers();
      if (!modifiers.contains(Modifier.ABSTRACT)) {
        return false;
      }
      boolean declaredOnValueType = method.getEnclosingElement().equals(valueType);
      TypeMirror returnType = getReturnType(valueType, method, types);
      if (returnType.getKind() == TypeKind.VOID || !method.getParameters().isEmpty()) {
        if (declaredOnValueType) {
          messager.printMessage(
              ERROR,
              "Only getter methods may be declared abstract on FreeBuilder types",
              method);
        } else {
          printNoImplementationMessage(valueType, method);
        }
        return false;
      }
      return true;
    }
docs: Verifies {@code method} is an abstract getter. Any deviations will be logged as an error.