aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/query2
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/query2')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/AspectResolver.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/ConservativeAspectResolver.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/NullAspectResolver.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/PreciseAspectResolver.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/ProtoOutputFormatter.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/XmlOutputFormatter.java3
7 files changed, 29 insertions, 14 deletions
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 d2015c988e..f0dd92fbf3 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
@@ -326,10 +326,6 @@ final class LabelVisitor {
// Don't perform the targetProvider lookup if at the maximum depth already.
if (depth >= maxDepth) {
return;
- } else if (attr != null && from instanceof Rule) {
- if (!edgeFilter.apply((Rule) from, attr)) {
- return;
- }
}
// Avoid thread-related overhead when not crossing packages.
@@ -366,11 +362,15 @@ final class LabelVisitor {
private void visitTargetVisibility(Target target, int depth, int count) {
Attribute attribute = null;
if (target instanceof Rule) {
- RuleClass ruleClass = ((Rule) target).getRuleClassObject();
+ Rule rule = (Rule) target;
+ RuleClass ruleClass = rule.getRuleClassObject();
if (!ruleClass.hasAttr("visibility", BuildType.NODEP_LABEL_LIST)) {
return;
}
attribute = ruleClass.getAttributeByName("visibility");
+ if (!edgeFilter.apply(rule, attribute)) {
+ return;
+ }
}
for (Label label : target.getVisibility().getDependencyLabels()) {
@@ -391,6 +391,9 @@ final class LabelVisitor {
AggregatingAttributeMapper.of(rule).visitLabels(new AttributeMap.AcceptsLabelAttribute() {
@Override
public void acceptLabelAttribute(Label label, Attribute attribute) {
+ if (!edgeFilter.apply(rule, attribute)) {
+ return;
+ }
enqueueTarget(rule, attribute, label, depth, count);
}
});
@@ -427,7 +430,7 @@ final class LabelVisitor {
private void visitAspectsIfRequired(
Target from, Attribute attribute, final Target to, int depth, int count) {
ImmutableMultimap<Attribute, Label> labelsFromAspects =
- AspectDefinition.visitAspectsIfRequired(from, attribute, to);
+ AspectDefinition.visitAspectsIfRequired(from, attribute, to, edgeFilter);
// Create an edge from target to the attribute value.
for (Entry<Attribute, Label> entry : labelsFromAspects.entries()) {
enqueueTarget(from, entry.getKey(), entry.getValue(), depth, count);
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/AspectResolver.java b/src/main/java/com/google/devtools/build/lib/query2/output/AspectResolver.java
index 52f9875b1a..712010006c 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/AspectResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/AspectResolver.java
@@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableMultimap;
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.DependencyFilter;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.PackageProvider;
@@ -86,7 +87,8 @@ public interface AspectResolver {
* Compute additional dependencies of target from aspects. This method may load the direct deps
* of target to determine their types. Returns map of attributes and corresponding label values.
*/
- ImmutableMultimap<Attribute, Label> computeAspectDependencies(Target target)
+ ImmutableMultimap<Attribute, Label> computeAspectDependencies(Target target,
+ DependencyFilter dependencyFilter)
throws InterruptedException;
/**
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 47ed795747..1b28bcdbc8 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
@@ -34,7 +34,8 @@ import java.util.Set;
*/
public class ConservativeAspectResolver implements AspectResolver {
@Override
- public ImmutableMultimap<Attribute, Label> computeAspectDependencies(Target target)
+ public ImmutableMultimap<Attribute, Label> computeAspectDependencies(Target target,
+ DependencyFilter dependencyFilter)
throws InterruptedException {
if (!(target instanceof Rule)) {
return ImmutableMultimap.of();
@@ -45,7 +46,7 @@ public class ConservativeAspectResolver implements AspectResolver {
for (Attribute attribute : rule.getAttributes()) {
for (Aspect aspect : attribute.getAspects(rule)) {
AspectDefinition.addAllAttributesOfAspect(
- rule, result, aspect.getDefinition(), DependencyFilter.ALL_DEPS);
+ rule, result, aspect, dependencyFilter);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/NullAspectResolver.java b/src/main/java/com/google/devtools/build/lib/query2/output/NullAspectResolver.java
index c52e4e6c52..1b1f9a3b99 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/NullAspectResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/NullAspectResolver.java
@@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute;
+import com.google.devtools.build.lib.packages.DependencyFilter;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.Target;
@@ -29,7 +30,8 @@ import java.util.Set;
*/
public class NullAspectResolver implements AspectResolver {
@Override
- public ImmutableMultimap<Attribute, Label> computeAspectDependencies(Target target)
+ public ImmutableMultimap<Attribute, Label> computeAspectDependencies(Target target,
+ DependencyFilter dependencyFilter)
throws InterruptedException {
return ImmutableMultimap.of();
}
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 2abe834737..4035d2201c 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
@@ -54,7 +54,8 @@ public class PreciseAspectResolver implements AspectResolver {
}
@Override
- public ImmutableMultimap<Attribute, Label> computeAspectDependencies(Target target)
+ public ImmutableMultimap<Attribute, Label> computeAspectDependencies(Target target,
+ DependencyFilter dependencyFilter)
throws InterruptedException {
Multimap<Attribute, Label> result = LinkedListMultimap.create();
if (target instanceof Rule) {
@@ -64,7 +65,12 @@ public class PreciseAspectResolver implements AspectResolver {
Target toTarget;
try {
toTarget = packageProvider.getTarget(eventHandler, entry.getValue());
- result.putAll(AspectDefinition.visitAspectsIfRequired(target, entry.getKey(), toTarget));
+ result.putAll(
+ AspectDefinition.visitAspectsIfRequired(
+ target,
+ entry.getKey(),
+ toTarget,
+ dependencyFilter));
} catch (NoSuchThingException e) {
// Do nothing. One of target direct deps has an error. The dependency on the BUILD file
// (or one of the files included in it) will be reported in the query result of :BUILD.
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 84554af961..e8fa723003 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
@@ -177,7 +177,7 @@ public class ProtoOutputFormatter extends AbstractUnorderedFormatter {
}
ImmutableMultimap<Attribute, Label> aspectsDependencies =
- aspectResolver.computeAspectDependencies(target);
+ aspectResolver.computeAspectDependencies(target, dependencyFilter);
// Add information about additional attributes from aspects.
for (Entry<Attribute, Collection<Label>> entry : aspectsDependencies.asMap().entrySet()) {
Attribute attribute = entry.getKey();
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 a14facf398..6de67a259e 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
@@ -155,7 +155,8 @@ class XmlOutputFormatter extends AbstractUnorderedFormatter {
inputElem.setAttribute("name", label.toString());
elem.appendChild(inputElem);
}
- for (Label label : aspectResolver.computeAspectDependencies(target).values()) {
+ for (Label label :
+ aspectResolver.computeAspectDependencies(target, dependencyFilter).values()) {
Element inputElem = doc.createElement("rule-input");
inputElem.setAttribute("name", label.toString());
elem.appendChild(inputElem);