glide version 4.9.0
compile exception
An exception occurred: java.lang.IllegalArgumentException: @GlideOption methods must take a BaseRequestOptions<?> object as their first parameter, but the first parameter in xxx.BlurGlideExtension#blur(com.bumptech.glide.request.RequestOptions,android.content.Context) is com.bumptech.glide.request.RequestOptions
at com.bumptech.glide.annotation.compiler.GlideExtensionValidator.validateGlideOptionParameters(GlideExtensionValidator.java:119)
at com.bumptech.glide.annotation.compiler.GlideExtensionValidator.validateGlideOption(GlideExtensionValidator.java:92)
at com.bumptech.glide.annotation.compiler.GlideExtensionValidator.validateExtension(GlideExtensionValidator.java:55)
at com.bumptech.glide.annotation.compiler.ExtensionProcessor.processExtensions(ExtensionProcessor.java:34)
at com.bumptech.glide.annotation.compiler.GlideAnnotationProcessor.process(GlideAnnotationProcessor.java:120)
RequestOptions extend BaseRequestOptions
I check the validate function code
private static void validateGlideOptionParameters(ExecutableElement executableElement) {
if (executableElement.getParameters().isEmpty()) {
throw new IllegalArgumentException("@GlideOption methods must take a "
+ "BaseRequestOptions<?> object as their first parameter, but "
+ getQualifiedMethodName(executableElement) + " has none");
}
VariableElement first = executableElement.getParameters().get(0);
TypeMirror expected = first.asType();
if (!isBaseRequestOptions(expected)) {
throw new IllegalArgumentException("@GlideOption methods must take a"
+ " BaseRequestOptions<?> object as their first parameter, but the first parameter in "
+ getQualifiedMethodName(executableElement) + " is " + expected);
}
}
private static boolean isBaseRequestOptions(TypeMirror typeMirror) {
return typeMirror.toString().equals("com.bumptech.glide.request.BaseRequestOptions<?>");
}
is the isBaseRequestOptions function correct ?
my extension code
@GlideExtension
class BlurGlideExtension private constructor() {
companion object {
@JvmStatic
@GlideOption
fun blur(options: RequestOptions, context: Context): RequestOptions {
return blur(options, context, 25F)
}
@JvmStatic
@GlideOption
fun blur(options: RequestOptions, context: Context, radius: Float): RequestOptions {
return try {
options.transform(BlurTransformation(context, radius))
} catch (e: Exception) {
options
} catch (e: Error) {
options
}
}
}
}
Hi @sjudd , can you help me with this issue ? I was upgrade from glide version 4.8.0 to 4.9.0 and get this compile error. it is work perfect on 4.8.0 , I just upgrade version to 4.9.0 and nothing to do with it. May I know is it 4.9.0 config changed and need my extension code edit.
In your extension you need to change RequestOptions to BaseRequestOptions<?>:
@GlideExtension
class BlurGlideExtension private constructor() {
companion object {
@JvmStatic
@GlideOption
fun blur(options: BaseRequestOptions<?>, context: Context): BaseRequestOptions<?> {
return blur(options, context, 25F)
}
@JvmStatic
@GlideOption
fun blur(options: BaseRequestOptions<?>, context: Context, radius: Float): BaseRequestOptions<?> {
return try {
options.transform(BlurTransformation(context, radius))
} catch (e: Exception) {
options
} catch (e: Error) {
options
}
}
}
}
For an example, see FlickrGlideExtension: https://github.com/bumptech/glide/commit/ed20643fb94d4e17f4cdb3699a6d83621408dd34#diff-dbbddb3f467e3645dee8a28f603cc330
thanks for your reply.
In your extension you need to change
RequestOptionstoBaseRequestOptions<?>:@GlideExtension class BlurGlideExtension private constructor() { companion object { @JvmStatic @GlideOption fun blur(options: BaseRequestOptions<?>, context: Context): BaseRequestOptions<?> { return blur(options, context, 25F) } @JvmStatic @GlideOption fun blur(options: BaseRequestOptions<?>, context: Context, radius: Float): BaseRequestOptions<?> { return try { options.transform(BlurTransformation(context, radius)) } catch (e: Exception) { options } catch (e: Error) { options } } } }For an example, see FlickrGlideExtension: ed20643#diff-dbbddb3f467e3645dee8a28f603cc330
? unfortunately doesn't works in kotlin@sjudd
@JeckChou
I think, you are right, isBaseRequestOptions function needs improvement, only judging whether
“com.bumptech.glide.request.BaseRequestOptions>” is equals was not a good logic, and i used java instead of kotlin.😟
Most helpful comment
In your extension you need to change
RequestOptionstoBaseRequestOptions<?>:For an example, see FlickrGlideExtension: https://github.com/bumptech/glide/commit/ed20643fb94d4e17f4cdb3699a6d83621408dd34#diff-dbbddb3f467e3645dee8a28f603cc330