aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java
diff options
context:
space:
mode:
authorGravatar Eric Fellheimer <felly@google.com>2015-09-25 21:35:26 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-09-28 11:39:40 +0000
commite27d06308902f44b53809cffd23fc8064e8a7297 (patch)
tree8b04c86cf20edc174bb230e33ab455b38fb9bd73 /src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java
parent7bd3e023e4791468efe06a989645d56c8cf880a4 (diff)
Clean up Aspect checks in query tests.
-- MOS_MIGRATED_REVID=103977080
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java58
1 files changed, 26 insertions, 32 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java
index 955d8ee238..bd28a39b4c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java
@@ -13,25 +13,24 @@
// limitations under the License.
package com.google.devtools.build.lib.skyframe;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.LinkedHashMultimap;
-import com.google.common.collect.Multimap;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.AspectDefinition;
-import com.google.devtools.build.lib.packages.AspectFactory;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
-import com.google.devtools.build.lib.packages.Rule;
+import com.google.devtools.build.lib.packages.NoSuchThingException;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.skyframe.TransitiveTraversalFunction.DummyAccumulator;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import com.google.devtools.build.skyframe.ValueOrException2;
+import java.util.Collection;
import java.util.Map.Entry;
+import java.util.Set;
/**
* This class is like {@link TransitiveTargetFunction}, but the values it returns do not contain
@@ -77,41 +76,36 @@ public class TransitiveTraversalFunction extends TransitiveBaseTraversalFunction
}
}
+ protected Collection<Label> getAspectLabels(Target fromTarget, Attribute attr, Label toLabel,
+ ValueOrException2<NoSuchPackageException, NoSuchTargetException> toVal, Environment env) {
+ try {
+ if (toVal == null) {
+ return ImmutableList.of();
+ }
+ TransitiveTraversalValue traversalVal = (TransitiveTraversalValue) toVal.get();
+ if (traversalVal == null || traversalVal.getProviders() == null) {
+ return ImmutableList.of();
+ }
+ // Retrieve the providers of the dep from the TransitiveTraversalValue, so we can avoid
+ // issuing a dep on its defining Package.
+ Set<String> providers = traversalVal.getProviders();
+ return AspectDefinition.visitAspectsIfRequired(fromTarget, attr, providers).values();
+ } catch (NoSuchThingException e) {
+ // Do nothing. This error was handled when we computed the corresponding
+ // TransitiveTargetValue.
+ return ImmutableList.of();
+ }
+ }
+
@Override
SkyValue computeSkyValue(TargetAndErrorIfAny targetAndErrorIfAny,
DummyAccumulator processedTargets) {
NoSuchTargetException errorLoadingTarget = targetAndErrorIfAny.getErrorLoadingTarget();
return errorLoadingTarget == null
- ? TransitiveTraversalValue.SUCCESSFUL_TRANSITIVE_TRAVERSAL_VALUE
+ ? TransitiveTraversalValue.forTarget(targetAndErrorIfAny.getTarget())
: TransitiveTraversalValue.unsuccessfulTransitiveTraversal(errorLoadingTarget);
}
- @Override
- protected Iterable<SkyKey> getStrictLabelAspectKeys(Target target, Environment env) {
- return ImmutableSet.of();
- }
-
- @Override
- protected Iterable<SkyKey> getConservativeLabelAspectKeys(Target target) {
- if (!(target instanceof Rule)) {
- return ImmutableSet.of();
- }
- Rule rule = (Rule) target;
- Multimap<Attribute, Label> attibuteMap = LinkedHashMultimap.create();
- for (Attribute attribute : rule.getTransitions(Rule.NO_NODEP_ATTRIBUTES).keys()) {
- for (Class<? extends AspectFactory<?, ?, ?>> aspectFactory : attribute.getAspects()) {
- AspectDefinition.addAllAttributesOfAspect(rule, attibuteMap,
- AspectFactory.Util.create(aspectFactory).getDefinition(), Rule.ALL_DEPS);
- }
- }
-
- ImmutableSet.Builder<SkyKey> depKeys = new ImmutableSet.Builder<>();
- for (Label label : attibuteMap.values()) {
- depKeys.add(getKey(label));
- }
- return depKeys.build();
- }
-
/**
* Because {@link TransitiveTraversalFunction} is invoked only when its side-effects are desired,
* this value accumulator has nothing to keep track of.