TransitiveTraversalFunction now implements "conservative" (a la ConservativeAspectResolver) aspect resolution.
--
MOS_MIGRATED_REVID=100526575
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 3648455..fab8842 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
@@ -15,11 +15,8 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
-import com.google.common.collect.Multimap;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
-import com.google.devtools.build.lib.packages.AspectDefinition;
-import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.InputFile;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
@@ -37,7 +34,6 @@
import com.google.devtools.build.skyframe.SkyValue;
import com.google.devtools.build.skyframe.ValueOrException2;
-import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
@@ -143,32 +139,12 @@
return Label.print(((Label) skyKey.argument()));
}
- private Iterable<SkyKey> getLabelAspectKeys(Target target, Environment env) {
- List<SkyKey> depKeys = Lists.newArrayList();
- if (target instanceof Rule) {
- Multimap<Attribute, Label> transitions =
- ((Rule) target).getTransitions(Rule.NO_NODEP_ATTRIBUTES);
- for (Entry<Attribute, Label> entry : transitions.entries()) {
- SkyKey packageKey = PackageValue.key(entry.getValue().getPackageIdentifier());
- try {
- PackageValue pkgValue = (PackageValue) env.getValueOrThrow(packageKey,
- NoSuchThingException.class);
- if (pkgValue == null) {
- continue;
- }
- Collection<Label> labels = AspectDefinition.visitAspectsIfRequired(target, entry.getKey(),
- pkgValue.getPackage().getTarget(entry.getValue().getName())).values();
- for (Label label : labels) {
- depKeys.add(getKey(label));
- }
- } catch (NoSuchThingException e) {
- // Do nothing. This error was handled when we computed the corresponding
- // TransitiveTargetValue.
- }
- }
- }
- return depKeys;
- }
+ /**
+ * Return an Iterable of SkyKeys corresponding to the Aspect-related dependencies of target.
+ *
+ * <p>This method may return a conservative over-approximation of the exact set.
+ */
+ protected abstract Iterable<SkyKey> getLabelAspectKeys(Target target, Environment env);
private Iterable<SkyKey> getLabelDepKeys(Target target) {
List<SkyKey> depKeys = Lists.newArrayList();