blob: d3234a60f30fb763e879c0a39781c8a6a4b3a27c [file] [log] [blame]
// Copyright 2014 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.devtools.build.lib.query2.query.output;
import com.google.common.hash.HashFunction;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.LabelPrinter;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.query2.common.CommonQueryOptions;
import com.google.devtools.build.lib.query2.engine.OutputFormatterCallback;
import com.google.devtools.build.lib.query2.engine.QueryEnvironment;
import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback;
import com.google.devtools.build.lib.query2.query.aspectresolvers.AspectResolver;
import java.io.OutputStream;
import javax.annotation.Nullable;
/**
* Unordered streamed output formatter (wrt. dependency ordering).
*
* <p>Formatters that support streamed output may be used when only the set of query results is
* requested but their ordering is irrelevant.
*
* <p>The benefit of using a streamed formatter is that we can save the potentially expensive
* subgraph extraction step before presenting the query results and that depending on the query
* environment used, it can be more memory performant, as it does not aggregate all the data
* before writing in the output.
*/
public interface StreamedFormatter {
/** Specifies options to be used by subsequent calls to {@link #createStreamCallback}. */
void setOptions(
CommonQueryOptions options, AspectResolver aspectResolver, HashFunction hashFunction);
/** Sets an optional handler for reporting status output / errors. */
void setEventHandler(@Nullable EventHandler eventHandler);
/**
* Returns a {@link ThreadSafeOutputFormatterCallback} whose
* {@link OutputFormatterCallback#process} outputs formatted {@link Target}s to the given
* {@code out}.
*
* <p>Takes any options specified via the most recent call to {@link #setOptions} into
* consideration.
*
* <p>Intended to be use for streaming out during evaluation of a query.
*/
ThreadSafeOutputFormatterCallback<Target> createStreamCallback(
OutputStream out, QueryOptions options, QueryEnvironment<?> env);
/**
* Same as {@link #createStreamCallback}, but intended to be used for outputting the
* already-computed result of a query.
*/
OutputFormatterCallback<Target> createPostFactoStreamCallback(
OutputStream out, QueryOptions options, LabelPrinter labelPrinter);
}