Restrict the type of exception that can be thrown during target pattern parsing (and general target-oriented graph visitation) to QueryException.
In practice, this is the only exception that can be thrown, but that fact is extremely non-obvious. We make it obvious by restricting the type of Exception that can be thrown to QueryExceptionMarkerInterface, an interface that is only non-trivially implemented by QueryException.
PiperOrigin-RevId: 410355114
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
index 30cc36f..325bf53 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -286,6 +286,8 @@
"//src/main/java/com/google/devtools/build/lib/causes",
"//src/main/java/com/google/devtools/build/lib/clock",
"//src/main/java/com/google/devtools/build/lib/cmdline",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:batch_callback",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:query_exception_marker_interface",
"//src/main/java/com/google/devtools/build/lib/collect/compacthashset",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/concurrent",
@@ -1502,6 +1504,7 @@
":package_value",
":root_package_extractor",
"//src/main/java/com/google/devtools/build/lib/cmdline",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:batch_callback",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/io:inconsistent_filesystem_exception",
@@ -1685,6 +1688,7 @@
],
deps = [
"//src/main/java/com/google/devtools/build/lib/cmdline",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:batch_callback",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//third_party:guava",
"//third_party:jsr305",
@@ -2096,6 +2100,8 @@
deps = [
":package_identifier_batching_callback",
"//src/main/java/com/google/devtools/build/lib/cmdline",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:batch_callback",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:query_exception_marker_interface",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/packages",
@@ -2177,7 +2183,7 @@
":recursive_pkg_value",
":root_package_extractor",
"//src/main/java/com/google/devtools/build/lib/cmdline",
- "//src/main/java/com/google/devtools/build/lib/concurrent",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:batch_callback",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/query2/engine",
"//src/main/java/com/google/devtools/build/lib/vfs",
@@ -2225,7 +2231,7 @@
srcs = ["RootPackageExtractor.java"],
deps = [
"//src/main/java/com/google/devtools/build/lib/cmdline",
- "//src/main/java/com/google/devtools/build/lib/concurrent",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:batch_callback",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/query2/engine",
"//src/main/java/com/google/devtools/build/lib/vfs",
@@ -2656,7 +2662,9 @@
":recursive_package_provider_backed_target_pattern_resolver",
":root_package_extractor",
"//src/main/java/com/google/devtools/build/lib/cmdline",
- "//src/main/java/com/google/devtools/build/lib/concurrent",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:batch_callback",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:parallel_visitor",
+ "//src/main/java/com/google/devtools/build/lib/cmdline:query_exception_marker_interface",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
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 9c24dfb..cd3dcd3 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
@@ -18,10 +18,9 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.cmdline.BatchCallback.SafeBatchCallback;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.concurrent.BatchCallback;
-import com.google.devtools.build.lib.concurrent.ParallelVisitor.UnusedException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.io.InconsistentFilesystemException;
@@ -142,7 +141,7 @@
@Override
public void streamPackagesUnderDirectory(
- BatchCallback<PackageIdentifier, UnusedException> results,
+ SafeBatchCallback<PackageIdentifier> results,
ExtendedEventHandler eventHandler,
RepositoryName repository,
PathFragment directory,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
index fec12ce..0f9fdc1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
@@ -22,12 +22,11 @@
import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;
import com.google.common.flogger.GoogleLogger;
+import com.google.devtools.build.lib.cmdline.BatchCallback.SafeBatchCallback;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.cmdline.TargetPattern;
import com.google.devtools.build.lib.cmdline.TargetPattern.TargetsBelowDirectory;
-import com.google.devtools.build.lib.concurrent.BatchCallback;
-import com.google.devtools.build.lib.concurrent.ParallelVisitor.UnusedException;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
@@ -59,8 +58,8 @@
* Helper interface for clients of GraphBackedRecursivePackageProvider to indicate what universe
* packages should be resolved in.
*
- * <p>Client can either specify a fixed set of target patterns (using {@link #of()}), or specify
- * that all targets are valid (using {@link #all()}).
+ * <p>Client can either specify a fixed set of target patterns (using {@link #of}), or specify
+ * that all targets are valid (using {@link #all}).
*/
public interface UniverseTargetPattern {
ImmutableList<TargetPattern> patterns();
@@ -240,7 +239,7 @@
@Override
public void streamPackagesUnderDirectory(
- BatchCallback<PackageIdentifier, UnusedException> results,
+ SafeBatchCallback<PackageIdentifier> results,
ExtendedEventHandler eventHandler,
RepositoryName repository,
PathFragment directory,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageIdentifierBatchingCallback.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageIdentifierBatchingCallback.java
index daaac76..2bf7e9f1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageIdentifierBatchingCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageIdentifierBatchingCallback.java
@@ -13,9 +13,8 @@
// limitations under the License.
package com.google.devtools.build.lib.skyframe;
+import com.google.devtools.build.lib.cmdline.BatchCallback.SafeBatchCallback;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.concurrent.BatchCallback;
-import com.google.devtools.build.lib.concurrent.ParallelVisitor.UnusedException;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
/**
@@ -28,12 +27,12 @@
*/
@ThreadSafe
public interface PackageIdentifierBatchingCallback
- extends BatchCallback<PackageIdentifier, UnusedException>, AutoCloseable {
+ extends SafeBatchCallback<PackageIdentifier>, AutoCloseable {
void close() throws InterruptedException;
/** Factory for {@link PackageIdentifierBatchingCallback}. */
interface Factory {
PackageIdentifierBatchingCallback create(
- BatchCallback<PackageIdentifier, UnusedException> batchResults, int maxBatchSize);
+ SafeBatchCallback<PackageIdentifier> batchResults, int maxBatchSize);
}
}
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 b72f383..be7986d 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
@@ -16,15 +16,16 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.cmdline.BatchCallback;
+import com.google.devtools.build.lib.cmdline.BatchCallback.NullCallback;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.devtools.build.lib.cmdline.QueryExceptionMarkerInterface;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.cmdline.TargetPattern;
import com.google.devtools.build.lib.cmdline.TargetPatternResolver;
-import com.google.devtools.build.lib.concurrent.BatchCallback;
-import com.google.devtools.build.lib.concurrent.BatchCallback.NullCallback;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
@@ -116,7 +117,7 @@
() -> repositoryIgnoredPatterns,
ImmutableSet.of(),
NullCallback.instance(),
- RuntimeException.class);
+ QueryExceptionMarkerInterface.MarkerRuntimeException.class);
} catch (TargetParsingException e) {
throw new PrepareDepsOfPatternFunctionException(e);
} catch (MissingDepException e) {
@@ -249,7 +250,7 @@
}
@Override
- public <E extends Exception> void findTargetsBeneathDirectory(
+ public <E extends Exception & QueryExceptionMarkerInterface> void findTargetsBeneathDirectory(
RepositoryName repository,
String originalPattern,
String directory,
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 9e52de4..e9abf1b 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
@@ -24,15 +24,16 @@
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
+import com.google.devtools.build.lib.cmdline.BatchCallback;
+import com.google.devtools.build.lib.cmdline.BatchCallback.SafeBatchCallback;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.devtools.build.lib.cmdline.QueryExceptionMarkerInterface;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.cmdline.TargetPatternResolver;
-import com.google.devtools.build.lib.concurrent.BatchCallback;
import com.google.devtools.build.lib.concurrent.MultisetSemaphore;
-import com.google.devtools.build.lib.concurrent.ParallelVisitor.UnusedException;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
@@ -178,7 +179,7 @@
}
@Override
- public <E extends Exception> void findTargetsBeneathDirectory(
+ public <E extends Exception & QueryExceptionMarkerInterface> void findTargetsBeneathDirectory(
final RepositoryName repository,
final String originalPattern,
String directory,
@@ -206,16 +207,17 @@
}
@Override
- public <E extends Exception> ListenableFuture<Void> findTargetsBeneathDirectoryAsync(
- RepositoryName repository,
- String originalPattern,
- String directory,
- boolean rulesOnly,
- ImmutableSet<PathFragment> forbiddenSubdirectories,
- ImmutableSet<PathFragment> excludedSubdirectories,
- BatchCallback<Target, E> callback,
- Class<E> exceptionClass,
- ListeningExecutorService executor) {
+ public <E extends Exception & QueryExceptionMarkerInterface>
+ ListenableFuture<Void> findTargetsBeneathDirectoryAsync(
+ RepositoryName repository,
+ String originalPattern,
+ String directory,
+ boolean rulesOnly,
+ ImmutableSet<PathFragment> forbiddenSubdirectories,
+ ImmutableSet<PathFragment> excludedSubdirectories,
+ BatchCallback<Target, E> callback,
+ Class<E> exceptionClass,
+ ListeningExecutorService executor) {
return findTargetsBeneathDirectoryAsyncImpl(
repository,
originalPattern,
@@ -227,20 +229,21 @@
executor);
}
- private <E extends Exception> ListenableFuture<Void> findTargetsBeneathDirectoryAsyncImpl(
- RepositoryName repository,
- String pattern,
- String directory,
- boolean rulesOnly,
- ImmutableSet<PathFragment> forbiddenSubdirectories,
- ImmutableSet<PathFragment> excludedSubdirectories,
- BatchCallback<Target, E> callback,
- ListeningExecutorService executor) {
+ private <E extends Exception & QueryExceptionMarkerInterface>
+ ListenableFuture<Void> findTargetsBeneathDirectoryAsyncImpl(
+ RepositoryName repository,
+ String pattern,
+ String directory,
+ boolean rulesOnly,
+ ImmutableSet<PathFragment> forbiddenSubdirectories,
+ ImmutableSet<PathFragment> excludedSubdirectories,
+ BatchCallback<Target, E> callback,
+ ListeningExecutorService executor) {
FilteringPolicy actualPolicy =
rulesOnly ? FilteringPolicies.and(FilteringPolicies.RULES_ONLY, policy) : policy;
ArrayList<ListenableFuture<Void>> futures = new ArrayList<>();
- BatchCallback<PackageIdentifier, UnusedException> getPackageTargetsCallback =
+ SafeBatchCallback<PackageIdentifier> getPackageTargetsCallback =
(pkgIdBatch) ->
futures.add(
executor.submit(
@@ -278,7 +281,8 @@
* Task to get all matching targets in the given packages, filter them, and pass them to the
* target batch callback.
*/
- private class GetTargetsInPackagesTask<E extends Exception> implements Callable<Void> {
+ private class GetTargetsInPackagesTask<E extends Exception & QueryExceptionMarkerInterface>
+ implements Callable<Void> {
private final Iterable<PackageIdentifier> packageIdentifiers;
private final String originalPattern;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValueRootPackageExtractor.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValueRootPackageExtractor.java
index bc0e7b5..47b27ea 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValueRootPackageExtractor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValueRootPackageExtractor.java
@@ -16,10 +16,9 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.cmdline.BatchCallback.SafeBatchCallback;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.concurrent.BatchCallback;
-import com.google.devtools.build.lib.concurrent.ParallelVisitor.UnusedException;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.query2.engine.QueryException;
import com.google.devtools.build.lib.server.FailureDetails.Query.Code;
@@ -34,7 +33,7 @@
@Override
public void streamPackagesFromRoots(
- BatchCallback<PackageIdentifier, UnusedException> results,
+ SafeBatchCallback<PackageIdentifier> results,
WalkableGraph graph,
List<Root> roots,
ExtendedEventHandler eventHandler,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RootPackageExtractor.java b/src/main/java/com/google/devtools/build/lib/skyframe/RootPackageExtractor.java
index d77e938..758546a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RootPackageExtractor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RootPackageExtractor.java
@@ -14,10 +14,9 @@
package com.google.devtools.build.lib.skyframe;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.cmdline.BatchCallback.SafeBatchCallback;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.concurrent.BatchCallback;
-import com.google.devtools.build.lib.concurrent.ParallelVisitor.UnusedException;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.query2.engine.QueryException;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -46,7 +45,7 @@
* searched exhaustively
*/
void streamPackagesFromRoots(
- BatchCallback<PackageIdentifier, UnusedException> results,
+ SafeBatchCallback<PackageIdentifier> results,
WalkableGraph graph,
List<Root> roots,
ExtendedEventHandler eventHandler,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SimplePackageIdentifierBatchingCallback.java b/src/main/java/com/google/devtools/build/lib/skyframe/SimplePackageIdentifierBatchingCallback.java
index 80ce116..fe93e68 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SimplePackageIdentifierBatchingCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SimplePackageIdentifierBatchingCallback.java
@@ -15,8 +15,6 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.concurrent.BatchCallback;
-import com.google.devtools.build.lib.concurrent.ParallelVisitor.UnusedException;
import javax.annotation.concurrent.GuardedBy;
/**
@@ -25,7 +23,7 @@
* smaller than the others.
*/
public class SimplePackageIdentifierBatchingCallback implements PackageIdentifierBatchingCallback {
- private final BatchCallback<PackageIdentifier, UnusedException> batchResults;
+ private final SafeBatchCallback<PackageIdentifier> batchResults;
private final int batchSize;
@GuardedBy("this")
@@ -35,7 +33,7 @@
private int bufferedPackageIds;
public SimplePackageIdentifierBatchingCallback(
- BatchCallback<PackageIdentifier, UnusedException> batchResults, int batchSize) {
+ SafeBatchCallback<PackageIdentifier> batchResults, int batchSize) {
this.batchResults = batchResults;
this.batchSize = batchSize;
reset();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
index 081dfd9..e6437fd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
@@ -17,6 +17,7 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.cmdline.QueryExceptionMarkerInterface;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
import com.google.devtools.build.lib.cmdline.SignedTargetPattern;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
@@ -265,7 +266,7 @@
partialResult instanceof Collection
? (Collection<Target>) partialResult
: ImmutableSet.copyOf(partialResult)),
- TargetParsingException.class);
+ QueryExceptionMarkerInterface.MarkerRuntimeException.class);
return result.get();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java
index 4a3d93e..01bd462 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java
@@ -15,12 +15,12 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.cmdline.BatchCallback.SafeBatchCallback;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.devtools.build.lib.cmdline.QueryExceptionMarkerInterface;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.cmdline.TargetPattern;
-import com.google.devtools.build.lib.concurrent.BatchCallback;
import com.google.devtools.build.lib.concurrent.MultisetSemaphore;
import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.packages.Target;
@@ -66,30 +66,26 @@
provider,
env.getListener(),
patternKey.getPolicy(),
- MultisetSemaphore.<PackageIdentifier>unbounded(),
+ MultisetSemaphore.unbounded(),
SimplePackageIdentifierBatchingCallback::new);
ImmutableSet<PathFragment> excludedSubdirectories = patternKey.getExcludedSubdirectories();
ResolvedTargets.Builder<Target> resolvedTargetsBuilder = ResolvedTargets.builder();
- BatchCallback<Target, RuntimeException> callback =
- new BatchCallback<Target, RuntimeException>() {
- @Override
- public void process(Iterable<Target> partialResult) {
- for (Target target : partialResult) {
- // TODO(b/156899726): This will go away as soon as we remove implicit outputs from
- // cc_library completely. The only
- // downside to doing this is that implicit outputs won't be listed when doing
- // somepackage:* for the handful of cases still on the allowlist. This is only a
- // google internal problem and the scale of it is acceptable in the short term
- // while cleaning up the allowlist.
- if (target instanceof OutputFile
- && ((OutputFile) target)
- .getGeneratingRule()
- .getRuleClass()
- .equals("cc_library")) {
- continue;
- }
- resolvedTargetsBuilder.add(target);
+ SafeBatchCallback<Target> callback =
+ partialResult -> {
+ for (Target target : partialResult) {
+ // TODO(b/156899726): This will go away as soon as we remove implicit outputs from
+ // cc_library completely. The only downside to doing this is that implicit outputs
+ // won't be listed when doing somepackage:* for the handful of cases still on the
+ // allowlist. This is only a Google-internal problem and the scale of it is
+ // acceptable in the short term while cleaning up the allowlist.
+ if (target instanceof OutputFile
+ && ((OutputFile) target)
+ .getGeneratingRule()
+ .getRuleClass()
+ .equals("cc_library")) {
+ continue;
}
+ resolvedTargetsBuilder.add(target);
}
};
parsedPattern.eval(
@@ -97,9 +93,7 @@
() -> ignoredPatterns,
excludedSubdirectories,
callback,
- // The exception type here has to match the one on the BatchCallback. Since the callback
- // defined above never throws, the exact type here is not really relevant.
- RuntimeException.class);
+ QueryExceptionMarkerInterface.MarkerRuntimeException.class);
if (provider.encounteredPackageErrors()) {
resolvedTargetsBuilder.setError();
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TraversalInfoRootPackageExtractor.java b/src/main/java/com/google/devtools/build/lib/skyframe/TraversalInfoRootPackageExtractor.java
index 85f5d05..978a382 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TraversalInfoRootPackageExtractor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TraversalInfoRootPackageExtractor.java
@@ -21,11 +21,11 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import com.google.devtools.build.lib.cmdline.BatchCallback.SafeBatchCallback;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.devtools.build.lib.cmdline.ParallelVisitor;
+import com.google.devtools.build.lib.cmdline.QueryExceptionMarkerInterface;
import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.concurrent.BatchCallback;
-import com.google.devtools.build.lib.concurrent.ParallelVisitor;
-import com.google.devtools.build.lib.concurrent.ParallelVisitor.UnusedException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -53,7 +53,7 @@
@Override
public void streamPackagesFromRoots(
- BatchCallback<PackageIdentifier, UnusedException> results,
+ SafeBatchCallback<PackageIdentifier> results,
WalkableGraph graph,
List<Root> roots,
ExtendedEventHandler eventHandler,
@@ -96,15 +96,15 @@
TraversalInfo,
TraversalInfo,
PackageIdentifier,
- UnusedException,
- BatchCallback<PackageIdentifier, UnusedException>> {
+ QueryExceptionMarkerInterface.MarkerRuntimeException,
+ SafeBatchCallback<PackageIdentifier>> {
private final ExtendedEventHandler eventHandler;
private final RepositoryName repository;
private final WalkableGraph graph;
PackageCollectingParallelVisitor(
- BatchCallback<PackageIdentifier, UnusedException> callback,
+ SafeBatchCallback<PackageIdentifier> callback,
int visitBatchSize,
int processResultsBatchSize,
int minPendingTasks,
@@ -114,7 +114,7 @@
WalkableGraph graph) {
super(
callback,
- UnusedException.class,
+ QueryExceptionMarkerInterface.MarkerRuntimeException.class,
visitBatchSize,
processResultsBatchSize,
minPendingTasks,