diff options
author | cushon <cushon@google.com> | 2018-01-05 21:02:05 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-01-05 21:04:15 -0800 |
commit | 8ab32fcb0affb45a9c299cac580f1251fb6a16bc (patch) | |
tree | 2063ca299277005b820eaca29e30f25db2a6ca8e /src/java_tools/buildjar | |
parent | 04e7fd80cf8df79b316d1c858ac33e9db07901b9 (diff) |
Make SJD @Generated handling compatible with javax.annotation.processing.Generated
PiperOrigin-RevId: 181012373
Diffstat (limited to 'src/java_tools/buildjar')
-rw-r--r-- | src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java index 3c5e3a0f55..ea3c15685b 100644 --- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java +++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java @@ -19,6 +19,7 @@ import static com.google.devtools.build.buildjar.javac.plugins.dependency.Depend import com.google.auto.value.AutoValue; import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Ordering; import com.google.devtools.build.buildjar.JarOwner; import com.google.devtools.build.buildjar.javac.plugins.BlazeJavaCompilerPlugin; @@ -38,6 +39,7 @@ import com.sun.tools.javac.tree.TreeScanner; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.Log.WriterKind; +import com.sun.tools.javac.util.Name; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; @@ -50,7 +52,8 @@ import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; -import javax.annotation.Generated; +import javax.lang.model.element.AnnotationValue; +import javax.lang.model.util.SimpleAnnotationValueVisitor8; import javax.tools.JavaFileObject; /** @@ -395,11 +398,7 @@ public final class StrictJavaDepsPlugin extends BlazeJavaCompilerPlugin { if (sym == null) { return ProcessorDependencyMode.DEFAULT; } - Generated generated = sym.getAnnotation(Generated.class); - if (generated == null) { - return ProcessorDependencyMode.DEFAULT; - } - for (String value : generated.value()) { + for (String value : getGeneratedBy(sym)) { // Relax strict deps for dagger-generated code (b/17979436). if (value.startsWith(DAGGER_PROCESSOR_PREFIX)) { return ProcessorDependencyMode.EXEMPT_NORECORD; @@ -411,6 +410,44 @@ public final class StrictJavaDepsPlugin extends BlazeJavaCompilerPlugin { return ProcessorDependencyMode.DEFAULT; } + private static ImmutableSet<String> getGeneratedBy(Symbol symbol) { + ImmutableSet.Builder<String> suppressions = ImmutableSet.builder(); + symbol + .getRawAttributes() + .stream() + .filter( + a -> { + Name name = a.type.tsym.getQualifiedName(); + return name.contentEquals("javax.annotation.Generated") + || name.contentEquals("javax.annotation.processing.Generated"); + }) + .flatMap( + a -> + a.getElementValues() + .entrySet() + .stream() + .filter(e -> e.getKey().getSimpleName().contentEquals("value")) + .map(e -> e.getValue())) + .forEachOrdered( + a -> + a.accept( + new SimpleAnnotationValueVisitor8<Void, Void>() { + @Override + public Void visitString(String s, Void aVoid) { + suppressions.add(s); + return super.visitString(s, aVoid); + } + + @Override + public Void visitArray(List<? extends AnnotationValue> vals, Void aVoid) { + vals.stream().forEachOrdered(v -> v.accept(this, null)); + return super.visitArray(vals, aVoid); + } + }, + null)); + return suppressions.build(); + } + /** Replace the given target with a configured replacement. Package private for testing. */ static String remapTarget(String target) { String replacement = targetMap.getProperty(target); |