diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build')
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) { |