code: public static FunctionalType functionalTypeAcceptedByMethod(
        DeclaredType type,
        String methodName,
        FunctionalType prototype,
        Elements elements,
        Types types) {
      return functionalTypesAcceptedByMethod(type, methodName, elements, types)
          .stream()
          .filter(functionalType -> isAssignable(functionalType, prototype, types))
          .findAny()
          .orElse(prototype);
    }
docs: Returns the functional type accepted by {@code methodName} on {@code type}, assignable to
  {@code prototype}, or {@code prototype} itself if no such method has been declared.
  
  <p>Used to allow the user to override the functional interface used on builder methods,
  e.g. to force boxing, or to use Guava types.