diff options
Diffstat (limited to 'src/main/java/com')
21 files changed, 105 insertions, 84 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java index 3dc3e4be40..a0dda9e7a1 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java +++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; @@ -44,6 +45,7 @@ import com.google.devtools.build.skyframe.SkyFunction; import java.io.IOException; import java.util.Collection; import java.util.Map; +import java.util.Map.Entry; import javax.annotation.Nullable; /** @@ -470,12 +472,29 @@ public abstract class AbstractAction implements Action, SkylarkValue { .setOwner(owner.getLabel().toString()) .setId(getKey()) .setMnemonic(getMnemonic()); - if (owner.getAspectName() != null) { - result.setAspectName(owner.getAspectName()); + Iterable<AspectDescriptor> aspectDescriptors = owner.getAspectDescriptors(); + AspectDescriptor lastAspect = null; + + for (AspectDescriptor aspectDescriptor : aspectDescriptors) { + ExtraActionInfo.AspectDescriptor.Builder builder = + ExtraActionInfo.AspectDescriptor.newBuilder() + .setAspectName(aspectDescriptor.getAspectClass().getName()); + for (Entry<String, Collection<String>> entry : + aspectDescriptor.getParameters().getAttributes().asMap().entrySet()) { + builder.putAspectParameters( + entry.getKey(), + ExtraActionInfo.AspectDescriptor.StringList.newBuilder() + .addAllValue(entry.getValue()) + .build() + ); + } + lastAspect = aspectDescriptor; } - if (owner.getAspectParameters() != null) { + if (lastAspect != null) { + result.setAspectName(lastAspect.getAspectClass().getName()); + for (Map.Entry<String, Collection<String>> entry : - owner.getAspectParameters().getAttributes().asMap().entrySet()) { + lastAspect.getParameters().getAttributes().asMap().entrySet()) { result.putAspectParameters( entry.getKey(), ExtraActionInfo.StringList.newBuilder().addAllValue(entry.getValue()).build()); diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java index b641a4d31a..72ca914811 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java @@ -14,10 +14,11 @@ package com.google.devtools.build.lib.actions; import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; 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.util.Preconditions; import javax.annotation.Nullable; @@ -33,12 +34,12 @@ import javax.annotation.Nullable; public abstract class ActionOwner { /** An action owner for special cases. Usage is strongly discouraged. */ public static final ActionOwner SYSTEM_ACTION_OWNER = - ActionOwner.create(null, null, null, null, "system", "empty target kind", "system", null); + ActionOwner.create(null, ImmutableList.<AspectDescriptor>of(), + null, "system", "empty target kind", "system", null); public static ActionOwner create( @Nullable Label label, - @Nullable String aspectName, - @Nullable AspectParameters aspectParameters, + ImmutableList<AspectDescriptor> aspectDescriptors, @Nullable Location location, @Nullable String mnemonic, @Nullable String targetKind, @@ -47,8 +48,7 @@ public abstract class ActionOwner { return new AutoValue_ActionOwner( location, label, - aspectName, - aspectParameters, + aspectDescriptors, mnemonic, Preconditions.checkNotNull(configurationChecksum), targetKind, @@ -63,11 +63,7 @@ public abstract class ActionOwner { @Nullable public abstract Label getLabel(); - @Nullable - public abstract String getAspectName(); - - @Nullable - public abstract AspectParameters getAspectParameters(); + public abstract ImmutableList<AspectDescriptor> getAspectDescriptors(); /** Returns the configuration's mnemonic. */ @Nullable 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 8f065efa4d..19e972c4fe 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,6 +51,7 @@ 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.AspectClass; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.BuildType; @@ -1105,8 +1106,7 @@ public class BuildView { return new RuleContext.Builder( env, (Rule) target.getTarget(), - null, - null, + ImmutableList.<AspectDescriptor>of(), targetConfig, configurations.getHostConfiguration(), ruleClassProvider.getPrerequisiteValidator(), diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java index 6196bce78c..ff90a87a64 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; 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.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor.Key; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java index fdc0c74684..11d03fa117 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java @@ -14,7 +14,11 @@ package com.google.devtools.build.lib.analysis; +import static com.google.common.collect.Iterables.transform; + +import com.google.common.base.Function; import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ArtifactFactory; @@ -32,6 +36,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.packages.Aspect; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy; import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy; @@ -227,8 +232,7 @@ public final class ConfiguredTargetFactory { new RuleContext.Builder( env, rule, - null, - null, + ImmutableList.<AspectDescriptor>of(), configuration, hostConfiguration, ruleClassProvider.getPrerequisiteValidator(), @@ -304,6 +308,13 @@ public final class ConfiguredTargetFactory { return result.toString(); } + private static final Function<Aspect, AspectDescriptor> ASPECT_TO_DESCRIPTOR = + new Function<Aspect, AspectDescriptor>() { + @Override + public AspectDescriptor apply(Aspect aspect) { + return aspect.getDescriptor(); + } + }; /** * Constructs an {@link ConfiguredAspect}. Returns null if an error occurs; in that case, * {@code aspectFactory} should call one of the error reporting methods of {@link RuleContext}. @@ -311,6 +322,7 @@ public final class ConfiguredTargetFactory { public ConfiguredAspect createAspect( AnalysisEnvironment env, ConfiguredTarget associatedTarget, + ImmutableList<Aspect> aspectPath, ConfiguredAspectFactory aspectFactory, Aspect aspect, OrderedSetMultimap<Attribute, ConfiguredTarget> prerequisiteMap, @@ -321,8 +333,7 @@ public final class ConfiguredTargetFactory { RuleContext.Builder builder = new RuleContext.Builder( env, associatedTarget.getTarget().getAssociatedRule(), - aspect.getAspectClass().getName(), - aspect.getParameters(), + ImmutableList.copyOf(transform(aspectPath, ASPECT_TO_DESCRIPTOR)), aspectConfiguration, hostConfiguration, ruleClassProvider.getPrerequisiteValidator(), diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java index 755b991d86..d72bced27a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java @@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.util.Preconditions; import java.util.Map; 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 9fadc28fc3..60d274787a 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 @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.packages.Aspect; import com.google.devtools.build.lib.packages.AspectClass; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault; import com.google.devtools.build.lib.packages.AttributeMap; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java index e067612835..d5a483767c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.analysis; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor.Key; import java.util.ArrayList; 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 202be7b633..937cf74c45 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.collect.nestedset.NestedSet; 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 @@ public final class RuleContext extends TargetContext 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 @@ public final class RuleContext extends TargetContext 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 @@ public final class RuleContext extends TargetContext @Override public ActionOwner getActionOwner() { if (actionOwner == null) { - actionOwner = createActionOwner(rule, aspectName, aspectParameters, getConfiguration()); + actionOwner = createActionOwner(rule, aspectDescriptors, getConfiguration()); } return actionOwner; } @@ -412,13 +410,11 @@ public final class RuleContext extends TargetContext @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 @@ public final class RuleContext extends TargetContext 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 @@ public final class RuleContext extends TargetContext /** 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 @@ public final class RuleContext extends TargetContext * 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 @@ public final class RuleContext extends TargetContext prerequisiteValidator.validate(this, prerequisite, attribute); } } - - @Nullable - public AspectParameters getAspectParameters() { - return aspectParameters; - } - - @Nullable - public String getAspectName() { - return aspectName; - } } /** 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 c4689c90f2..05da5c83cb 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.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.MutableClassToInstanceMap; import com.google.devtools.build.lib.actions.Root; -import com.google.devtools.build.lib.analysis.AspectDescriptor; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.Dependency; @@ -44,6 +43,7 @@ import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; +import com.google.devtools.build.lib.packages.AspectDescriptor; 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/packages/Aspect.java b/src/main/java/com/google/devtools/build/lib/packages/Aspect.java index 8e0be0cfe1..817bc3c69c 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Aspect.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Aspect.java @@ -30,20 +30,17 @@ public final class Aspect implements DependencyFilter.AttributeInfoProvider { /** */ public static final String INJECTING_RULE_KIND_PARAMETER_KEY = "$injecting_rule_kind"; - // TODO(bazel-team): class objects are not really hashable or comparable for equality other than - // by reference. We should identify the aspect here in a way that does not rely on comparison - // by reference so that keys can be serialized and deserialized properly. - private final AspectClass aspectClass; - private final AspectParameters parameters; + private final AspectDescriptor aspectDescriptor; private final AspectDefinition aspectDefinition; private Aspect( AspectClass aspectClass, AspectDefinition aspectDefinition, AspectParameters parameters) { - this.aspectClass = Preconditions.checkNotNull(aspectClass); + this.aspectDescriptor = new AspectDescriptor( + Preconditions.checkNotNull(aspectClass), + Preconditions.checkNotNull(parameters)); this.aspectDefinition = Preconditions.checkNotNull(aspectDefinition); - this.parameters = Preconditions.checkNotNull(parameters); } public static Aspect forNative( @@ -66,19 +63,23 @@ public final class Aspect implements DependencyFilter.AttributeInfoProvider { * Returns the aspectClass required for building the aspect. */ public AspectClass getAspectClass() { - return aspectClass; + return aspectDescriptor.getAspectClass(); } /** * Returns parameters for evaluation of the aspect. */ public AspectParameters getParameters() { - return parameters; + return aspectDescriptor.getParameters(); + } + + public AspectDescriptor getDescriptor() { + return aspectDescriptor; } @Override public String toString() { - return String.format("Aspect %s(%s)", aspectClass, parameters); + return String.format("Aspect %s", aspectDescriptor.toString()); } public AspectDefinition getDefinition() { 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 2d615e1f6f..e8c8cbe2d5 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 @@ -72,7 +72,7 @@ package com.google.devtools.build.lib.packages; * </li> * <li>{@link AspectParameters} is a (key,value) pair list that can be used to * parameterize aspect classes</li> - * <li>{@link com.google.devtools.build.lib.analysis.AspectDescriptor} is a pair + * <li>{@link AspectDescriptor} is a pair * of {@code AspectClass} and {@link AspectParameters}. It uniquely identifies * the aspect and can be used in SkyKeys. * </li> @@ -89,7 +89,7 @@ package com.google.devtools.build.lib.packages; * </li> * </ul> * - * {@link com.google.devtools.build.lib.analysis.AspectDescriptor}, or in general, a tuple + * {@link AspectDescriptor}, or in general, a tuple * of ({@link AspectClass}, {@link AspectParameters}) is an identifier that should be * used in SkyKeys or in other contexts that need equality for aspects. * See also {@link com.google.devtools.build.lib.skyframe.AspectFunction} for details diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectDescriptor.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDescriptor.java index 2f56abbc15..0d6e7435bd 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AspectDescriptor.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDescriptor.java @@ -12,12 +12,10 @@ // 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.collect.ImmutableMultimap; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.AspectClass; -import com.google.devtools.build.lib.packages.AspectParameters; import com.google.protobuf.TextFormat; import java.util.Map.Entry; import java.util.Objects; @@ -70,6 +68,11 @@ public final class AspectDescriptor { && Objects.equals(aspectParameters, that.aspectParameters); } + @Override + public String toString() { + return getDescription(); + } + /** * Creates a presentable description of this aspect, avaliable * to Skylark via "Target.aspects". diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java index 5042338d5f..71aae066e3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java @@ -24,7 +24,6 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Root; import com.google.devtools.build.lib.analysis.ActionsProvider; import com.google.devtools.build.lib.analysis.AnalysisUtils; -import com.google.devtools.build.lib.analysis.AspectDescriptor; import com.google.devtools.build.lib.analysis.ConfigurationMakeVariableContext; import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.LabelExpander; @@ -38,6 +37,7 @@ import com.google.devtools.build.lib.analysis.config.FragmentCollection; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.events.Location; +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.BuildType; diff --git a/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java b/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java index 745cea01bd..748a7a5fc8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java +++ b/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.analysis.actions.CommandLine; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; @@ -236,10 +237,10 @@ public final class ExtraActionSpec implements TransitiveInfoProvider { public static String getActionId(ActionOwner owner, Action action) { Fingerprint f = new Fingerprint(); f.addString(owner.getLabel().toString()); - f.addNullableString(owner.getAspectName()); - f.addBoolean(owner.getAspectParameters() != null); - if (owner.getAspectParameters() != null) { - f.addString(owner.getAspectParameters().toString()); + ImmutableList<AspectDescriptor> aspectDescriptors = owner.getAspectDescriptors(); + f.addInt(aspectDescriptors.size()); + for (AspectDescriptor aspectDescriptor : aspectDescriptors) { + f.addString(aspectDescriptor.getDescription()); } f.addString(action.getKey()); return f.hexDigestAndReset(); 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 4bf0f81c5d..4f8835befb 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 @@ -216,7 +216,7 @@ public final class AspectFunction implements SkyFunction { ConfiguredTarget associatedTarget = configuredTargetValue.getConfiguredTarget(); - ImmutableList.Builder<Aspect> aspectPath = ImmutableList.builder(); + ImmutableList.Builder<Aspect> aspectPathBuilder = ImmutableList.builder(); if (key.getBaseKey() != null) { ImmutableList<SkyKey> aspectKeys = getSkyKeysForAspects(key.getBaseKey()); @@ -227,7 +227,7 @@ public final class AspectFunction implements SkyFunction { } try { associatedTarget = getBaseTargetAndCollectPath( - associatedTarget, aspectKeys, values, aspectPath); + associatedTarget, aspectKeys, values, aspectPathBuilder); } catch (DuplicateException e) { env.getListener().handle( Event.error(associatedTarget.getTarget().getLocation(), e.getMessage())); @@ -237,7 +237,7 @@ public final class AspectFunction implements SkyFunction { } } - aspectPath.add(aspect); + aspectPathBuilder.add(aspect); SkyframeDependencyResolver resolver = view.createDependencyResolver(env); @@ -249,6 +249,7 @@ public final class AspectFunction implements SkyFunction { // will be present this way. TargetAndConfiguration originalTargetAndAspectConfiguration = new TargetAndConfiguration(target, key.getAspectConfiguration()); + ImmutableList<Aspect> aspectPath = aspectPathBuilder.build(); try { // Get the configuration targets that trigger this rule's configurable attributes. ImmutableMap<Label, ConfigMatchingProvider> configConditions = @@ -266,7 +267,7 @@ public final class AspectFunction implements SkyFunction { env, resolver, originalTargetAndAspectConfiguration, - aspectPath.build(), + aspectPath, configConditions, ruleClassProvider, view.getHostConfiguration(originalTargetAndAspectConfiguration.getConfiguration()), @@ -286,7 +287,7 @@ public final class AspectFunction implements SkyFunction { return createAspect( env, key, - target, + aspectPath, aspect, aspectFactory, associatedTarget, @@ -387,7 +388,7 @@ public final class AspectFunction implements SkyFunction { private AspectValue createAspect( Environment env, AspectKey key, - Target baseTarget, + ImmutableList<Aspect> aspectPath, Aspect aspect, ConfiguredAspectFactory aspectFactory, ConfiguredTarget associatedTarget, @@ -410,6 +411,7 @@ public final class AspectFunction implements SkyFunction { view.getConfiguredTargetFactory().createAspect( analysisEnvironment, associatedTarget, + aspectPath, aspectFactory, aspect, directDeps, 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 d4366fa6a8..7accbc1cb0 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 @@ -16,7 +16,6 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.base.Objects; import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; -import com.google.devtools.build.lib.analysis.AspectDescriptor; import com.google.devtools.build.lib.analysis.ConfiguredAspect; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; @@ -24,6 +23,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.Aspect; import com.google.devtools.build.lib.packages.AspectClass; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.lib.syntax.SkylarkImport; 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 cc62260279..134cea24a8 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 @@ -31,7 +31,6 @@ import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; 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.AspectDescriptor; import com.google.devtools.build.lib.analysis.CachingAnalysisEnvironment; import com.google.devtools.build.lib.analysis.ConfiguredAspect; import com.google.devtools.build.lib.analysis.ConfiguredTarget; @@ -56,6 +55,7 @@ import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.StoredEventHandler; import com.google.devtools.build.lib.packages.Aspect; import com.google.devtools.build.lib.packages.AspectDefinition; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.NoSuchTargetException; @@ -78,7 +78,6 @@ import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import com.google.devtools.build.skyframe.ValueOrException; import com.google.devtools.build.skyframe.ValueOrException2; - import java.util.ArrayList; import java.util.Collection; import java.util.Collections; 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 a21158a10f..a93ee6b5a4 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 @@ -50,7 +50,6 @@ import com.google.devtools.build.lib.actions.Executor; 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.AspectDescriptor; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.BuildView.Options; import com.google.devtools.build.lib.analysis.ConfiguredAspect; @@ -79,6 +78,7 @@ 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.exec.OutputService; +import com.google.devtools.build.lib.packages.AspectDescriptor; 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/SkylarkAspectFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java index 2608c7f535..e80a788aef 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java @@ -15,13 +15,13 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.devtools.build.lib.analysis.AspectDescriptor; import com.google.devtools.build.lib.analysis.ConfiguredAspect; import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.SkylarkProviderValidationUtil; import com.google.devtools.build.lib.events.Location; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.SkylarkAspect; import com.google.devtools.build.lib.packages.SkylarkClassObject; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java index 4d6dbf23ef..cc1aa442fe 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java @@ -17,9 +17,9 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.analysis.AspectDescriptor; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.Event; +import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.SkylarkAspect; import com.google.devtools.build.lib.skyframe.AspectFunction.AspectCreationException; |