diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java | 52 |
1 files changed, 45 insertions, 7 deletions
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 a33e6fefd5..e99d134c83 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 @@ -18,10 +18,14 @@ import static com.google.devtools.build.lib.analysis.ExtraActionUtils.createExtr import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; +import com.google.devtools.build.lib.actions.Actions; +import com.google.devtools.build.lib.actions.Actions.GeneratingActions; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; @@ -57,12 +61,20 @@ import javax.annotation.Nullable; @Immutable @AutoCodec public final class ConfiguredAspect { - private final TransitiveInfoProviderMap providers; private final AspectDescriptor descriptor; + private final ImmutableList<ActionAnalysisMetadata> actions; + private final ImmutableMap<Artifact, Integer> generatingActionIndex; + private final TransitiveInfoProviderMap providers; @AutoCodec.VisibleForSerialization - ConfiguredAspect(AspectDescriptor descriptor, TransitiveInfoProviderMap providers) { + ConfiguredAspect( + AspectDescriptor descriptor, + ImmutableList<ActionAnalysisMetadata> actions, + ImmutableMap<Artifact, Integer> generatingActionIndex, + TransitiveInfoProviderMap providers) { this.descriptor = descriptor; + this.actions = actions; + this.generatingActionIndex = generatingActionIndex; this.providers = providers; } @@ -80,6 +92,18 @@ public final class ConfiguredAspect { return descriptor; } + public ImmutableList<ActionAnalysisMetadata> getActions() { + return actions; + } + + /** + * Returns a map where keys are artifacts that are action outputs of this rule, and values are the + * index of the action that generates that artifact. + */ + public ImmutableMap<Artifact, Integer> getGeneratingActionIndex() { + return generatingActionIndex; + } + /** Returns the providers created by the aspect. */ public TransitiveInfoProviderMap getProviders() { return providers; @@ -112,11 +136,16 @@ public final class ConfiguredAspect { } public static ConfiguredAspect forAlias(ConfiguredAspect real) { - return new ConfiguredAspect(real.descriptor, real.getProviders()); + return new ConfiguredAspect( + real.descriptor, real.getActions(), real.getGeneratingActionIndex(), real.getProviders()); } public static ConfiguredAspect forNonapplicableTarget(AspectDescriptor descriptor) { - return new ConfiguredAspect(descriptor, new TransitiveInfoProviderMapBuilder().add().build()); + return new ConfiguredAspect( + descriptor, + ImmutableList.of(), + ImmutableMap.of(), + new TransitiveInfoProviderMapBuilder().add().build()); } public static Builder builder( @@ -230,8 +259,7 @@ public final class ConfiguredAspect { return this; } - - public ConfiguredAspect build() { + public ConfiguredAspect build() throws ActionConflictException { if (!outputGroupBuilders.isEmpty()) { ImmutableMap.Builder<String, NestedSet<Artifact>> outputGroups = ImmutableMap.builder(); for (Map.Entry<String, NestedSetBuilder<Artifact>> entry : outputGroupBuilders.entrySet()) { @@ -250,7 +278,17 @@ public final class ConfiguredAspect { /* actionsWithoutExtraAction= */ ImmutableSet.<ActionAnalysisMetadata>of(), ruleContext)); - return new ConfiguredAspect(descriptor, providers.build()); + AnalysisEnvironment analysisEnvironment = ruleContext.getAnalysisEnvironment(); + GeneratingActions generatingActions = + Actions.filterSharedActionsAndThrowActionConflict( + analysisEnvironment.getActionKeyContext(), + analysisEnvironment.getRegisteredActions()); + + return new ConfiguredAspect( + descriptor, + generatingActions.getActions(), + generatingActions.getGeneratingActionIndex(), + providers.build()); } } } |