diff options
Diffstat (limited to 'src/main')
4 files changed, 35 insertions, 20 deletions
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 55bb44d91b..e790b867f4 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 final class ExtraActionArtifactsProvider implements TransitiveInfoProvide } } + 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 f59281042c..520f40e0ba 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 @@ class ExtraActionUtils { * 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 @@ class ExtraActionUtils { } // 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()); - } - } - - if (mandatoryStampFiles != null && !mandatoryStampFiles.isEmpty()) { - builder.add(ExtraArtifactSet.of(ruleContext.getLabel(), mandatoryStampFiles)); + for (ExtraActionArtifactsProvider provider : AnalysisUtils.getProviders( + ruleContext.getConfiguredTargetMap().values(), ExtraActionArtifactsProvider.class)) { + builder.addTransitive(provider.getTransitiveExtraActionArtifacts()); } - 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 a5ed4b46a3..f1737be2a0 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 @@ public final class RuleConfiguredTargetBuilder { 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 e75ae8b022..dbe1cd3208 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 final class NestedSetBuilder<E> { 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); + } } |