bumptech/glide · error · IllegalArgumentException
@GlideType methods must take a RequestBuilder object as thei
Error message
@GlideType methods must take a RequestBuilder object as their first and only parameter, but given multiple for: {} What it means
A @GlideType method must accept exactly one parameter — the RequestBuilder<T> it operates on. validateGlideTypeParameters throws when `executableElement.getParameters().size() != 1`, covering both the zero-arg and multi-arg cases (the message says 'multiple').
Source
Thrown at annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/GlideExtensionValidator.java:293
types.getDeclaredType(requestBuilderElement, glideTypeElement.asType());
return types.isSameType(returnType, expectedType);
}
private boolean isRequestBuilder(TypeMirror typeMirror) {
if (useLegacyTypeComparison) {
TypeMirror toCompare = processingEnvironment.getTypeUtils().erasure(typeMirror);
return toCompare.toString().equals("com.bumptech.glide.RequestBuilder");
}
Types types = processingEnvironment.getTypeUtils();
Elements elements = processingEnvironment.getElementUtils();
TypeMirror toCompare = types.erasure(typeMirror);
return Objects.equals(
types.asElement(toCompare), elements.getTypeElement("com.bumptech.glide.RequestBuilder"));
}
private void validateGlideTypeParameters(ExecutableElement executableElement) {
if (executableElement.getParameters().size() != 1) {
throw new IllegalArgumentException(
"@GlideType methods must take a"
+ " RequestBuilder object as their first and only parameter, but given multiple for: "
+ getQualifiedMethodName(executableElement));
}
VariableElement first = executableElement.getParameters().get(0);
TypeMirror argumentType = first.asType();
if (useLegacyTypeComparison
? !argumentType.toString().startsWith("com.bumptech.glide.RequestBuilder")
: !isRequestBuilder(argumentType)) {
throw new IllegalArgumentException(
"@GlideType methods must take a"
+ " RequestBuilder object as their first and only parameter, but given: "
+ argumentType
+ " for: "
+ getQualifiedMethodName(executableElement));
}
}View on GitHub (pinned to eb14a895d8)
Solutions
- Give the @GlideType method exactly one parameter: the RequestBuilder<T> matching the annotation value.
- If you need extra inputs, encode them inside the method body (resolving from Application/static state) rather than as parameters.
Example fix
// before
@GlideType(GifDrawable.class)
public static RequestBuilder<GifDrawable> asGif(RequestBuilder<GifDrawable> requestBuilder, boolean decodeAll) {
...
}
// after
@GlideType(GifDrawable.class)
public static RequestBuilder<GifDrawable> asGif(RequestBuilder<GifDrawable> requestBuilder) {
...
} Defensive patterns
Strategy: validation
Validate before calling
@Test void glideTypeMethodsHaveExactlyOneParam() throws Exception {
for (java.lang.reflect.Method m : MyGlideExtension.class.getDeclaredMethods()) {
if (m.isAnnotationPresent(com.bumptech.glide.annotation.GlideType.class)) {
assertEquals("@GlideType must take exactly one param: " + m, 1, m.getParameterCount());
}
}
} Prevention
- Give @GlideType methods exactly one parameter: the RequestBuilder<T>.
- Do not add Context/options parameters — resolve extras inside the method body.
When it happens
Trigger: GlideExtensionValidator.validateGlideTypeParameters: `if (executableElement.getParameters().size() != 1) throw`. Hit by a no-arg `@GlideType(T.class) static RequestBuilder<T> asX()` or a method taking additional parameters beyond the RequestBuilder.
Common situations: Adding extra configuration parameters (Context, options) to a @GlideType method; converting a factory method and forgetting the RequestBuilder argument; mixing @GlideOption semantics (which allow extra trailing args) into @GlideType.
Related errors
- @GlideType methods must take a RequestBuilder object as thei
- @GlideOption methods must take a BaseRequestOptions<?> objec
- @GlideOption methods must take a BaseRequestOptions<?> objec
- @GlideType methods should return a RequestBuilder<{}> object
- Constructor for {} accepts too many parameters, it should ac
AI-assisted analysis of bumptech/glide@eb14a895d8 (2026-08-14).
Data as JSON: /api/errors/f515fde95238a180.
Report an issue: GitHub.