aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/query2/output
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2016-06-15 19:44:41 +0000
committerGravatar Yue Gan <yueg@google.com>2016-06-16 09:02:14 +0000
commit3f295ee85142983463025520ab09df32f579a0de (patch)
treeac9c62d99f6d73cfc5853ee972461499ca255840 /src/main/java/com/google/devtools/build/lib/query2/output
parentf6a45fda097fcdae4704915c530403a90e9d6745 (diff)
Slight refactor of OutputFormatter interface: separate the specification of potentially-relevant options from the creation of the callback.
-- MOS_MIGRATED_REVID=124981132
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/query2/output')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java43
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/QueryOutputUtils.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/XmlOutputFormatter.java12
4 files changed, 40 insertions, 39 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
index 21bbf0f38b..b82d048c4b 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
@@ -170,9 +170,17 @@ public abstract class OutputFormatter implements Serializable {
* before writting in the output.
*/
public interface StreamedFormatter {
-
- OutputFormatterCallback<Target> createStreamCallback(QueryOptions options, PrintStream out,
- AspectResolver aspectResolver);
+ /** Specifies options to be used by subsequent calls to {@link #createStreamCallback}. */
+ void setOptions(QueryOptions options, AspectResolver aspectResolver);
+
+ /**
+ * Returns a {@link OutputFormatterCallback} 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.
+ */
+ OutputFormatterCallback<Target> createStreamCallback(PrintStream out);
}
/**
@@ -182,6 +190,10 @@ public abstract class OutputFormatter implements Serializable {
abstract static class AbstractUnorderedFormatter extends OutputFormatter
implements StreamedFormatter {
+ protected QueryOptions options;
+ protected AspectResolver aspectResolver;
+ protected DependencyFilter dependencyFilter;
+
protected Iterable<Target> getOrderedTargets(
Digraph<Target> result, QueryOptions options) {
Iterable<Node<Target>> orderedResult =
@@ -192,10 +204,18 @@ public abstract class OutputFormatter implements Serializable {
}
@Override
+ public void setOptions(QueryOptions options, AspectResolver aspectResolver) {
+ this.options = options;
+ this.aspectResolver = aspectResolver;
+ this.dependencyFilter = OutputFormatter.getDependencyFilter(options);
+ }
+
+ @Override
public void output(QueryOptions options, Digraph<Target> result, PrintStream out,
AspectResolver aspectResolver) throws IOException, InterruptedException {
+ setOptions(options, aspectResolver);
OutputFormatterCallback.processAllTargets(
- createStreamCallback(options, out, aspectResolver),
+ createStreamCallback(out),
getOrderedTargets(result, options));
}
}
@@ -218,8 +238,7 @@ public abstract class OutputFormatter implements Serializable {
}
@Override
- public OutputFormatterCallback<Target> createStreamCallback(QueryOptions options,
- final PrintStream out, AspectResolver aspectResolver) {
+ public OutputFormatterCallback<Target> createStreamCallback(final PrintStream out) {
return new OutputFormatterCallback<Target>() {
@Override
@@ -259,9 +278,7 @@ public abstract class OutputFormatter implements Serializable {
}
@Override
- public OutputFormatterCallback<Target> createStreamCallback(QueryOptions options,
- final PrintStream out,
- AspectResolver aspectResolver) {
+ public OutputFormatterCallback<Target> createStreamCallback(final PrintStream out) {
return new OutputFormatterCallback<Target>() {
private final Set<String> packageNames = Sets.newTreeSet();
@@ -297,9 +314,7 @@ public abstract class OutputFormatter implements Serializable {
}
@Override
- public OutputFormatterCallback<Target> createStreamCallback(QueryOptions options,
- final PrintStream out,
- AspectResolver aspectResolver) {
+ public OutputFormatterCallback<Target> createStreamCallback(final PrintStream out) {
return new OutputFormatterCallback<Target>() {
@Override
@@ -327,9 +342,7 @@ public abstract class OutputFormatter implements Serializable {
}
@Override
- public OutputFormatterCallback<Target> createStreamCallback(QueryOptions options,
- final PrintStream out,
- AspectResolver aspectResolver) {
+ public OutputFormatterCallback<Target> createStreamCallback(final PrintStream out) {
return new OutputFormatterCallback<Target>() {
private final Set<Label> printed = CompactHashSet.create();
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java
index 8547e7cc3d..e51c6bf371 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java
@@ -29,7 +29,6 @@ import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.AttributeSerializer;
import com.google.devtools.build.lib.packages.BuildType;
-import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.EnvironmentGroup;
import com.google.devtools.build.lib.packages.InputFile;
import com.google.devtools.build.lib.packages.OutputFile;
@@ -69,9 +68,6 @@ public class ProtoOutputFormatter extends AbstractUnorderedFormatter {
*/
public static final String RULE_IMPLEMENTATION_HASH_ATTR_NAME = "$rule_implementation_hash";
- private transient DependencyFilter dependencyFilter;
- protected transient AspectResolver aspectResolver;
-
private boolean relativeLocations = false;
protected boolean includeDefaultValues = true;
@@ -85,13 +81,14 @@ public class ProtoOutputFormatter extends AbstractUnorderedFormatter {
}
@Override
- public OutputFormatterCallback<Target> createStreamCallback(QueryOptions options,
- final PrintStream out, AspectResolver aspectResolver) {
- relativeLocations = options.relativeLocations;
- this.aspectResolver = aspectResolver;
+ public void setOptions(QueryOptions options, AspectResolver aspectResolver) {
+ super.setOptions(options, aspectResolver);
+ this.relativeLocations = options.relativeLocations;
this.includeDefaultValues = options.protoIncludeDefaultValues;
- setDependencyFilter(options);
+ }
+ @Override
+ public OutputFormatterCallback<Target> createStreamCallback(final PrintStream out) {
return new OutputFormatterCallback<Target>() {
private Builder queryResult;
@@ -130,8 +127,7 @@ public class ProtoOutputFormatter extends AbstractUnorderedFormatter {
/**
* Converts a logical {@link Target} object into a {@link Build.Target} protobuffer.
*/
- protected Build.Target toTargetProtoBuffer(Target target)
- throws InterruptedException {
+ protected Build.Target toTargetProtoBuffer(Target target) throws InterruptedException {
Build.Target.Builder targetPb = Build.Target.newBuilder();
String location = getLocation(target, relativeLocations);
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/QueryOutputUtils.java b/src/main/java/com/google/devtools/build/lib/query2/output/QueryOutputUtils.java
index 1533b7bf43..3235d9952c 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/QueryOutputUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/QueryOutputUtils.java
@@ -49,8 +49,10 @@ public class QueryOutputUtils {
((DigraphQueryEvalResult<Target>) result).getGraph().extractSubgraph(targetsResult),
outputStream, aspectResolver);
} else {
- OutputFormatterCallback.processAllTargets(((StreamedFormatter) formatter)
- .createStreamCallback(queryOptions, outputStream, aspectResolver), targetsResult);
+ StreamedFormatter streamedFormatter = (StreamedFormatter) formatter;
+ streamedFormatter.setOptions(queryOptions, aspectResolver);
+ OutputFormatterCallback.processAllTargets(
+ streamedFormatter.createStreamCallback(outputStream), targetsResult);
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/XmlOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/output/XmlOutputFormatter.java
index 6de67a259e..b6df296d13 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/XmlOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/XmlOutputFormatter.java
@@ -18,7 +18,6 @@ import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.BuildType;
-import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.EnvironmentGroup;
import com.google.devtools.build.lib.packages.FilesetEntry;
import com.google.devtools.build.lib.packages.InputFile;
@@ -58,22 +57,13 @@ import javax.xml.transform.stream.StreamResult;
* An output formatter that prints the result as XML.
*/
class XmlOutputFormatter extends AbstractUnorderedFormatter {
-
- private QueryOptions options;
- private AspectResolver aspectResolver;
- private DependencyFilter dependencyFilter;
-
@Override
public String getName() {
return "xml";
}
@Override
- public OutputFormatterCallback<Target> createStreamCallback(QueryOptions options,
- final PrintStream out, AspectResolver aspectResolver) {
- this.options = options;
- this.aspectResolver = aspectResolver;
- this.dependencyFilter = OutputFormatter.getDependencyFilter(options);
+ public OutputFormatterCallback<Target> createStreamCallback(final PrintStream out) {
return new OutputFormatterCallback<Target>() {
private Document doc;