aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java96
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Rule.java80
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/CompileOneDependencyTransformer.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/ConservativeAspectResolver.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/XmlOutputFormatter.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java5
14 files changed, 146 insertions, 114 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java
index 233a8f3e4b..5719f52079 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.AttributeMap;
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.Rule;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -529,7 +530,7 @@ public class ConstraintSemantics {
|| attr.equals("visibility")
// Use the same implicit deps check that query uses. This facilitates running queries to
// determine exactly which rules need to be constraint-annotated for depot migrations.
- || !Rule.NO_IMPLICIT_DEPS.apply(ruleContext.getRule(), attrDef)
+ || !DependencyFilter.NO_IMPLICIT_DEPS.apply(ruleContext.getRule(), attrDef)
// We can't identify host deps by calling BuildConfiguration.isHostConfiguration()
// because --nodistinct_host_configuration subverts that call.
|| attrDef.getConfigurationTransition() == Attribute.ConfigurationTransition.HOST) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
index 3e7bf76d7e..43704f2143 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
@@ -24,7 +24,6 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy;
import com.google.devtools.build.lib.packages.NativeAspectClass.NativeAspectFactory;
-import com.google.devtools.build.lib.util.BinaryPredicate;
import com.google.devtools.build.lib.util.Preconditions;
import java.util.Collection;
@@ -168,7 +167,8 @@ public final class AspectDefinition {
candidateClass.getDefinition().getRequiredProviderNames())) {
continue;
}
- addAllAttributesOfAspect(from, result, candidateClass.getDefinition(), Rule.ALL_DEPS);
+ addAllAttributesOfAspect(
+ from, result, candidateClass.getDefinition(), DependencyFilter.ALL_DEPS);
}
return ImmutableMultimap.copyOf(result);
}
@@ -184,9 +184,11 @@ public final class AspectDefinition {
/**
* Collects all attribute labels from the specified aspectDefinition.
*/
- public static void addAllAttributesOfAspect(Rule from,
- Multimap<Attribute, Label> labelBuilder, AspectDefinition aspectDefinition,
- BinaryPredicate<Rule, Attribute> predicate) {
+ public static void addAllAttributesOfAspect(
+ Rule from,
+ Multimap<Attribute, Label> labelBuilder,
+ AspectDefinition aspectDefinition,
+ DependencyFilter predicate) {
ImmutableMap<String, Attribute> attributes = aspectDefinition.getAttributes();
for (Attribute aspectAttribute : attributes.values()) {
if (!predicate.apply(from, aspectAttribute)) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java b/src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java
new file mode 100644
index 0000000000..6d1b943d41
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java
@@ -0,0 +1,96 @@
+// Copyright 2016 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.packages;
+
+import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
+import com.google.devtools.build.lib.util.BinaryPredicate;
+
+/**
+ * A predicate that returns true if an dependency attribute should be included in the result of
+ * <code>blaze query</code>.
+ * Used to implement <code>--[no]implicit_deps</code>, <code>--[no]host_deps</code> etc.
+ */
+public abstract class DependencyFilter implements BinaryPredicate<Rule, Attribute> {
+
+ /** Dependency predicate that includes all dependencies */
+ public static final DependencyFilter ALL_DEPS =
+ new DependencyFilter() {
+ @Override
+ public boolean apply(Rule x, Attribute y) {
+ return true;
+ }
+ };
+ /** Dependency predicate that excludes host dependencies */
+ public static final DependencyFilter NO_HOST_DEPS =
+ new DependencyFilter() {
+ @Override
+ public boolean apply(Rule rule, Attribute attribute) {
+ // isHostConfiguration() is only defined for labels and label lists.
+ if (attribute.getType() != BuildType.LABEL && attribute.getType() != BuildType.LABEL_LIST) {
+ return true;
+ }
+
+ return attribute.getConfigurationTransition() != ConfigurationTransition.HOST;
+ }
+ };
+ /** Dependency predicate that excludes implicit dependencies */
+ public static final DependencyFilter NO_IMPLICIT_DEPS =
+ new DependencyFilter() {
+ @Override
+ public boolean apply(Rule rule, Attribute attribute) {
+ return rule.isAttributeValueExplicitlySpecified(attribute);
+ }
+ };
+ /**
+ * Dependency predicate that excludes those edges that are not present in
+ * the loading phase target dependency graph.
+ */
+ public static final DependencyFilter NO_NODEP_ATTRIBUTES =
+ new DependencyFilter() {
+ @Override
+ public boolean apply(Rule rule, Attribute attribute) {
+ return attribute.getType() != BuildType.NODEP_LABEL
+ && attribute.getType() != BuildType.NODEP_LABEL_LIST;
+ }
+ };
+ /**
+ * Checks to see if the attribute has the isDirectCompileTimeInput property.
+ */
+ public static final DependencyFilter DIRECT_COMPILE_TIME_INPUT =
+ new DependencyFilter() {
+ @Override
+ public boolean apply(Rule rule, Attribute attribute) {
+ return attribute.isDirectCompileTimeInput();
+ }
+ };
+
+ /**
+ * Returns true if a given attribute should be processed.
+ */
+ @Override
+ public abstract boolean apply(Rule rule, Attribute attribute);
+
+ /**
+ * Returns a predicate that computes the logical and of the two given predicates.
+ */
+ public static DependencyFilter and(
+ final DependencyFilter a, final DependencyFilter b) {
+ return new DependencyFilter() {
+ @Override
+ public boolean apply(Rule rule, Attribute attribute) {
+ return a.apply(rule, attribute) && b.apply(rule, attribute);
+ }
+ };
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Rule.java b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
index ff16662e2c..c18d7639ea 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Rule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
@@ -31,12 +31,10 @@ import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Location;
-import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
import com.google.devtools.build.lib.packages.License.DistributionType;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.GlobList;
import com.google.devtools.build.lib.syntax.Type;
-import com.google.devtools.build.lib.util.BinaryPredicate;
import com.google.devtools.build.lib.util.Preconditions;
import java.util.Collection;
@@ -61,78 +59,10 @@ import java.util.Set;
* </pre>
*/
public final class Rule implements Target {
- /** Dependency predicate that includes all dependencies */
- public static final BinaryPredicate<Rule, Attribute> ALL_DEPS =
- new BinaryPredicate<Rule, Attribute>() {
- @Override
- public boolean apply(Rule x, Attribute y) {
- return true;
- }
- };
-
- /** Dependency predicate that excludes host dependencies */
- public static final BinaryPredicate<Rule, Attribute> NO_HOST_DEPS =
- new BinaryPredicate<Rule, Attribute>() {
- @Override
- public boolean apply(Rule rule, Attribute attribute) {
- // isHostConfiguration() is only defined for labels and label lists.
- if (attribute.getType() != BuildType.LABEL && attribute.getType() != BuildType.LABEL_LIST) {
- return true;
- }
-
- return attribute.getConfigurationTransition() != ConfigurationTransition.HOST;
- }
- };
-
- /** Dependency predicate that excludes implicit dependencies */
- public static final BinaryPredicate<Rule, Attribute> NO_IMPLICIT_DEPS =
- new BinaryPredicate<Rule, Attribute>() {
- @Override
- public boolean apply(Rule rule, Attribute attribute) {
- return rule.isAttributeValueExplicitlySpecified(attribute);
- }
- };
-
- /**
- * Dependency predicate that excludes those edges that are not present in the
- * configured target graph.
- */
- public static final BinaryPredicate<Rule, Attribute> NO_NODEP_ATTRIBUTES =
- new BinaryPredicate<Rule, Attribute>() {
- @Override
- public boolean apply(Rule rule, Attribute attribute) {
- return attribute.getType() != BuildType.NODEP_LABEL
- && attribute.getType() != BuildType.NODEP_LABEL_LIST;
- }
- };
/** Label predicate that allows every label. */
public static final Predicate<Label> ALL_LABELS = Predicates.alwaysTrue();
- /**
- * Checks to see if the attribute has the isDirectCompileTimeInput property.
- */
- public static final BinaryPredicate<Rule, Attribute> DIRECT_COMPILE_TIME_INPUT =
- new BinaryPredicate<Rule, Attribute>() {
- @Override
- public boolean apply(Rule rule, Attribute attribute) {
- return attribute.isDirectCompileTimeInput();
- }
- };
-
- /**
- * Returns a predicate that computes the logical and of the two given predicates.
- */
- public static <X, Y> BinaryPredicate<X, Y> and(
- final BinaryPredicate<X, Y> a, final BinaryPredicate<X, Y> b) {
- return new BinaryPredicate<X, Y>() {
- @Override
- public boolean apply(X x, Y y) {
- return a.apply(x, y) && b.apply(x, y);
- }
- };
- }
-
private final Label label;
private final Package pkg;
@@ -457,7 +387,7 @@ public final class Rule implements Target {
* Returns a new List instance containing all direct dependencies (all types).
*/
public Collection<Label> getLabels() {
- return getLabels(Rule.ALL_DEPS);
+ return getLabels(DependencyFilter.ALL_DEPS);
}
/**
@@ -469,7 +399,7 @@ public final class Rule implements Target {
* the attribute that contains the label. The label will be contained in the
* result iff (the predicate returned {@code true} and the labels are not outputs)
*/
- public Collection<Label> getLabels(final BinaryPredicate<Rule, Attribute> predicate) {
+ public Collection<Label> getLabels(DependencyFilter predicate) {
return ImmutableSortedSet.copyOf(getTransitions(predicate).values());
}
@@ -482,8 +412,7 @@ public final class Rule implements Target {
* the attribute that contains the label. The label will be contained in the
* result iff (the predicate returned {@code true} and the labels are not outputs)
*/
- public Multimap<Attribute, Label> getTransitions(
- final BinaryPredicate<Rule, Attribute> predicate) {
+ public Multimap<Attribute, Label> getTransitions(final DependencyFilter predicate) {
final Multimap<Attribute, Label> transitions = HashMultimap.create();
// TODO(bazel-team): move this to AttributeMap, too. Just like visitLabels, which labels should
// be visited may depend on the calling context. We shouldn't implicitly decide this for
@@ -733,8 +662,7 @@ public final class Rule implements Target {
* Computes labels of additional dependencies that can be provided by aspects that this rule
* can require from its direct dependencies.
*/
- public Collection<? extends Label> getAspectLabelsSuperset(
- BinaryPredicate<Rule, Attribute> predicate) {
+ public Collection<? extends Label> getAspectLabelsSuperset(DependencyFilter predicate) {
LinkedHashMultimap<Attribute, Label> labels = LinkedHashMultimap.create();
for (Attribute attribute : this.getAttributes()) {
for (Aspect candidateClass : attribute.getAspects(this)) {
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/CompileOneDependencyTransformer.java b/src/main/java/com/google/devtools/build/lib/pkgcache/CompileOneDependencyTransformer.java
index b6389e2f92..48fff568df 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/CompileOneDependencyTransformer.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/CompileOneDependencyTransformer.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.events.EventHandler;
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.FileTarget;
import com.google.devtools.build.lib.packages.NoSuchThingException;
import com.google.devtools.build.lib.packages.Package;
@@ -27,7 +28,6 @@ import com.google.devtools.build.lib.packages.RawAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.util.BinaryPredicate;
import java.util.Collections;
import java.util.Comparator;
@@ -117,11 +117,11 @@ final class CompileOneDependencyTransformer {
// For each rule, see if it has directCompileTimeInputAttribute,
// and if so check the targets listed in that attribute match the label.
- final BinaryPredicate<Rule, Attribute> directCompileTimeInput =
- new BinaryPredicate<Rule, Attribute>() {
+ DependencyFilter directCompileTimeInput =
+ new DependencyFilter() {
@Override
public boolean apply(Rule rule, Attribute attribute) {
- return Rule.DIRECT_COMPILE_TIME_INPUT.apply(rule, attribute)
+ return DependencyFilter.DIRECT_COMPILE_TIME_INPUT.apply(rule, attribute)
// We don't know which path to follow for configurable attributes, so skip them.
&& !rule.isConfigurableAttribute(attribute.getName());
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java
index 004adec534..348ce70aa6 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java
@@ -22,7 +22,7 @@ import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.events.ErrorSensingEventHandler;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
-import com.google.devtools.build.lib.packages.Attribute;
+import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.PackageProvider;
@@ -36,7 +36,6 @@ 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;
import com.google.devtools.build.lib.query2.engine.QueryUtil.AggregateAllCallback;
-import com.google.devtools.build.lib.util.BinaryPredicate;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.skyframe.WalkableGraph.WalkableGraphFactory;
@@ -61,7 +60,7 @@ public abstract class AbstractBlazeQueryEnvironment<T> implements QueryEnvironme
protected final boolean keepGoing;
protected final boolean strictScope;
- protected final BinaryPredicate<Rule, Attribute> dependencyFilter;
+ protected final DependencyFilter dependencyFilter;
private final Predicate<Label> labelFilter;
private final Set<Setting> settings;
@@ -84,14 +83,16 @@ public abstract class AbstractBlazeQueryEnvironment<T> implements QueryEnvironme
this.extraFunctions = ImmutableList.copyOf(extraFunctions);
}
- private static BinaryPredicate<Rule, Attribute> constructDependencyFilter(Set<Setting> settings) {
- BinaryPredicate<Rule, Attribute> specifiedFilter =
- settings.contains(Setting.NO_HOST_DEPS) ? Rule.NO_HOST_DEPS : Rule.ALL_DEPS;
+ private static DependencyFilter constructDependencyFilter(Set<Setting> settings) {
+ DependencyFilter specifiedFilter =
+ settings.contains(Setting.NO_HOST_DEPS)
+ ? DependencyFilter.NO_HOST_DEPS
+ : DependencyFilter.ALL_DEPS;
if (settings.contains(Setting.NO_IMPLICIT_DEPS)) {
- specifiedFilter = Rule.and(specifiedFilter, Rule.NO_IMPLICIT_DEPS);
+ specifiedFilter = DependencyFilter.and(specifiedFilter, DependencyFilter.NO_IMPLICIT_DEPS);
}
if (settings.contains(Setting.NO_NODEP_DEPS)) {
- specifiedFilter = Rule.and(specifiedFilter, Rule.NO_NODEP_ATTRIBUTES);
+ specifiedFilter = DependencyFilter.and(specifiedFilter, DependencyFilter.NO_NODEP_ATTRIBUTES);
}
return specifiedFilter;
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java b/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java
index e5f78c1fd2..1734977528 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.packages.AspectDefinition;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.BuildType;
+import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.InputFile;
import com.google.devtools.build.lib.packages.NoSuchThingException;
import com.google.devtools.build.lib.packages.OutputFile;
@@ -41,7 +42,6 @@ import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.PackageProvider;
import com.google.devtools.build.lib.pkgcache.TargetEdgeObserver;
-import com.google.devtools.build.lib.util.BinaryPredicate;
import java.util.Collection;
import java.util.Map.Entry;
@@ -185,7 +185,7 @@ final class LabelVisitor {
* Life is not simple.
*/
private final PackageProvider packageProvider;
- private final BinaryPredicate<Rule, Attribute> edgeFilter;
+ private final DependencyFilter edgeFilter;
private final SetMultimap<Package, Target> visitedMap =
Multimaps.synchronizedSetMultimap(HashMultimap.<Package, Target>create());
private final ConcurrentMap<Label, Integer> visitedTargets = new MapMaker().makeMap();
@@ -203,8 +203,7 @@ final class LabelVisitor {
* @param packageProvider how to resolve labels to targets.
* @param edgeFilter which edges may be traversed.
*/
- public LabelVisitor(PackageProvider packageProvider,
- BinaryPredicate<Rule, Attribute> edgeFilter) {
+ public LabelVisitor(PackageProvider packageProvider, DependencyFilter edgeFilter) {
this.packageProvider = packageProvider;
this.lastVisitation = new VisitationAttributes();
this.edgeFilter = edgeFilter;
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index 927b4ec09f..363f5d565d 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -35,6 +35,7 @@ import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.graph.Digraph;
import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
+import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.NoSuchThingException;
import com.google.devtools.build.lib.packages.Package;
@@ -264,7 +265,7 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> {
for (Collection<Target> parentCollection : rawReverseDeps.values()) {
for (Target parent : parentCollection) {
if (visited.add(parent)) {
- if (parent instanceof Rule && dependencyFilter != Rule.ALL_DEPS) {
+ if (parent instanceof Rule && dependencyFilter != DependencyFilter.ALL_DEPS) {
for (Label label : getAllowedDeps((Rule) parent)) {
if (keys.contains(label)) {
result.add(parent);
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/ConservativeAspectResolver.java b/src/main/java/com/google/devtools/build/lib/query2/output/ConservativeAspectResolver.java
index c71e372c9e..47ed795747 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/ConservativeAspectResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/ConservativeAspectResolver.java
@@ -21,6 +21,7 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Aspect;
import com.google.devtools.build.lib.packages.AspectDefinition;
import com.google.devtools.build.lib.packages.Attribute;
+import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
@@ -44,7 +45,7 @@ public class ConservativeAspectResolver implements AspectResolver {
for (Attribute attribute : rule.getAttributes()) {
for (Aspect aspect : attribute.getAspects(rule)) {
AspectDefinition.addAllAttributesOfAspect(
- rule, result, aspect.getDefinition(), Rule.ALL_DEPS);
+ rule, result, aspect.getDefinition(), DependencyFilter.ALL_DEPS);
}
}
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 c6e79e1f14..aa1b742acf 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
@@ -26,13 +26,13 @@ import com.google.devtools.build.lib.graph.Digraph;
import com.google.devtools.build.lib.graph.Node;
import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
import com.google.devtools.build.lib.packages.Attribute;
+import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.query2.engine.OutputFormatterCallback;
import com.google.devtools.build.lib.query2.output.QueryOptions.OrderOutput;
import com.google.devtools.build.lib.syntax.EvalUtils;
import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.util.BinaryPredicate;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.common.options.EnumConverter;
@@ -140,11 +140,13 @@ public abstract class OutputFormatter implements Serializable {
* Given a set of query options, returns a BinaryPredicate suitable for
* passing to {@link Rule#getLabels()}, {@link XmlOutputFormatter}, etc.
*/
- public static BinaryPredicate<Rule, Attribute> getDependencyFilter(QueryOptions queryOptions) {
+ public static DependencyFilter getDependencyFilter(QueryOptions queryOptions) {
// TODO(bazel-team): Optimize: and(ALL_DEPS, x) -> x, etc.
- return Rule.and(
- queryOptions.includeHostDeps ? Rule.ALL_DEPS : Rule.NO_HOST_DEPS,
- queryOptions.includeImplicitDeps ? Rule.ALL_DEPS : Rule.NO_IMPLICIT_DEPS);
+ return DependencyFilter.and(
+ queryOptions.includeHostDeps ? DependencyFilter.ALL_DEPS : DependencyFilter.NO_HOST_DEPS,
+ queryOptions.includeImplicitDeps
+ ? DependencyFilter.ALL_DEPS
+ : DependencyFilter.NO_IMPLICIT_DEPS);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java b/src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java
index 4da4f3a260..7ec288448f 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java
@@ -23,13 +23,13 @@ import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.Aspect;
import com.google.devtools.build.lib.packages.AspectDefinition;
import com.google.devtools.build.lib.packages.Attribute;
+import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchThingException;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.PackageProvider;
-import com.google.devtools.build.lib.util.BinaryPredicate;
import java.util.LinkedHashSet;
import java.util.Map.Entry;
@@ -58,7 +58,7 @@ public class PreciseAspectResolver implements AspectResolver {
Multimap<Attribute, Label> result = LinkedListMultimap.create();
if (target instanceof Rule) {
Multimap<Attribute, Label> transitions =
- ((Rule) target).getTransitions(Rule.NO_NODEP_ATTRIBUTES);
+ ((Rule) target).getTransitions(DependencyFilter.NO_NODEP_ATTRIBUTES);
for (Entry<Attribute, Label> entry : transitions.entries()) {
Target toTarget;
try {
@@ -92,7 +92,7 @@ public class PreciseAspectResolver implements AspectResolver {
Multimap<Attribute, Label> depsWithPossibleAspects =
((Rule) target)
.getTransitions(
- new BinaryPredicate<Rule, Attribute>() {
+ new DependencyFilter() {
@Override
public boolean apply(@Nullable Rule rule, Attribute attribute) {
for (Aspect aspectWithParameters : attribute.getAspects(rule)) {
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 abf1e08c88..84554af961 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
@@ -28,6 +28,7 @@ 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;
@@ -45,7 +46,6 @@ import com.google.devtools.build.lib.query2.proto.proto2api.Build.GeneratedFile;
import com.google.devtools.build.lib.query2.proto.proto2api.Build.QueryResult.Builder;
import com.google.devtools.build.lib.query2.proto.proto2api.Build.SourceFile;
import com.google.devtools.build.lib.syntax.Environment;
-import com.google.devtools.build.lib.util.BinaryPredicate;
import java.io.IOException;
import java.io.PrintStream;
@@ -67,7 +67,7 @@ public class ProtoOutputFormatter extends AbstractUnorderedFormatter {
*/
public static final String RULE_IMPLEMENTATION_HASH_ATTR_NAME = "$rule_implementation_hash";
- private transient BinaryPredicate<Rule, Attribute> dependencyFilter;
+ private transient DependencyFilter dependencyFilter;
protected transient AspectResolver aspectResolver;
private boolean relativeLocations = false;
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 9f735e5903..a14facf398 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,6 +18,7 @@ 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;
@@ -30,7 +31,6 @@ import com.google.devtools.build.lib.query2.FakeSubincludeTarget;
import com.google.devtools.build.lib.query2.engine.OutputFormatterCallback;
import com.google.devtools.build.lib.query2.output.AspectResolver.BuildFileDependencyMode;
import com.google.devtools.build.lib.query2.output.OutputFormatter.AbstractUnorderedFormatter;
-import com.google.devtools.build.lib.util.BinaryPredicate;
import com.google.devtools.build.lib.util.Pair;
import org.w3c.dom.DOMException;
@@ -61,7 +61,7 @@ class XmlOutputFormatter extends AbstractUnorderedFormatter {
private QueryOptions options;
private AspectResolver aspectResolver;
- private BinaryPredicate<Rule, Attribute> dependencyFilter;
+ private DependencyFilter dependencyFilter;
@Override
public String getName() {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
index 797be40770..44b161b5a0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
@@ -19,6 +19,7 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
+import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.InputFile;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
@@ -169,7 +170,7 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
}
Multimap<Attribute, Label> transitions =
- ((Rule) target).getTransitions(Rule.NO_NODEP_ATTRIBUTES);
+ ((Rule) target).getTransitions(DependencyFilter.NO_NODEP_ATTRIBUTES);
for (Entry<Attribute, Label> entry : transitions.entries()) {
ValueOrException2<NoSuchPackageException, NoSuchTargetException> value =
labelDepMap.get(entry.getValue());
@@ -217,7 +218,7 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
}
private static void visitRule(Target target, Set<Label> labels) {
- labels.addAll(((Rule) target).getTransitions(Rule.NO_NODEP_ATTRIBUTES).values());
+ labels.addAll(((Rule) target).getTransitions(DependencyFilter.NO_NODEP_ATTRIBUTES).values());
}
private static void visitTargetVisibility(Target target, Set<Label> labels) {