In `RecursivePackageProviderBackedTargetPatternResolver` et al. gracefully tolerate the situation of a package that contains errors but doesn't have a failure detail.
PiperOrigin-RevId: 575855757
Change-Id: Idda6b59be188cb7f15207c5a0a38d90890b3fc82
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 742c237..8be27f4 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -544,6 +544,24 @@
return containsErrors;
}
+ /**
+ * If {@code pkg.containsErrors()}, sends an errorful "package contains errors" {@link Event}
+ * (augmented with {@code pkg.getFailureDetail()}, if present) to the given {@link EventHandler}.
+ */
+ public static void maybeAddPackageContainsErrorsEventToHandler(
+ Package pkg, EventHandler eventHandler) {
+ if (pkg.containsErrors()) {
+ eventHandler.handle(
+ Event.error(
+ String.format(
+ "package contains errors: %s%s",
+ pkg.getNameFragment(),
+ pkg.getFailureDetail() != null
+ ? ": " + pkg.getFailureDetail().getMessage()
+ : "")));
+ }
+ }
+
void setContainsErrors() {
containsErrors = true;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
index f65ed6a..666202a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
@@ -143,14 +143,7 @@
rulesOnly ? FilteringPolicies.and(FilteringPolicies.RULES_ONLY, policy) : policy;
try {
Package pkg = getPackage(packageIdentifier);
- if (pkg.containsErrors()) {
- eventHandler.handle(
- Event.error(
- "package contains errors: "
- + pkg.getNameFragment()
- + ": "
- + pkg.getFailureDetail().getMessage()));
- }
+ Package.maybeAddPackageContainsErrorsEventToHandler(pkg, eventHandler);
return TargetPatternResolverUtil.resolvePackageTargets(pkg, actualPolicy);
} catch (NoSuchThingException e) {
String message =
@@ -172,14 +165,7 @@
ImmutableMap.Builder<PackageIdentifier, Collection<Target>> result = ImmutableMap.builder();
for (PackageIdentifier pkgId : pkgIds) {
Package pkg = pkgs.get(pkgId);
- if (pkg.containsErrors()) {
- eventHandler.handle(
- Event.error(
- "package contains errors: "
- + pkg.getNameFragment()
- + ": "
- + pkg.getFailureDetail().getMessage()));
- }
+ Package.maybeAddPackageContainsErrorsEventToHandler(pkg, eventHandler);
result.put(pkgId, TargetPatternResolverUtil.resolvePackageTargets(pkg, policy));
}
return result.buildOrThrow();