Audit the codebase for more bugs like the recently-fixed one with
EnvironmentBackedRecursivePackageProvider.

RELNOTES: None
PiperOrigin-RevId: 230570463
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
index d420573..1c4daf4 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
@@ -59,8 +59,13 @@
     this.env = env;
   }
 
-  // TODO(nharmata): Audit the rest of the codebase to determine if we should be calling this method
-  // in more places.
+  /**
+   * Whether any of the calls to {@link #getPackage}, {@link #getTarget}, {@link #bulkGetPackages},
+   * or {@link #getPackagesUnderDirectory} encountered a package in error.
+   *
+   * <p>The client of {@link EnvironmentBackedRecursivePackageProvider} may want to check this. See
+   * comments in {@link #getPackage} for details.
+   */
   boolean encounteredPackageErrors() {
     return encounteredPackageErrors.get();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
index 057c7a4..6112c72 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
@@ -142,6 +142,9 @@
    */
   static class DepsOfPatternPreparer extends TargetPatternResolver<Void> {
 
+    // Because PrepareDepsOfPatternFunction's only goal is to ensure the proper Skyframe nodes and
+    // edges are in the graph, we don't need to worry about
+    // EnvironmentBackedRecursivePackageProvider#encounteredPackageErrors.
     private final EnvironmentBackedRecursivePackageProvider packageProvider;
     private final Environment env;
     private final ImmutableList<Root> pkgRoots;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
index fa3db31..969d656a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
@@ -39,7 +39,6 @@
 import com.google.devtools.build.lib.pkgcache.LoadingPhaseCompleteEvent;
 import com.google.devtools.build.lib.pkgcache.ParsingFailedEvent;
 import com.google.devtools.build.lib.pkgcache.TargetParsingCompleteEvent;
-import com.google.devtools.build.lib.pkgcache.TargetProvider;
 import com.google.devtools.build.lib.pkgcache.TestFilter;
 import com.google.devtools.build.lib.skyframe.TargetPatternPhaseValue.TargetPatternPhaseKey;
 import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
@@ -348,10 +347,12 @@
         .filter(TargetUtils.tagFilter(options.getBuildTargetFilter()))
         .build();
     if (options.getCompileOneDependency()) {
-      TargetProvider targetProvider = new EnvironmentBackedRecursivePackageProvider(env);
+      EnvironmentBackedRecursivePackageProvider environmentBackedRecursivePackageProvider =
+          new EnvironmentBackedRecursivePackageProvider(env);
       try {
-        return new CompileOneDependencyTransformer(targetProvider)
-            .transformCompileOneDependency(env.getListener(), result);
+        result =
+            new CompileOneDependencyTransformer(environmentBackedRecursivePackageProvider)
+                .transformCompileOneDependency(env.getListener(), result);
       } catch (MissingDepException e) {
         return null;
       } catch (TargetParsingException e) {
@@ -364,6 +365,9 @@
         env.getListener().handle(Event.error(e.getMessage()));
         return ResolvedTargets.failed();
       }
+      if (environmentBackedRecursivePackageProvider.encounteredPackageErrors()) {
+        result = ResolvedTargets.<Target>builder().merge(result).setError().build();
+      }
     }
     return result;
   }