Allow output formatters to work in stream mode.
--
MOS_MIGRATED_REVID=109908202
diff --git a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
index 55b1bc7..db006b5 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
@@ -37,8 +37,8 @@
import com.google.devtools.build.lib.pkgcache.TargetPatternEvaluator;
import com.google.devtools.build.lib.pkgcache.TargetProvider;
import com.google.devtools.build.lib.pkgcache.TransitivePackageLoader;
-import com.google.devtools.build.lib.query2.engine.BlazeQueryEvalResult;
import com.google.devtools.build.lib.query2.engine.Callback;
+import com.google.devtools.build.lib.query2.engine.DigraphQueryEvalResult;
import com.google.devtools.build.lib.query2.engine.QueryEvalResult;
import com.google.devtools.build.lib.query2.engine.QueryException;
import com.google.devtools.build.lib.query2.engine.QueryExpression;
@@ -54,6 +54,7 @@
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* The environment of a Blaze query. Not thread-safe.
@@ -102,15 +103,22 @@
}
@Override
- public BlazeQueryEvalResult<Target> evaluateQuery(QueryExpression expr)
- throws QueryException, InterruptedException {
+ public DigraphQueryEvalResult<Target> evaluateQuery(QueryExpression expr,
+ final Callback<Target> callback) throws QueryException, InterruptedException {
// Some errors are reported as QueryExceptions and others as ERROR events (if --keep_going). The
// result is set to have an error iff there were errors emitted during the query, so we reset
// errors here.
eventHandler.resetErrors();
- QueryEvalResult<Target> queryEvalResult = super.evaluateQuery(expr);
- return new BlazeQueryEvalResult<>(queryEvalResult.getSuccess(), queryEvalResult.getResultSet(),
- graph);
+ final AtomicBoolean empty = new AtomicBoolean(true);
+ QueryEvalResult queryEvalResult = super.evaluateQuery(expr, new Callback<Target>() {
+ @Override
+ public void process(Iterable<Target> partialResult)
+ throws QueryException, InterruptedException {
+ empty.compareAndSet(true, Iterables.isEmpty(partialResult));
+ callback.process(partialResult);
+ }
+ });
+ return new DigraphQueryEvalResult<>(queryEvalResult.getSuccess(), empty.get(), graph);
}
@Override