From 56368d03f3c1688ca853794cbc26dc413f80d4e2 Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Wed, 13 Sep 2017 07:54:13 -0700 Subject: [PATCH] Avoid varargs warnings using @SafeVarags in generated code. The annotation can only be added to final methods, so we have to use @SuppessWarnings for RequestOptions instead. As a result callers of transforms() will have to suppress the warning on their end as well. Fixes #2383. --- .../compiler/RequestBuilderGenerator.java | 13 ++++++++++++- .../compiler/RequestOptionsGenerator.java | 14 +++++++++++--- .../com/bumptech/glide/request/RequestOptions.java | 2 +- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestBuilderGenerator.java b/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestBuilderGenerator.java index aa2618b83..1d00e6b5f 100644 --- a/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestBuilderGenerator.java +++ b/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestBuilderGenerator.java @@ -287,7 +287,18 @@ final class RequestBuilderGenerator { return MethodSpec.methodBuilder(requestOptionMethod.name) .addJavadoc( processorUtil.generateSeeMethodJavadoc(requestOptionsClassName, requestOptionMethod)) - .addModifiers(Modifier.PUBLIC) + .addModifiers(Modifier.PUBLIC, Modifier.FINAL) + .varargs(requestOptionMethod.varargs) + .addAnnotations( + FluentIterable.from(requestOptionMethod.annotations) + .filter(new Predicate() { + @Override + public boolean apply(AnnotationSpec input) { + return !input.type.equals(TypeName.get(Override.class)); + } + }) + .toList() + ) .addTypeVariables(requestOptionMethod.typeVariables) .addParameters(requestOptionMethod.parameters) .returns(generatedRequestBuilderOfTranscodeType) diff --git a/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java b/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java index 8099489d4..bf84712fd 100644 --- a/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java +++ b/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java @@ -190,8 +190,9 @@ final class RequestOptionsGenerator { } private MethodSpec generateRequestOptionOverride(ExecutableElement methodToOverride) { - return MethodSpec.overriding(methodToOverride) + MethodSpec.Builder result = MethodSpec.overriding(methodToOverride) .returns(glideOptionsName) + .addModifiers(Modifier.FINAL) .addCode(CodeBlock.builder() .add("return ($T) super.$N(", glideOptionsName, methodToOverride.getSimpleName()) .add(FluentIterable.from(methodToOverride.getParameters()) @@ -203,8 +204,15 @@ final class RequestOptionsGenerator { }) .join(Joiner.on(", "))) .add(");\n") - .build()) - .build(); + .build()); + + if (methodToOverride.getSimpleName().toString().equals("transforms")) { + result.addAnnotation( + AnnotationSpec.builder(SafeVarargs.class) + .build()); + } + + return result.build(); } private List generateMethodsForRequestOptionsExtension( diff --git a/library/src/main/java/com/bumptech/glide/request/RequestOptions.java b/library/src/main/java/com/bumptech/glide/request/RequestOptions.java index d21fbada2..dd565fa75 100644 --- a/library/src/main/java/com/bumptech/glide/request/RequestOptions.java +++ b/library/src/main/java/com/bumptech/glide/request/RequestOptions.java @@ -1005,7 +1005,7 @@ public class RequestOptions implements Cloneable { * @see #optionalTransform(Transformation) * @see #optionalTransform(Class, Transformation) */ - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "varargs"}) public RequestOptions transforms(@NonNull Transformation... transformations) { if (isAutoCloneEnabled) { return clone().transforms(transformations); -- GitLab