aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/java_tools/buildjar
diff options
context:
space:
mode:
authorGravatar cushon <cushon@google.com>2018-01-05 21:02:05 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-05 21:04:15 -0800
commit8ab32fcb0affb45a9c299cac580f1251fb6a16bc (patch)
tree2063ca299277005b820eaca29e30f25db2a6ca8e /src/java_tools/buildjar
parent04e7fd80cf8df79b316d1c858ac33e9db07901b9 (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.java49
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);