private boolean isGetter(ExecutableElement executable) {
      if (isJavaLangObject(executable.getEnclosingElement())) {
        return false;
      }

      String name = executable.getSimpleName().toString();
      boolean isGetterName = false;
      for (Naming naming: styles.scheme().get) {
        if (!naming.detect(name).isEmpty()) {
          isGetterName = true;
          break;
        }
      }

      if (!isGetterName) {
        return false;
      }

      // methods starting with "is" have to have boolean return type to be considered a valid JavaBean getter
      if (name.startsWith("is") && name.length() > "is".length() && !isBoolean(executable.getReturnType())) {
        return false;
      }

      return executable.getParameters().isEmpty()
              && executable.getReturnType().getKind() != TypeKind.VOID
              && executable.getModifiers().contains(Modifier.PUBLIC)
              && !executable.getModifiers().contains(Modifier.STATIC)
              && !executable.getModifiers().contains(Modifier.ABSTRACT);
    }
Checks if {@code executable} follows JavaBean convention for getter methods (like {@code getFoo})
value-processor/src/org/immutables/value/processor/meta/JavaBeanAttributesCollector.java