diff options
author | 2015-08-12 23:24:21 +0000 | |
---|---|---|
committer | 2015-08-13 14:01:42 +0000 | |
commit | b5c98845052719685ba532419371b07e0e7ed790 (patch) | |
tree | ecafdc41c06372224aeab01805ed1d915a2f8885 /src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java | |
parent | e013c7da6acb1c358f4bcfeb4e4d57ee6d83e0cc (diff) |
TransitiveTraversalFunction now implements "conservative" (a la ConservativeAspectResolver) aspect resolution.
--
MOS_MIGRATED_REVID=100526575
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.java | 30 |
1 files changed, 29 insertions, 1 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 910c8c31b3..1be5863bca 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,10 +13,17 @@ // 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.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.Target; import com.google.devtools.build.lib.skyframe.TransitiveTraversalFunction.DummyAccumulator; import com.google.devtools.build.lib.syntax.Label; @@ -79,7 +86,28 @@ public class TransitiveTraversalFunction extends TransitiveBaseTraversalFunction : TransitiveTraversalValue.unsuccessfulTransitiveTraversal(errorLoadingTarget); } - /** + @Override + protected Iterable<SkyKey> getLabelAspectKeys(Target target, Environment env) { + 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. */ |