private static boolean isPossibleBuilderMethod(Element possibleBuilderMethod, boolean onValueType, ValueAttribute valueAttribute) {
      if (possibleBuilderMethod.getKind() == ElementKind.METHOD) {
        if (!valueAttribute.containingType.names().possibleAttributeBuilder(possibleBuilderMethod.getSimpleName())) {
          return false;
        }

        ExecutableElement candidateMethod = (ExecutableElement) possibleBuilderMethod;

        TypeKind kind = candidateMethod.getReturnType().getKind();

        return possibleBuilderMethod.getModifiers().containsAll(
            Arrays.asList(Modifier.STATIC, Modifier.PUBLIC))
            && candidateMethod.getParameters().isEmpty()
            && candidateMethod.getReturnType().getKind() == TypeKind.DECLARED
            && !kind.isPrimitive() && kind != TypeKind.ARRAY;

      } else if (!onValueType && possibleBuilderMethod.getKind() == ElementKind.CONSTRUCTOR) {
        if (!valueAttribute.containingType.names().newTokenInAttributeBuilder()) {
          return false;
        }

        ExecutableElement candidateConstructor = (ExecutableElement) possibleBuilderMethod;

        return candidateConstructor.getModifiers().contains(Modifier.PUBLIC)
            && candidateConstructor.getTypeParameters().isEmpty();
      }
      return false;
    }
Return true if the possibleBuilderMethod matches the
Style#attributeBuilder() and returns a class.

TODO: may need to make this return true if the return type is an interface too...

@param possibleBuilderMethod executableElement
value-processor/src/org/immutables/value/processor/meta/AttributeBuilderReflection.java