aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Rule.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/CompileOneDependencyTransformer.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java3
8 files changed, 43 insertions, 25 deletions
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 43704f2143..5c905ba4b2 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,6 +24,7 @@ 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;
@@ -188,7 +189,7 @@ public final class AspectDefinition {
Rule from,
Multimap<Attribute, Label> labelBuilder,
AspectDefinition aspectDefinition,
- DependencyFilter predicate) {
+ BinaryPredicate<? super Rule, Attribute> 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
index 6d1b943d41..a5d41ee631 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.packages;
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
+import com.google.devtools.build.lib.packages.DependencyFilter.AttributeInfoProvider;
import com.google.devtools.build.lib.util.BinaryPredicate;
/**
@@ -21,13 +22,14 @@ import com.google.devtools.build.lib.util.BinaryPredicate;
* <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> {
+public abstract class DependencyFilter
+ implements BinaryPredicate<AttributeInfoProvider, Attribute> {
/** Dependency predicate that includes all dependencies */
public static final DependencyFilter ALL_DEPS =
new DependencyFilter() {
@Override
- public boolean apply(Rule x, Attribute y) {
+ public boolean apply(AttributeInfoProvider x, Attribute y) {
return true;
}
};
@@ -35,7 +37,7 @@ public abstract class DependencyFilter implements BinaryPredicate<Rule, Attribut
public static final DependencyFilter NO_HOST_DEPS =
new DependencyFilter() {
@Override
- public boolean apply(Rule rule, Attribute attribute) {
+ public boolean apply(AttributeInfoProvider infoProvider, Attribute attribute) {
// isHostConfiguration() is only defined for labels and label lists.
if (attribute.getType() != BuildType.LABEL && attribute.getType() != BuildType.LABEL_LIST) {
return true;
@@ -48,8 +50,8 @@ public abstract class DependencyFilter implements BinaryPredicate<Rule, Attribut
public static final DependencyFilter NO_IMPLICIT_DEPS =
new DependencyFilter() {
@Override
- public boolean apply(Rule rule, Attribute attribute) {
- return rule.isAttributeValueExplicitlySpecified(attribute);
+ public boolean apply(AttributeInfoProvider infoProvider, Attribute attribute) {
+ return infoProvider.isAttributeValueExplicitlySpecified(attribute);
}
};
/**
@@ -59,7 +61,7 @@ public abstract class DependencyFilter implements BinaryPredicate<Rule, Attribut
public static final DependencyFilter NO_NODEP_ATTRIBUTES =
new DependencyFilter() {
@Override
- public boolean apply(Rule rule, Attribute attribute) {
+ public boolean apply(AttributeInfoProvider infoProvider, Attribute attribute) {
return attribute.getType() != BuildType.NODEP_LABEL
&& attribute.getType() != BuildType.NODEP_LABEL_LIST;
}
@@ -70,7 +72,7 @@ public abstract class DependencyFilter implements BinaryPredicate<Rule, Attribut
public static final DependencyFilter DIRECT_COMPILE_TIME_INPUT =
new DependencyFilter() {
@Override
- public boolean apply(Rule rule, Attribute attribute) {
+ public boolean apply(AttributeInfoProvider infoProvider, Attribute attribute) {
return attribute.isDirectCompileTimeInput();
}
};
@@ -79,7 +81,7 @@ public abstract class DependencyFilter implements BinaryPredicate<Rule, Attribut
* Returns true if a given attribute should be processed.
*/
@Override
- public abstract boolean apply(Rule rule, Attribute attribute);
+ public abstract boolean apply(AttributeInfoProvider infoProvider, Attribute attribute);
/**
* Returns a predicate that computes the logical and of the two given predicates.
@@ -88,9 +90,21 @@ public abstract class DependencyFilter implements BinaryPredicate<Rule, Attribut
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);
+ public boolean apply(AttributeInfoProvider infoProvider, Attribute attribute) {
+ return a.apply(infoProvider, attribute) && b.apply(infoProvider, attribute);
}
};
}
+
+ /**
+ * Interface to provide information about attributes to dependency filters.
+ */
+ public interface AttributeInfoProvider {
+ /**
+ * Returns true iff the value of the specified attribute is explicitly set in
+ * the BUILD file (as opposed to its default value). This also returns true if
+ * the value from the BUILD file is the same as the default value.
+ */
+ boolean isAttributeValueExplicitlySpecified(Attribute 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 c18d7639ea..d4d4f17b56 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
@@ -35,6 +35,7 @@ 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;
@@ -58,7 +59,7 @@ import java.util.Set;
* deps = ['bar'])
* </pre>
*/
-public final class Rule implements Target {
+public final class Rule implements Target, DependencyFilter.AttributeInfoProvider {
/** Label predicate that allows every label. */
public static final Predicate<Label> ALL_LABELS = Predicates.alwaysTrue();
@@ -305,11 +306,7 @@ public final class Rule implements Target {
return ruleClass.hasAttr(attrName, type);
}
- /**
- * Returns true iff the value of the specified attribute is explicitly set in
- * the BUILD file (as opposed to its default value). This also returns true if
- * the value from the BUILD file is the same as the default value.
- */
+ @Override
public boolean isAttributeValueExplicitlySpecified(Attribute attribute) {
return attributes.isAttributeValueExplicitlySpecified(attribute);
}
@@ -399,7 +396,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(DependencyFilter predicate) {
+ public Collection<Label> getLabels(BinaryPredicate<? super Rule, Attribute> predicate) {
return ImmutableSortedSet.copyOf(getTransitions(predicate).values());
}
@@ -412,7 +409,8 @@ 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 DependencyFilter predicate) {
+ public Multimap<Attribute, Label> getTransitions(
+ final BinaryPredicate<? super Rule, Attribute> 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
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 48fff568df..85766dac93 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
@@ -28,6 +28,7 @@ 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,8 +118,8 @@ final class CompileOneDependencyTransformer {
// For each rule, see if it has directCompileTimeInputAttribute,
// and if so check the targets listed in that attribute match the label.
- DependencyFilter directCompileTimeInput =
- new DependencyFilter() {
+ BinaryPredicate<Rule, Attribute> directCompileTimeInput =
+ new BinaryPredicate<Rule, Attribute>() {
@Override
public boolean apply(Rule rule, Attribute attribute) {
return DependencyFilter.DIRECT_COMPILE_TIME_INPUT.apply(rule, attribute)
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 348ce70aa6..99da369f4b 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
@@ -83,7 +83,8 @@ public abstract class AbstractBlazeQueryEnvironment<T> implements QueryEnvironme
this.extraFunctions = ImmutableList.copyOf(extraFunctions);
}
- private static DependencyFilter constructDependencyFilter(Set<Setting> settings) {
+ private static DependencyFilter constructDependencyFilter(
+ Set<Setting> settings) {
DependencyFilter specifiedFilter =
settings.contains(Setting.NO_HOST_DEPS)
? DependencyFilter.NO_HOST_DEPS
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 1734977528..d2015c988e 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
@@ -203,7 +203,8 @@ final class LabelVisitor {
* @param packageProvider how to resolve labels to targets.
* @param edgeFilter which edges may be traversed.
*/
- public LabelVisitor(PackageProvider packageProvider, DependencyFilter 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/output/OutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
index aa1b742acf..a4cc45d0f9 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
@@ -140,7 +140,8 @@ 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 DependencyFilter getDependencyFilter(QueryOptions queryOptions) {
+ public static DependencyFilter getDependencyFilter(
+ QueryOptions queryOptions) {
// TODO(bazel-team): Optimize: and(ALL_DEPS, x) -> x, etc.
return DependencyFilter.and(
queryOptions.includeHostDeps ? DependencyFilter.ALL_DEPS : DependencyFilter.NO_HOST_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 7ec288448f..2abe834737 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
@@ -30,6 +30,7 @@ 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;
@@ -92,7 +93,7 @@ public class PreciseAspectResolver implements AspectResolver {
Multimap<Attribute, Label> depsWithPossibleAspects =
((Rule) target)
.getTransitions(
- new DependencyFilter() {
+ new BinaryPredicate<Rule, Attribute>() {
@Override
public boolean apply(@Nullable Rule rule, Attribute attribute) {
for (Aspect aspectWithParameters : attribute.getAspects(rule)) {