aboutsummaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorronshapiro <ronshapiro@google.com>2017-12-11 10:19:46 -0800
committerRon Shapiro <shapiro.rd@gmail.com>2017-12-11 16:55:53 -0500
commit50f0db84baab72983d670234edf4ace81b2bdd3c (patch)
treeefc8d82d26b9d4483aa9527a5b41ebfe68a86064 /service
parentc02f8396f410b6f89872bd23e2adb50e0832528a (diff)
downloadauto-50f0db84baab72983d670234edf4ace81b2bdd3c.tar.gz
Accept both a list and single Class value for @AutoService
RELNOTES=n/a ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=178635209
Diffstat (limited to 'service')
-rw-r--r--service/src/main/java/com/google/auto/service/processor/AutoServiceProcessor.java28
1 files changed, 22 insertions, 6 deletions
diff --git a/service/src/main/java/com/google/auto/service/processor/AutoServiceProcessor.java b/service/src/main/java/com/google/auto/service/processor/AutoServiceProcessor.java
index 71c14174..4bd7ceca 100644
--- a/service/src/main/java/com/google/auto/service/processor/AutoServiceProcessor.java
+++ b/service/src/main/java/com/google/auto/service/processor/AutoServiceProcessor.java
@@ -45,6 +45,8 @@ import javax.lang.model.element.Element;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.SimpleAnnotationValueVisitor8;
import javax.lang.model.util.Types;
import javax.tools.Diagnostic.Kind;
import javax.tools.FileObject;
@@ -254,12 +256,26 @@ public class AutoServiceProcessor extends AbstractProcessor {
* Returns the contents of a {@code Class[]}-typed "value" field in a given {@code annotationMirror}.
*/
private ImmutableSet<DeclaredType> getValueFieldOfClasses(AnnotationMirror annotationMirror) {
- @SuppressWarnings("unchecked")
- List<AnnotationValue> values =
- ((List<AnnotationValue>) getAnnotationValue(annotationMirror, "value").getValue());
- // TODO(ronshapiro): class literals may not always be declared types, i.e. int.class,
- // int[].class
- return values.stream().map(value -> (DeclaredType) value.getValue()).collect(toImmutableSet());
+ return getAnnotationValue(annotationMirror, "value")
+ .accept(
+ new SimpleAnnotationValueVisitor8<ImmutableSet<DeclaredType>, Void>() {
+ @Override
+ public ImmutableSet<DeclaredType> visitType(TypeMirror typeMirror, Void v) {
+ // TODO(ronshapiro): class literals may not always be declared types, i.e. int.class,
+ // int[].class
+ return ImmutableSet.of(MoreTypes.asDeclared(typeMirror));
+ }
+
+ @Override
+ public ImmutableSet<DeclaredType> visitArray(
+ List<? extends AnnotationValue> values, Void v) {
+ return values
+ .stream()
+ .flatMap(value -> value.accept(this, null).stream())
+ .collect(toImmutableSet());
+ }
+ },
+ null);
}
private void log(String msg) {