aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/java_tools
diff options
context:
space:
mode:
authorGravatar cushon <cushon@google.com>2018-07-26 19:48:59 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-26 19:50:31 -0700
commita4b28b5fc57d33a245e932eb4763c49a22e61115 (patch)
treede9c29b7a23787d45468d0324c5be35542771d14 /src/java_tools
parent1ac359743176e659e9c7472645e3142f3c44b9e8 (diff)
Perform strict deps enforcement on compilations with attribution errors
Reporting strict deps errors in addition to attribution errors is helpful particularly with code-generating annotation processors that may fail due to missing transitive deps. Currently those failures prevent add_dep suggestions from being emitted, making the problem harder to diagnose. The presence of other errors may prevent some SJD issues from being detected, but in theory should never lead to spurious SJD errors from being reported, so the additional errors should generally be helpful. PiperOrigin-RevId: 206261677
Diffstat (limited to 'src/java_tools')
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavaCompiler.java8
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/BlazeJavaCompilerPlugin.java5
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/DependencyModule.java10
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java6
4 files changed, 25 insertions, 4 deletions
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavaCompiler.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavaCompiler.java
index d5db1e5fc4..704cc262c0 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavaCompiler.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavaCompiler.java
@@ -82,12 +82,12 @@ public class BlazeJavaCompiler extends JavaCompiler {
public Env<AttrContext> attribute(Env<AttrContext> env) {
Env<AttrContext> result = super.attribute(env);
// don't run plugins if there were compilation errors
- if (errorCount() > 0) {
- return result;
- }
+ boolean errors = errorCount() > 0;
// Iterate over all plugins, calling their postAttribute methods
for (BlazeJavaCompilerPlugin plugin : plugins) {
- plugin.postAttribute(result);
+ if (!errors || plugin.runOnAttributionErrors()) {
+ plugin.postAttribute(result);
+ }
}
return result;
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/BlazeJavaCompilerPlugin.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/BlazeJavaCompilerPlugin.java
index b962434399..be61a1a21b 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/BlazeJavaCompilerPlugin.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/BlazeJavaCompilerPlugin.java
@@ -90,4 +90,9 @@ public abstract class BlazeJavaCompilerPlugin {
this.log = log;
this.compiler = compiler;
}
+
+ /** Returns true if the plugin should run on compilations with attribution errors. */
+ public boolean runOnAttributionErrors() {
+ return false;
+ }
}
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/DependencyModule.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/DependencyModule.java
index 6319df0c28..b7491a564c 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/DependencyModule.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/DependencyModule.java
@@ -72,6 +72,7 @@ public final class DependencyModule {
private final String targetLabel;
private final Path outputDepsProtoFile;
private final Set<Path> usedClasspath;
+ private boolean hasMissingTargets;
private final Map<Path, Dependency> explicitDependenciesMap;
private final Map<Path, Dependency> implicitDependenciesMap;
private final ImmutableSet<Path> platformJars;
@@ -223,6 +224,15 @@ public final class DependencyModule {
return strictClasspathMode;
}
+ void setHasMissingTargets() {
+ hasMissingTargets = true;
+ }
+
+ /** Returns true if any missing transitive dependencies were reported. */
+ public boolean hasMissingTargets() {
+ return hasMissingTargets;
+ }
+
/**
* Computes a reduced compile-time classpath from the union of direct dependencies and their
* dependencies, as listed in the associated .deps artifacts.
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 ca8d007065..60ec10c581 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
@@ -202,6 +202,7 @@ public final class StrictJavaDepsPlugin extends BlazeJavaCompilerPlugin {
.collect(toImmutableSet());
errWriter.print(
dependencyModule.getFixMessage().get(canonicalizedMissing, canonicalizedLabel));
+ dependencyModule.setHasMissingTargets();
}
}
@@ -527,4 +528,9 @@ public final class StrictJavaDepsPlugin extends BlazeJavaCompilerPlugin {
return true;
}
+
+ @Override
+ public boolean runOnAttributionErrors() {
+ return true;
+ }
}