Refactor createExtraActionProvider to not require mandatoryStampFiles, which is required by rules but not aspects. -- MOS_MIGRATED_REVID=107689641
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java index 55bb44d..e790b86 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java
@@ -76,11 +76,22 @@ } } + public static ExtraActionArtifactsProvider create(ImmutableList<Artifact> extraActionArtifacts, + NestedSet<ExtraArtifactSet> transitiveExtraActionArtifacts) { + if (extraActionArtifacts.isEmpty() && transitiveExtraActionArtifacts.isEmpty()) { + return EMPTY; + } + return new ExtraActionArtifactsProvider(extraActionArtifacts, transitiveExtraActionArtifacts); + } + /** The outputs of the extra actions associated with this target. */ private final ImmutableList<Artifact> extraActionArtifacts; private final NestedSet<ExtraArtifactSet> transitiveExtraActionArtifacts;; - public ExtraActionArtifactsProvider(ImmutableList<Artifact> extraActionArtifacts, + /** + * Use {@link #create} instead. + */ + private ExtraActionArtifactsProvider(ImmutableList<Artifact> extraActionArtifacts, NestedSet<ExtraArtifactSet> transitiveExtraActionArtifacts) { this.extraActionArtifacts = extraActionArtifacts; this.transitiveExtraActionArtifacts = transitiveExtraActionArtifacts;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java index f592810..520f40e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java
@@ -44,8 +44,7 @@ * bookkeeping. */ static ExtraActionArtifactsProvider createExtraActionProvider( - Set<Action> actionsWithoutExtraAction, List<Artifact> mandatoryStampFiles, - RuleContext ruleContext) { + Set<Action> actionsWithoutExtraAction, RuleContext ruleContext) { BuildConfiguration configuration = ruleContext.getConfiguration(); if (configuration.isHostConfiguration()) { return ExtraActionArtifactsProvider.EMPTY; @@ -76,22 +75,12 @@ } // Add extra action artifacts from dependencies - for (TransitiveInfoCollection dep : ruleContext.getConfiguredTargetMap().values()) { - ExtraActionArtifactsProvider provider = - dep.getProvider(ExtraActionArtifactsProvider.class); - if (provider != null) { - builder.addTransitive(provider.getTransitiveExtraActionArtifacts()); - } + for (ExtraActionArtifactsProvider provider : AnalysisUtils.getProviders( + ruleContext.getConfiguredTargetMap().values(), ExtraActionArtifactsProvider.class)) { + builder.addTransitive(provider.getTransitiveExtraActionArtifacts()); } - if (mandatoryStampFiles != null && !mandatoryStampFiles.isEmpty()) { - builder.add(ExtraArtifactSet.of(ruleContext.getLabel(), mandatoryStampFiles)); - } - - if (extraActionArtifacts.isEmpty() && builder.isEmpty()) { - return ExtraActionArtifactsProvider.EMPTY; - } - return new ExtraActionArtifactsProvider(extraActionArtifacts, builder.build()); + return ExtraActionArtifactsProvider.create(extraActionArtifacts, builder.build()); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java index a5ed4b4..f1737be 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
@@ -13,12 +13,15 @@ // limitations under the License. package com.google.devtools.build.lib.analysis; +import static com.google.devtools.build.lib.analysis.ExtraActionUtils.createExtraActionProvider; + 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.Action; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.analysis.ExtraActionArtifactsProvider.ExtraArtifactSet; import com.google.devtools.build.lib.analysis.LicensesProvider.TargetLicense; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.constraints.ConstraintSemantics; @@ -109,9 +112,17 @@ Preconditions.checkState(runfilesSupport != null); add(TestProvider.class, initializeTestProvider(filesToRunProvider)); } - add(ExtraActionArtifactsProvider.class, ExtraActionUtils.createExtraActionProvider( - actionsWithoutExtraAction, - mandatoryStampFiles, ruleContext)); + + ExtraActionArtifactsProvider extraActionsProvider = + createExtraActionProvider(actionsWithoutExtraAction, ruleContext); + if (mandatoryStampFiles != null && !mandatoryStampFiles.isEmpty()) { + extraActionsProvider = ExtraActionArtifactsProvider.create( + extraActionsProvider.getExtraActionArtifacts(), + NestedSetBuilder.fromNestedSet(extraActionsProvider.getTransitiveExtraActionArtifacts()) + .add(ExtraArtifactSet.of(ruleContext.getLabel(), mandatoryStampFiles)).build()); + } + add(ExtraActionArtifactsProvider.class, extraActionsProvider); + if (!outputGroupBuilders.isEmpty()) { ImmutableMap.Builder<String, NestedSet<Artifact>> outputGroups = ImmutableMap.builder(); for (Map.Entry<String, NestedSetBuilder<Artifact>> entry : outputGroupBuilders.entrySet()) {
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java index e75ae8b..dbe1cd3 100644 --- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java
@@ -250,4 +250,8 @@ public static <E> NestedSetBuilder<E> naiveLinkOrder() { return new NestedSetBuilder<>(Order.NAIVE_LINK_ORDER); } + + public static <E> NestedSetBuilder<E> fromNestedSet(NestedSet<E> set) { + return new NestedSetBuilder<E>(set.getOrder()).addTransitive(set); + } }