diff options
author | 2015-11-02 17:17:20 +0000 | |
---|---|---|
committer | 2015-11-02 23:18:55 +0000 | |
commit | 6231d08672f1eceda34455d66b6aaffd18d73e60 (patch) | |
tree | 29daff4db47b5a529aa0a72e4ad5889d1e842651 /src/main/java/com/google/devtools | |
parent | 96f789448481eb7a981ed76c344c42042b3c30cb (diff) |
Parametrize aspect definition with AspectParameters.
--
MOS_MIGRATED_REVID=106848269
Diffstat (limited to 'src/main/java/com/google/devtools')
24 files changed, 145 insertions, 119 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index 8f40fcd68b..76ad8d1878 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java @@ -51,7 +51,6 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.StoredEventHandler; -import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.NativeAspectClass; @@ -892,9 +891,12 @@ public class BuildView { TargetAndConfiguration ctNode = new TargetAndConfiguration(target); ListMultimap<Attribute, Dependency> depNodeNames; try { - depNodeNames = resolver.dependentNodeMap(ctNode, configurations.getHostConfiguration(), - /*aspect=*/null, AspectParameters.EMPTY, - getConfigurableAttributeKeysForTesting(eventHandler, ctNode)); + depNodeNames = + resolver.dependentNodeMap( + ctNode, + configurations.getHostConfiguration(), + /*aspect=*/ null, + getConfigurableAttributeKeysForTesting(eventHandler, ctNode)); } catch (EvalException e) { throw new IllegalStateException(e); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java index a18902b5dc..fcea1537c2 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java @@ -27,7 +27,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.ImmutableSortedKeyListMultimap; import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDefinition; -import com.google.devtools.build.lib.packages.AspectParameters; +import com.google.devtools.build.lib.packages.AspectWithParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault; import com.google.devtools.build.lib.packages.Attribute.SplitTransition; @@ -204,9 +204,9 @@ public abstract class DependencyResolver { * represent those edges. Visibility attributes are only visited if {@code visitVisibility} is * {@code true}. * - * <p>If {@code aspect} is null, returns the dependent nodes of the configured target node - * representing the given target and configuration, otherwise that of the aspect node accompanying - * the aforementioned configured target node for the specified aspect. + * <p>If {@code aspectWithParameters} is null, returns the dependent nodes of the configured + * target node representing the given target and configuration, otherwise that of the aspect + * node accompanying the aforementioned configured target node for the specified aspect. * * <p>The values are not simply labels because this also implements the first step of applying * configuration transitions, namely, split transitions. This needs to be done before the labels @@ -218,8 +218,10 @@ public abstract class DependencyResolver { * dependency. */ public final ListMultimap<Attribute, Dependency> dependentNodeMap( - TargetAndConfiguration node, BuildConfiguration hostConfig, AspectDefinition aspect, - AspectParameters aspectParameters, Set<ConfigMatchingProvider> configConditions) + TargetAndConfiguration node, + BuildConfiguration hostConfig, + AspectWithParameters aspectWithParameters, + Set<ConfigMatchingProvider> configConditions) throws EvalException, InterruptedException { Target target = node.getTarget(); BuildConfiguration config = node.getConfiguration(); @@ -238,8 +240,13 @@ public abstract class DependencyResolver { visitTargetVisibility(node, outgoingEdges.get(null)); Rule rule = (Rule) target; ListMultimap<Attribute, LabelAndConfiguration> labelMap = - resolveAttributes(rule, aspect, config, hostConfig, configConditions); - visitRule(rule, aspect, aspectParameters, labelMap, outgoingEdges); + resolveAttributes( + rule, + aspectWithParameters != null ? aspectWithParameters.getDefinition() : null, + config, + hostConfig, + configConditions); + visitRule(rule, aspectWithParameters, labelMap, outgoingEdges); } else if (target instanceof PackageGroup) { visitPackageGroup(node, (PackageGroup) target, outgoingEdges.get(null)); } else { @@ -502,8 +509,8 @@ public abstract class DependencyResolver { TargetAndConfiguration node, BuildConfiguration hostConfig, Set<ConfigMatchingProvider> configConditions) throws InterruptedException { try { - return ImmutableSet.copyOf(dependentNodeMap(node, hostConfig, /*aspect=*/null, - AspectParameters.EMPTY, configConditions).values()); + return ImmutableSet.copyOf( + dependentNodeMap(node, hostConfig, /*aspect=*/ null, configConditions).values()); } catch (EvalException e) { throw new IllegalStateException(e); } @@ -548,20 +555,22 @@ public abstract class DependencyResolver { } } - private ImmutableSet<AspectWithParameters> requiredAspects(AspectDefinition aspectDefinition, - AspectParameters aspectParameters, Attribute attribute, Target target, Rule originalRule) { + private ImmutableSet<AspectWithParameters> requiredAspects( + AspectWithParameters aspectWithParameters, + Attribute attribute, + Target target, + Rule originalRule) { if (!(target instanceof Rule)) { return ImmutableSet.of(); } Set<AspectWithParameters> aspectCandidates = - extractAspectCandidates(aspectDefinition, aspectParameters, attribute, originalRule); + extractAspectCandidates(aspectWithParameters, attribute, originalRule); RuleClass ruleClass = ((Rule) target).getRuleClassObject(); ImmutableSet.Builder<AspectWithParameters> result = ImmutableSet.builder(); for (AspectWithParameters candidateClass : aspectCandidates) { - AspectClass aspectClass = candidateClass.getAspectClass(); if (Sets.difference( - aspectClass.getDefinition().getRequiredProviders(), + candidateClass.getDefinition().getRequiredProviders(), ruleClass.getAdvertisedProviders()) .isEmpty()) { result.add(candidateClass); @@ -571,21 +580,18 @@ public abstract class DependencyResolver { } private static Set<AspectWithParameters> extractAspectCandidates( - AspectDefinition aspectDefinition, AspectParameters aspectParameters, - Attribute attribute, Rule originalRule) { + AspectWithParameters aspectWithParameters, Attribute attribute, Rule originalRule) { // The order of this set will be deterministic. This is necessary because this order eventually // influences the order in which aspects are merged into the main configured target, which in // turn influences which aspect takes precedence if two emit the same provider (maybe this // should be an error) Set<AspectWithParameters> aspectCandidates = new LinkedHashSet<>(); - for (Map.Entry<AspectClass, AspectParameters> aspectWithParameters : - attribute.getAspectsWithParameters(originalRule).entrySet()) { - AspectClass key = aspectWithParameters.getKey(); - aspectCandidates.add(new AspectWithParameters(key, aspectWithParameters.getValue())); - } - if (aspectDefinition != null) { - for (AspectClass aspect : aspectDefinition.getAttributeAspects().get(attribute.getName())) { - aspectCandidates.add(new AspectWithParameters(aspect, aspectParameters)); + aspectCandidates.addAll(attribute.getAspectsWithParameters(originalRule)); + if (aspectWithParameters != null) { + for (AspectClass aspect : + aspectWithParameters.getDefinition().getAttributeAspects().get(attribute.getName())) { + aspectCandidates.add( + new AspectWithParameters(aspect, aspectWithParameters.getParameters())); } } return aspectCandidates; @@ -593,10 +599,12 @@ public abstract class DependencyResolver { private void visitRule(Rule rule, ListMultimap<Attribute, LabelAndConfiguration> labelMap, ListMultimap<Attribute, Dependency> outgoingEdges) { - visitRule(rule, /*aspect=*/null, AspectParameters.EMPTY, labelMap, outgoingEdges); + visitRule(rule, /*aspect=*/ null, labelMap, outgoingEdges); } - private void visitRule(Rule rule, AspectDefinition aspect, AspectParameters aspectParameters, + private void visitRule( + Rule rule, + AspectWithParameters aspectWithParameters, ListMultimap<Attribute, LabelAndConfiguration> labelMap, ListMultimap<Attribute, Dependency> outgoingEdges) { Preconditions.checkNotNull(labelMap); @@ -637,8 +645,9 @@ public abstract class DependencyResolver { } else { config.evaluateTransition(rule, attribute, toTarget, transitionApplier); } - for (Dependency dependency : transitionApplier.getDependencies(label, - requiredAspects(aspect, aspectParameters, attribute, toTarget, rule))) { + for (Dependency dependency : + transitionApplier.getDependencies( + label, requiredAspects(aspectWithParameters, attribute, toTarget, rule))) { outgoingEdges.put( entry.getKey(), dependency); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java index 90548f175c..a5f2c6bfbd 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java @@ -33,7 +33,6 @@ import com.google.common.collect.MutableClassToInstanceMap; import com.google.devtools.build.lib.actions.ArtifactFactory; import com.google.devtools.build.lib.actions.PackageRootResolver; import com.google.devtools.build.lib.actions.Root; -import com.google.devtools.build.lib.analysis.AspectWithParameters; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.DependencyResolver; @@ -44,6 +43,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; +import com.google.devtools.build.lib.packages.AspectWithParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.Configurator; import com.google.devtools.build.lib.packages.Attribute.SplitTransition; diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java index c01e10d0c6..44e818827a 100644 --- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java @@ -91,7 +91,7 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory { }; @Override - public AspectDefinition getDefinition() { + public AspectDefinition getDefinition(AspectParameters aspectParameters) { return new AspectDefinition.Builder(NAME) .attributeAspect("deps", AndroidStudioInfoAspect.class) .attributeAspect("exports", AndroidStudioInfoAspect.class) diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java b/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java index 834379cfe3..1a3d52d5c6 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java @@ -32,5 +32,5 @@ public interface AspectClass { */ String getName(); - AspectDefinition getDefinition(); + AspectDefinition getDefinition(AspectParameters aspectParameters); } 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 7c5fa83ed3..9b5b5b98f7 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 @@ -132,27 +132,27 @@ public final class AspectDefinition { } RuleClass ruleClass = ((Rule) to).getRuleClassObject(); ImmutableSet<Class<?>> providers = ruleClass.getAdvertisedProviders(); - return visitAspectsIfRequired(from, attribute, toStringSet(providers)); + return visitAspectsIfRequired((Rule) from, attribute, toStringSet(providers)); } /** * Returns the attribute -> set of labels that are provided by aspects of attribute. */ public static ImmutableMultimap<Attribute, Label> visitAspectsIfRequired( - Target from, Attribute attribute, Set<String> advertisedProviders) { + Rule from, Attribute attribute, Set<String> advertisedProviders) { if (advertisedProviders.isEmpty()) { return ImmutableMultimap.of(); } LinkedHashMultimap<Attribute, Label> result = LinkedHashMultimap.create(); - for (AspectClass candidateClass : attribute.getAspects()) { + for (AspectWithParameters candidateClass : attribute.getAspectsWithParameters(from)) { // Check if target satisfies condition for this aspect (has to provide all required // TransitiveInfoProviders) if (!advertisedProviders.containsAll( candidateClass.getDefinition().getRequiredProviderNames())) { continue; } - addAllAttributesOfAspect((Rule) from, result, candidateClass.getDefinition(), Rule.ALL_DEPS); + addAllAttributesOfAspect(from, result, candidateClass.getDefinition(), Rule.ALL_DEPS); } return ImmutableMultimap.copyOf(result); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectWithParameters.java b/src/main/java/com/google/devtools/build/lib/packages/AspectWithParameters.java index 0d35c98e6a..6f47f9a18c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AspectWithParameters.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AspectWithParameters.java @@ -11,18 +11,16 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -package com.google.devtools.build.lib.analysis; +package com.google.devtools.build.lib.packages; import com.google.common.base.Preconditions; -import com.google.devtools.build.lib.packages.AspectClass; -import com.google.devtools.build.lib.packages.AspectParameters; import java.util.Objects; /** - * Wrapper around {@link ConfiguredAspectFactory} class and {@link AspectParameters}. Aspects are + * Wrapper around {@link AspectClass} class and {@link AspectParameters}. Aspects are * created with help of aspect factory instances and parameters are used to configure them, so we - * have to keep them together. + * have to keep them together. */ public final class AspectWithParameters { // TODO(bazel-team): class objects are not really hashable or comparable for equality other than @@ -32,14 +30,14 @@ public final class AspectWithParameters { private final AspectParameters parameters; public AspectWithParameters(AspectClass aspect, AspectParameters parameters) { + Preconditions.checkNotNull(aspect); Preconditions.checkNotNull(parameters); this.aspectClass = aspect; this.parameters = parameters; } public AspectWithParameters(AspectClass aspect) { - this.aspectClass = aspect; - this.parameters = AspectParameters.EMPTY; + this(aspect, AspectParameters.EMPTY); } /** @@ -78,4 +76,8 @@ public final class AspectWithParameters { public String toString() { return String.format("AspectWithParameters %s(%s)", aspectClass, parameters); } + + public AspectDefinition getDefinition() { + return aspectClass.getDefinition(parameters); + } } diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java index b501579c44..d11efff42b 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java @@ -20,7 +20,6 @@ import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; @@ -1346,10 +1345,12 @@ public final class Attribute implements Comparable<Attribute> { /** * Returns set of pairs of aspect factories and corresponding aspect parameters. */ - public ImmutableMap<AspectClass, AspectParameters> getAspectsWithParameters(Rule rule) { - ImmutableMap.Builder<AspectClass, AspectParameters> builder = ImmutableMap.builder(); + public ImmutableList<AspectWithParameters> getAspectsWithParameters(Rule rule) { + ImmutableList.Builder<AspectWithParameters> builder = ImmutableList.builder(); for (RuleAspect aspect : aspects) { - builder.put(aspect.getAspectFactory(), aspect.getParametersExtractor().apply(rule)); + builder.add( + new AspectWithParameters( + aspect.getAspectFactory(), aspect.getParametersExtractor().apply(rule))); } return builder.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeAspectClass.java b/src/main/java/com/google/devtools/build/lib/packages/NativeAspectClass.java index 7477ea0184..59bc6af3e1 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/NativeAspectClass.java +++ b/src/main/java/com/google/devtools/build/lib/packages/NativeAspectClass.java @@ -34,8 +34,8 @@ public final class NativeAspectClass<T extends NativeAspectClass.NativeAspectFac } @Override - public AspectDefinition getDefinition() { - return newInstance().getDefinition(); + public AspectDefinition getDefinition(AspectParameters aspectParameters) { + return newInstance().getDefinition(aspectParameters); } public T newInstance() { @@ -66,6 +66,6 @@ public final class NativeAspectClass<T extends NativeAspectClass.NativeAspectFac /** * Returns the definition of the aspect. */ - AspectDefinition getDefinition(); + AspectDefinition getDefinition(AspectParameters aspectParameters); } } 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 9825e2df06..9d21980fdc 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 @@ -691,7 +691,7 @@ public final class Rule implements Target { BinaryPredicate<Rule, Attribute> predicate) { LinkedHashMultimap<Attribute, Label> labels = LinkedHashMultimap.create(); for (Attribute attribute : this.getAttributes()) { - for (AspectClass candidateClass : attribute.getAspects()) { + for (AspectWithParameters candidateClass : attribute.getAspectsWithParameters(this)) { AspectDefinition.addAllAttributesOfAspect( Rule.this, labels, candidateClass.getDefinition(), predicate); } 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 7404126739..3f210f114e 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 @@ -18,8 +18,8 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Multimap; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDefinition; +import com.google.devtools.build.lib.packages.AspectWithParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.Target; @@ -38,12 +38,13 @@ public class ConservativeAspectResolver implements AspectResolver { if (!(target instanceof Rule)) { return ImmutableMultimap.of(); } + Rule rule = (Rule) target; Multimap<Attribute, Label> result = LinkedHashMultimap.create(); - for (Attribute attribute : ((Rule) target).getAttributes()) { - for (AspectClass aspectFactory : attribute.getAspects()) { + for (Attribute attribute : rule.getAttributes()) { + for (AspectWithParameters aspectWithParameters : attribute.getAspectsWithParameters(rule)) { AspectDefinition.addAllAttributesOfAspect( - (Rule) target, result, aspectFactory.getDefinition(), Rule.ALL_DEPS); + rule, result, aspectWithParameters.getDefinition(), Rule.ALL_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 011cd9c3d5..3067006d21 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 @@ -20,8 +20,8 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.EventHandler; -import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDefinition; +import com.google.devtools.build.lib.packages.AspectWithParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.NoSuchPackageException; import com.google.devtools.build.lib.packages.NoSuchThingException; @@ -94,9 +94,10 @@ public class PreciseAspectResolver implements AspectResolver { .getTransitions( new BinaryPredicate<Rule, Attribute>() { @Override - public boolean apply(@Nullable Rule rule, @Nullable Attribute attribute) { - for (AspectClass aspectClass : attribute.getAspects()) { - if (!aspectClass.getDefinition().getAttributes().isEmpty()) { + public boolean apply(@Nullable Rule rule, Attribute attribute) { + for (AspectWithParameters aspectWithParameters : + attribute.getAspectsWithParameters(rule)) { + if (!aspectWithParameters.getDefinition().getAttributes().isEmpty()) { return true; } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java index b27fb45227..80185e0c2f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java @@ -46,6 +46,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDefinition; +import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition; import com.google.devtools.build.lib.packages.Attribute.LateBoundLabel; @@ -666,7 +667,7 @@ public class SkylarkRuleClassFunctions { } @Override - public AspectDefinition getDefinition() { + public AspectDefinition getDefinition(AspectParameters aspectParameters) { return aspectDefinition; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java index e3e0856d28..b2a865b88a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java @@ -77,7 +77,7 @@ public class AndroidNeverlinkAspect implements ConfiguredNativeAspectFactory { } @Override - public AspectDefinition getDefinition() { + public AspectDefinition getDefinition(AspectParameters aspectParameters) { AspectDefinition.Builder builder = new AspectDefinition.Builder("AndroidNeverlinkAspect"); for (String attribute : ATTRIBUTES) { builder.attributeAspect(attribute, AndroidNeverlinkAspect.class); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java index 7d7ff0581c..b792bc2b97 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java @@ -52,7 +52,7 @@ import com.google.devtools.build.lib.vfs.PathFragment; public abstract class AbstractJ2ObjcProtoAspect implements ConfiguredNativeAspectFactory { public static final String NAME = "J2ObjcProtoAspect"; - public AspectDefinition getDefinition() { + public AspectDefinition getDefinition(AspectParameters aspectParameters) { AspectDefinition.Builder builder = new AspectDefinition.Builder("J2ObjcProtoAspect") .requireProvider(ProtoSourcesProvider.class) .attributeAspect("deps", getClass()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java index 9fc55ccf67..410d6d4bf5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java @@ -66,7 +66,7 @@ public class J2ObjcAspect implements ConfiguredNativeAspectFactory { } @Override - public AspectDefinition getDefinition() { + public AspectDefinition getDefinition(AspectParameters aspectParameters) { return addAttributeAspects(new AspectDefinition.Builder("J2ObjCAspect")) .requireProvider(JavaSourceInfoProvider.class) .requireProvider(JavaCompilationArgsProvider.class) diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java index 13764f62dc..1ddd626164 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java @@ -181,8 +181,7 @@ public final class AspectFunction implements SkyFunction { env, resolver, ctgValue, - key.getAspect().getDefinition(), - key.getParameters(), + key.getAspectWithParameters(), configConditions, ruleClassProvider, view.getHostConfiguration(ctgValue.getConfiguration()), diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java index 318b6683be..4b0d6785a5 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java @@ -17,7 +17,6 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.base.Objects; import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.analysis.Aspect; -import com.google.devtools.build.lib.analysis.AspectWithParameters; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; @@ -25,6 +24,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectParameters; +import com.google.devtools.build.lib.packages.AspectWithParameters; import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; @@ -32,7 +32,7 @@ import com.google.devtools.build.skyframe.SkyKey; import javax.annotation.Nullable; /** - * An aspect in the context of the Skyframe graph. + * An aspectWithParameters in the context of the Skyframe graph. */ public final class AspectValue extends ActionLookupValue { @@ -50,8 +50,7 @@ public final class AspectValue extends ActionLookupValue { public static final class AspectKey extends AspectValueKey { private final Label label; private final BuildConfiguration configuration; - private final AspectWithParameters aspect; - private final String aspectName; + private final AspectWithParameters aspectWithParameters; protected AspectKey( Label label, @@ -60,8 +59,7 @@ public final class AspectValue extends ActionLookupValue { AspectParameters parameters) { this.label = label; this.configuration = configuration; - this.aspectName = aspectClass.getName(); - this.aspect = new AspectWithParameters(aspectClass, parameters); + this.aspectWithParameters = new AspectWithParameters(aspectClass, parameters); } @Override @@ -76,16 +74,20 @@ public final class AspectValue extends ActionLookupValue { } public AspectClass getAspect() { - return aspect.getAspectClass(); + return aspectWithParameters.getAspectClass(); } @Nullable public AspectParameters getParameters() { - return aspect.getParameters(); + return aspectWithParameters.getParameters(); + } + + public AspectWithParameters getAspectWithParameters() { + return aspectWithParameters; } public String getDescription() { - return String.format("%s of %s", aspect.getAspectClass().getName(), getLabel()); + return String.format("%s of %s", aspectWithParameters.getAspectClass().getName(), getLabel()); } public BuildConfiguration getConfiguration() { @@ -94,7 +96,7 @@ public final class AspectValue extends ActionLookupValue { @Override public int hashCode() { - return Objects.hashCode(label, configuration, aspect); + return Objects.hashCode(label, configuration, aspectWithParameters); } @Override @@ -110,19 +112,23 @@ public final class AspectValue extends ActionLookupValue { AspectKey that = (AspectKey) other; return Objects.equal(label, that.label) && Objects.equal(configuration, that.configuration) - && Objects.equal(aspect, that.aspect); + && Objects.equal(aspectWithParameters, that.aspectWithParameters); } @Override public String toString() { - return label + "#" + aspect.getAspectClass().getName() + " " - + (configuration == null ? "null" : configuration.checksum()) + " " - + aspect.getParameters(); + return label + + "#" + + aspectWithParameters.getAspectClass().getName() + + " " + + (configuration == null ? "null" : configuration.checksum()) + + " " + + aspectWithParameters.getParameters(); } } /** - * The key for a skylark aspect. + * The key for a skylark aspectWithParameters. */ public static class SkylarkAspectLoadingKey extends AspectValueKey { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java index 4493229290..d139ea6215 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java @@ -27,7 +27,6 @@ import com.google.devtools.build.lib.actions.Actions; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.Aspect; -import com.google.devtools.build.lib.analysis.AspectWithParameters; import com.google.devtools.build.lib.analysis.CachingAnalysisEnvironment; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.DependencyResolver.Dependency; @@ -45,9 +44,8 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.StoredEventHandler; -import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDefinition; -import com.google.devtools.build.lib.packages.AspectParameters; +import com.google.devtools.build.lib.packages.AspectWithParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException; import com.google.devtools.build.lib.packages.BuildType; @@ -186,9 +184,16 @@ final class ConfiguredTargetFunction implements SkyFunction { return null; } - ListMultimap<Attribute, ConfiguredTarget> depValueMap = computeDependencies(env, resolver, - ctgValue, null, AspectParameters.EMPTY, configConditions, ruleClassProvider, - view.getHostConfiguration(configuration), transitivePackages); + ListMultimap<Attribute, ConfiguredTarget> depValueMap = + computeDependencies( + env, + resolver, + ctgValue, + null, + configConditions, + ruleClassProvider, + view.getHostConfiguration(configuration), + transitivePackages); ConfiguredTargetValue ans = createConfiguredTarget( view, env, target, configuration, depValueMap, configConditions, transitivePackages); return ans; @@ -206,34 +211,34 @@ final class ConfiguredTargetFunction implements SkyFunction { * * <p>Returns null if Skyframe hasn't evaluated the required dependencies yet. In this case, the * caller should also return null to Skyframe. - * - * @param env the Skyframe environment + * @param env the Skyframe environment * @param resolver The dependency resolver * @param ctgValue The label and the configuration of the node - * @param aspectDefinition the aspect of the node (if null, the node is a configured target, - * otherwise it's an aspect) - * @param aspectParameters additional parameters for aspect construction + * @param aspectWithParameters * @param configConditions the configuration conditions for evaluating the attributes of the node * @param ruleClassProvider rule class provider for determining the right configuration fragments * to apply to deps * @param hostConfiguration the host configuration. There's a noticeable performance hit from * instantiating this on demand for every dependency that wants it, so it's best to compute * the host configuration as early as possible and pass this reference to all consumers - * without involving Skyframe. - * @return an attribute -> direct dependency multimap - */ + * */ @Nullable static ListMultimap<Attribute, ConfiguredTarget> computeDependencies( - Environment env, SkyframeDependencyResolver resolver, TargetAndConfiguration ctgValue, - AspectDefinition aspectDefinition, AspectParameters aspectParameters, - Set<ConfigMatchingProvider> configConditions, RuleClassProvider ruleClassProvider, - BuildConfiguration hostConfiguration, NestedSetBuilder<Package> transitivePackages) + Environment env, + SkyframeDependencyResolver resolver, + TargetAndConfiguration ctgValue, + AspectWithParameters aspectWithParameters, + Set<ConfigMatchingProvider> configConditions, + RuleClassProvider ruleClassProvider, + BuildConfiguration hostConfiguration, + NestedSetBuilder<Package> transitivePackages) throws DependencyEvaluationException, AspectCreationException, InterruptedException { // Create the map from attributes to list of (target, configuration) pairs. ListMultimap<Attribute, Dependency> depValueNames; try { - depValueNames = resolver.dependentNodeMap(ctgValue, hostConfiguration, aspectDefinition, - aspectParameters, configConditions); + depValueNames = + resolver.dependentNodeMap( + ctgValue, hostConfiguration, aspectWithParameters, configConditions); } catch (EvalException e) { env.getListener().handle(Event.error(e.getLocation(), e.getMessage())); throw new DependencyEvaluationException(new ConfiguredValueCreationException(e.print())); @@ -509,8 +514,7 @@ final class ConfiguredTargetFunction implements SkyFunction { } ConfiguredTarget depConfiguredTarget = configuredTargetMap.get(depKey); for (AspectWithParameters depAspect : dep.getAspects()) { - AspectClass depAspectClass = depAspect.getAspectClass(); - if (!aspectMatchesConfiguredTarget(depConfiguredTarget, depAspectClass)) { + if (!aspectMatchesConfiguredTarget(depConfiguredTarget, depAspect)) { continue; } @@ -525,7 +529,7 @@ final class ConfiguredTargetFunction implements SkyFunction { throw new AspectCreationException( String.format( "Evaluation of aspect %s on %s failed: %s", - depAspectClass.getDefinition().getName(), + depAspect.getDefinition().getName(), dep.getLabel(), e.toString())); } @@ -550,7 +554,7 @@ final class ConfiguredTargetFunction implements SkyFunction { } private static boolean aspectMatchesConfiguredTarget( - ConfiguredTarget dep, AspectClass aspectClass) { + ConfiguredTarget dep, AspectWithParameters aspectClass) { AspectDefinition aspectDefinition = aspectClass.getDefinition(); for (Class<?> provider : aspectDefinition.getRequiredProviders()) { if (dep.getProvider(provider.asSubclass(TransitiveInfoProvider.class)) == null) { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java index d227a43a1d..48444776b0 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java @@ -27,7 +27,6 @@ import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.RawAttributeMapper; @@ -102,8 +101,9 @@ public class PostConfiguredTargetFunction implements SkyFunction { try { BuildConfiguration hostConfiguration = buildViewProvider.getSkyframeBuildView().getHostConfiguration(ct.getConfiguration()); - deps = resolver.dependentNodeMap(ctgValue, hostConfiguration, /*aspect=*/null, - AspectParameters.EMPTY, configConditions); + deps = + resolver.dependentNodeMap( + ctgValue, hostConfiguration, /*aspect=*/ null, configConditions); if (ct.getConfiguration() != null && ct.getConfiguration().useDynamicConfigurations()) { deps = ConfiguredTargetFunction.trimConfigurations(env, ctgValue, deps, hostConfiguration, ruleClassProvider); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index f13505b3d4..80d52b5f77 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -49,7 +49,6 @@ import com.google.devtools.build.lib.actions.PackageRootResolutionException; import com.google.devtools.build.lib.actions.ResourceManager; import com.google.devtools.build.lib.actions.Root; import com.google.devtools.build.lib.analysis.Aspect; -import com.google.devtools.build.lib.analysis.AspectWithParameters; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.BuildView.Options; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; @@ -75,6 +74,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.Reporter; +import com.google.devtools.build.lib.packages.AspectWithParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException; import com.google.devtools.build.lib.packages.NoSuchPackageException; 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 8623b78351..c3ef9485b9 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 @@ -174,7 +174,7 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky ValueOrException2<NoSuchPackageException, NoSuchTargetException> value = labelDepMap.get(entry.getValue()); for (Label label : - getAspectLabels(target, entry.getKey(), entry.getValue(), value, env)) { + getAspectLabels((Rule) target, entry.getKey(), entry.getValue(), value, env)) { depKeys.add(getKey(label)); } } @@ -184,7 +184,7 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky /** Get the Aspect-related Label deps for the given edge. */ protected abstract Collection<Label> getAspectLabels( - Target fromTarget, + Rule fromRule, Attribute attr, Label toLabel, ValueOrException2<NoSuchPackageException, NoSuchTargetException> toVal, diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java index bc39fe11e5..280e1a2277 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java @@ -150,7 +150,7 @@ public class TransitiveTargetFunction return builder.build(errorLoadingTarget); } - protected Collection<Label> getAspectLabels(Target fromTarget, Attribute attr, Label toLabel, + protected Collection<Label> getAspectLabels(Rule fromRule, Attribute attr, Label toLabel, ValueOrException2<NoSuchPackageException, NoSuchTargetException> toVal, Environment env) { SkyKey packageKey = PackageValue.key(toLabel.getPackageIdentifier()); @@ -167,7 +167,7 @@ public class TransitiveTargetFunction return ImmutableList.of(); } Target dependedTarget = pkgValue.getPackage().getTarget(toLabel.getName()); - return AspectDefinition.visitAspectsIfRequired(fromTarget, attr, dependedTarget).values(); + return AspectDefinition.visitAspectsIfRequired(fromRule, attr, dependedTarget).values(); } catch (NoSuchThingException e) { // Do nothing. This error was handled when we computed the corresponding // TransitiveTargetValue. 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 abd6b5c598..66820ca47c 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 @@ -23,7 +23,7 @@ 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.NoSuchThingException; -import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.skyframe.TransitiveTraversalFunction.FirstErrorMessageAccumulator; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; @@ -83,7 +83,7 @@ public class TransitiveTraversalFunction } } - protected Collection<Label> getAspectLabels(Target fromTarget, Attribute attr, Label toLabel, + protected Collection<Label> getAspectLabels(Rule fromRule, Attribute attr, Label toLabel, ValueOrException2<NoSuchPackageException, NoSuchTargetException> toVal, Environment env) { try { if (toVal == null) { @@ -96,7 +96,7 @@ public class TransitiveTraversalFunction // 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(); + return AspectDefinition.visitAspectsIfRequired(fromRule, attr, providers).values(); } catch (NoSuchThingException e) { // Do nothing. This error was handled when we computed the corresponding // TransitiveTargetValue. |