Glide: java.lang.IllegalArgumentException: @GlideOption methods must take a BaseRequestOptions<?> object as their first parameter

Created on 6 Mar 2019  ·  5Comments  ·  Source: bumptech/glide

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
            }
        }
    }
}

Most helpful comment

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

All 5 comments

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 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: ed20643#diff-dbbddb3f467e3645dee8a28f603cc330

4030 this issue arised, when I'm trying to use projection-type in kotlin. ? 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.😟

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Tryking picture Tryking  ·  3Comments

PatrickMA picture PatrickMA  ·  3Comments

AndroidJohnsonWang picture AndroidJohnsonWang  ·  3Comments

piedpiperlol picture piedpiperlol  ·  3Comments

sant527 picture sant527  ·  3Comments