aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
diff options
context:
space:
mode:
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.java52
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());
}
}
}