@Target(value=METHOD) @Retention(value=CLASS) public @interface GlideOption
GlideExtension
annotated classes that extend
com.bumptech.glide.request.RequestOptions
.
All annotated methods will be added to a single
com.bumptech.glide.request.RequestOptions
implementation generated per application.
Overlapping method names in different extensions may cause errors at compile time.
Static equivalents of annotated methods will also be generated.
Methods with this annotation will only be found if they belong to classes annotated with
GlideExtension
.
The preferred way of writing extension methods returns the provided
com.bumptech.glide.request.RequestOptions
object with one or more methods called on it.
You must not return a newly instantiated com.bumptech.glide.request.RequestOptions
object
as doing so my cause a ClassCastException
at runtime. Calling either
com.bumptech.glide.request.RequestOptions#autoClone()
or
com.bumptech.glide.request.RequestOptions#lock()
is safe, but unnecessary and should
typically be avoided. The preferred style looks like:
{@link @}GlideExtension
public class MyExtension {
private MyExtension() {}
{@literal @}GlideOption
public static RequestOptions myOption(RequestOptions options) {
return options
.optionOne()
.optionTwo();
}
}
The deprecated way of writing extension methods is simply a static void method. The
com.bumptech.glide.request.RequestOptions
object is cloned before it is passed to this
method to avoid an option method returning a new instance, but using methods like
com.bumptech.glide.request.RequestOptions#clone()
or
com.bumptech.glide.request.RequestOptions#autoClone()
can result in options applied in
the method being silently ignored. Prefer the new style whenever possible.
{@literal @}GlideExtension
public class MyExtension {
private MyExtension() {}
// Deprecated! Use the new style of GlideOption extensions instead.
{@literal @}GlideOption
public static void myOption(RequestOptions options) {
options
.optionOne()
.optionTwo();
}
}
Modifier and Type | Fields and Description |
---|---|
static int |
OVERRIDE_EXTEND
Expects to call super and then add additional functionality to an overridden method.
|
static int |
OVERRIDE_NONE
Does not intend to override a method in a super class.
|
static int |
OVERRIDE_REPLACE
Expects to not call super and replace an overridden method.
|
Modifier and Type | Optional Element and Description |
---|---|
boolean |
memoizeStaticMethod
true to indicate that it's safe to statically memoize the result of this method using
com.bumptech.glide.request.RequestOptions#autoClone() . |
int |
override
Determines how and whether a generated method should extend a method from it's parent.
|
boolean |
skipStaticMethod
true to prevent a static builder method from being generated. |
String |
staticMethodName
Sets the name for the generated static version of this method.
|
public static final int OVERRIDE_NONE
public static final int OVERRIDE_EXTEND
public static final int OVERRIDE_REPLACE
public abstract int override
Must be one of OVERRIDE_NONE
, OVERRIDE_EXTEND
, OVERRIDE_REPLACE
.
The extended method is determined by String and argument matching against methods in the
extended class. If OVERRIDE_NONE
is used and the method and arguments match a method
in the extended class, a compile time error will result. Similarly if any other override type
is used and no method/arguments in the extended class match, a compile time error will result.
public abstract String staticMethodName
If this value is not set, the static method name is just the original method name with "Of" appended.
public abstract boolean memoizeStaticMethod
true
to indicate that it's safe to statically memoize the result of this method using
com.bumptech.glide.request.RequestOptions#autoClone()
.
This method should only be used for no-arg methods where there's only a single possible value.
Memoization can save object allocations for frequently used options.
public abstract boolean skipStaticMethod
true
to prevent a static builder method from being generated.
By default static methods are generated for all methods annotated with
GlideOption
. These static factory methods allow for a cleaner API when used
with com.bumptech.glide.RequestBuilder#apply
. The static factory method by default
simply creates a new com.bumptech.glide.request.RequestOptions
object, calls the
instance version of the method on it and returns it. For example:
public static GlideOptions noAnimation() {
return new GlideOptions().dontAnimate();
}
memoizeStaticMethod()
,
staticMethodName()