Names of extra-action protos now take into account all aspect names.
If an Aspect registered an action that an extra-action is
shadowing, its name is used when creating the extra-action's ID and
name.
Since recently, an aspect can see other aspects applied to the same
target. This CL record the names of other aspects applied to the target
as well, disambiguating the action owners.
--
PiperOrigin-RevId: 142264153
MOS_MIGRATED_REVID=142264153
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 202be7b..937cf74 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -53,7 +53,7 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.Location;
-import com.google.devtools.build.lib.packages.AspectParameters;
+import com.google.devtools.build.lib.packages.AspectDescriptor;
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.SplitTransition;
@@ -151,8 +151,7 @@
private static final String HOST_CONFIGURATION_PROGRESS_TAG = "for host";
private final Rule rule;
- @Nullable private final String aspectName;
- @Nullable private final AspectParameters aspectParameters;
+ private final ImmutableList<AspectDescriptor> aspectDescriptors;
private final ListMultimap<String, ConfiguredTarget> targetMap;
private final ListMultimap<String, ConfiguredFilesetEntry> filesetEntryMap;
private final ImmutableMap<Label, ConfigMatchingProvider> configConditions;
@@ -183,8 +182,7 @@
super(builder.env, builder.rule, builder.configuration, builder.prerequisiteMap.get(null),
builder.visibility);
this.rule = builder.rule;
- this.aspectName = builder.getAspectName();
- this.aspectParameters = builder.getAspectParameters();
+ this.aspectDescriptors = builder.aspectDescriptors;
this.configurationFragmentPolicy = builder.configurationFragmentPolicy;
this.universalFragment = universalFragment;
this.targetMap = targetMap;
@@ -334,7 +332,7 @@
@Override
public ActionOwner getActionOwner() {
if (actionOwner == null) {
- actionOwner = createActionOwner(rule, aspectName, aspectParameters, getConfiguration());
+ actionOwner = createActionOwner(rule, aspectDescriptors, getConfiguration());
}
return actionOwner;
}
@@ -412,13 +410,11 @@
@VisibleForTesting
public static ActionOwner createActionOwner(
Rule rule,
- @Nullable String aspectName,
- @Nullable AspectParameters aspectParameters,
+ ImmutableList<AspectDescriptor> aspectDescriptors,
BuildConfiguration configuration) {
return ActionOwner.create(
rule.getLabel(),
- aspectName,
- aspectParameters,
+ aspectDescriptors,
rule.getLocation(),
configuration.getMnemonic(),
rule.getTargetKind(),
@@ -1434,28 +1430,25 @@
private final BuildConfiguration configuration;
private final BuildConfiguration hostConfiguration;
private final PrerequisiteValidator prerequisiteValidator;
- @Nullable private final String aspectName;
- @Nullable private final AspectParameters aspectParameters;
private final ErrorReporter reporter;
private OrderedSetMultimap<Attribute, ConfiguredTarget> prerequisiteMap;
private ImmutableMap<Label, ConfigMatchingProvider> configConditions;
private NestedSet<PackageSpecification> visibility;
private ImmutableMap<String, Attribute> aspectAttributes;
private ImmutableBiMap<String, Class<? extends TransitiveInfoProvider>> skylarkProviderRegistry;
+ private ImmutableList<AspectDescriptor> aspectDescriptors;
Builder(
AnalysisEnvironment env,
Rule rule,
- @Nullable String aspectName,
- @Nullable AspectParameters aspectParameters,
+ ImmutableList<AspectDescriptor> aspectDescriptors,
BuildConfiguration configuration,
BuildConfiguration hostConfiguration,
PrerequisiteValidator prerequisiteValidator,
ConfigurationFragmentPolicy configurationFragmentPolicy) {
this.env = Preconditions.checkNotNull(env);
this.rule = Preconditions.checkNotNull(rule);
- this.aspectName = aspectName;
- this.aspectParameters = aspectParameters;
+ this.aspectDescriptors = aspectDescriptors;
this.configurationFragmentPolicy = Preconditions.checkNotNull(configurationFragmentPolicy);
this.configuration = Preconditions.checkNotNull(configuration);
this.hostConfiguration = Preconditions.checkNotNull(hostConfiguration);
@@ -1736,7 +1729,7 @@
/** Returns whether the context being constructed is for the evaluation of an aspect. */
public boolean forAspect() {
- return aspectName != null;
+ return !aspectDescriptors.isEmpty();
}
public Rule getRule() {
@@ -1747,9 +1740,11 @@
* Returns a rule class name suitable for log messages, including an aspect name if applicable.
*/
public String getRuleClassNameForLogging() {
- return aspectName != null
- ? aspectName + " aspect on " + rule.getRuleClass()
- : rule.getRuleClass();
+ if (aspectDescriptors.isEmpty()) {
+ return rule.getRuleClass();
+ }
+
+ return Joiner.on(",").join(aspectDescriptors) + " aspect on " + rule.getRuleClass();
}
public BuildConfiguration getConfiguration() {
@@ -1959,16 +1954,6 @@
prerequisiteValidator.validate(this, prerequisite, attribute);
}
}
-
- @Nullable
- public AspectParameters getAspectParameters() {
- return aspectParameters;
- }
-
- @Nullable
- public String getAspectName() {
- return aspectName;
- }
}
/**