private static boolean isPossibleBuildMethod(ValueAttribute attribute, Element possibleBuildMethod) {
      if (possibleBuildMethod.getKind() != ElementKind.METHOD) {
        return false;
      }

      if (!attribute.containingType.names().possibleAttributeBuilder(possibleBuildMethod.getSimpleName())) {
        return false;
      }

      Types typeUtils = attribute.containingType.constitution.protoclass()
          .environment()
          .processing()
          .getTypeUtils();

      ExecutableElement candidateBuildMethod = (ExecutableElement) possibleBuildMethod;
      return !candidateBuildMethod.getModifiers().contains(Modifier.STATIC)
          && candidateBuildMethod.getModifiers().contains(Modifier.PUBLIC)
          && candidateBuildMethod.getTypeParameters().isEmpty()
          && candidateBuildMethod.getReturnType().getKind() == TypeKind.DECLARED
          && typeUtils.isSameType(candidateBuildMethod.getReturnType(), attribute.containedTypeElement.asType());
    }
Returns true if there's a public way to build the value type with an instance no-arg method.

@param attribute value attribute to check.
@param possibleBuildMethod method which matches {@link StyleMirror#attributeBuilder()}
@return true if this is the possibleBuildMethod can build the value type.
value-processor/src/org/immutables/value/processor/meta/AttributeBuilderReflection.java