diff options
author | cushon <cushon@google.com> | 2018-07-26 19:48:59 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-26 19:50:31 -0700 |
commit | a4b28b5fc57d33a245e932eb4763c49a22e61115 (patch) | |
tree | de9c29b7a23787d45468d0324c5be35542771d14 /src/java_tools | |
parent | 1ac359743176e659e9c7472645e3142f3c44b9e8 (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')
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; + } } |