diff options
author | Nathan Harmata <nharmata@google.com> | 2016-06-15 19:44:41 +0000 |
---|---|---|
committer | Yue Gan <yueg@google.com> | 2016-06-16 09:02:14 +0000 |
commit | 3f295ee85142983463025520ab09df32f579a0de (patch) | |
tree | ac9c62d99f6d73cfc5853ee972461499ca255840 /src | |
parent | f6a45fda097fcdae4704915c530403a90e9d6745 (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')
5 files changed, 44 insertions, 42 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; diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java index 9af780e5eb..7f467295ef 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java @@ -158,9 +158,10 @@ public final class QueryCommand implements BlazeCommand { disableAnsiCharactersFiltering(env); output = new PrintStream(env.getReporter().getOutErr().getOutputStream()); // 2. Evaluate expression: - callback = ((StreamedFormatter) formatter) - .createStreamCallback(queryOptions, output, queryOptions.aspectDeps.createResolver( - env.getPackageManager(), env.getReporter())); + StreamedFormatter streamedFormatter = ((StreamedFormatter) formatter); + streamedFormatter.setOptions(queryOptions, queryOptions.aspectDeps.createResolver( + env.getPackageManager(), env.getReporter())); + callback = streamedFormatter.createStreamCallback(output); } else { callback = new AggregateAllOutputFormatterCallback<>(); } |