diff options
author | ronshapiro <ronshapiro@google.com> | 2017-12-11 10:19:46 -0800 |
---|---|---|
committer | Ron Shapiro <shapiro.rd@gmail.com> | 2017-12-11 16:55:53 -0500 |
commit | 50f0db84baab72983d670234edf4ace81b2bdd3c (patch) | |
tree | efc8d82d26b9d4483aa9527a5b41ebfe68a86064 /service | |
parent | c02f8396f410b6f89872bd23e2adb50e0832528a (diff) | |
download | auto-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.java | 28 |
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) { |