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
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 d5db1e5..704cc26 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 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 b962434..be61a1a 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 @@
     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 6319df0..b7491a5 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 @@
   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 @@
     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 ca8d007..60ec10c 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 @@
               .collect(toImmutableSet());
       errWriter.print(
           dependencyModule.getFixMessage().get(canonicalizedMissing, canonicalizedLabel));
+      dependencyModule.setHasMissingTargets();
     }
   }
 
@@ -527,4 +528,9 @@
 
     return true;
   }
+
+  @Override
+  public boolean runOnAttributionErrors() {
+    return true;
+  }
 }