Apply extra actions to top-level aspects.
--
MOS_MIGRATED_REVID=129759632
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 1afacf9..dde2d06 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
@@ -72,6 +72,7 @@
import com.google.devtools.build.lib.skyframe.SkyframeBuildView;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.RegexFilter;
import com.google.devtools.build.lib.vfs.Path;
@@ -517,6 +518,8 @@
throws InterruptedException {
Collection<Target> testsToRun = loadingResult.getTestsToRun();
Collection<ConfiguredTarget> configuredTargets = skyframeAnalysisResult.getConfiguredTargets();
+ Collection<AspectValue> aspects = skyframeAnalysisResult.getAspects();
+
Collection<ConfiguredTarget> allTargetsToTest = null;
if (testsToRun != null) {
// Determine the subset of configured targets that are meant to be run as tests.
@@ -537,7 +540,7 @@
artifactsToBuild.addAll(buildInfoArtifacts);
// Extra actions
- addExtraActionsIfRequested(viewOptions, artifactsToBuild, configuredTargets);
+ addExtraActionsIfRequested(viewOptions, configuredTargets, aspects, artifactsToBuild);
// Coverage
NestedSet<Artifact> baselineCoverageArtifacts = getBaselineCoverageArtifacts(configuredTargets);
@@ -579,7 +582,7 @@
};
return new AnalysisResult(
configuredTargets,
- skyframeAnalysisResult.getAspects(),
+ aspects,
allTargetsToTest,
error,
actionGraph,
@@ -616,15 +619,50 @@
return baselineCoverageArtifacts.build();
}
+ private void addExtraActionsIfRequested(Options viewOptions,
+ Collection<ConfiguredTarget> configuredTargets,
+ Collection<AspectValue> aspects,
+ Set<Artifact> artifactsToBuild) {
+ addExtraActionsIfRequested(viewOptions, artifactsToBuild,
+ Iterables.transform(configuredTargets,
+ new Function<ConfiguredTarget, Pair<Label, ExtraActionArtifactsProvider>>() {
+ @Nullable
+ @Override
+ public Pair<Label, ExtraActionArtifactsProvider> apply(
+ ConfiguredTarget configuredTarget) {
+ return Pair.of(
+ configuredTarget.getLabel(),
+ configuredTarget.getProvider(ExtraActionArtifactsProvider.class));
+ }
+ }));
+ addExtraActionsIfRequested(viewOptions, artifactsToBuild,
+ Iterables.transform(aspects,
+ new Function<AspectValue, Pair<Label, ExtraActionArtifactsProvider>>() {
+ @Nullable
+ @Override
+ public Pair<Label, ExtraActionArtifactsProvider> apply(
+ AspectValue aspectValue) {
+ return Pair.of(
+ aspectValue.getLabel(),
+ aspectValue
+ .getConfiguredAspect()
+ .getProvider(ExtraActionArtifactsProvider.class));
+ }
+ }
+ ));
+ }
+
private void addExtraActionsIfRequested(BuildView.Options viewOptions,
- Set<Artifact> artifactsToBuild, Iterable<ConfiguredTarget> topLevelTargets) {
+ Set<Artifact> artifactsToBuild,
+ Iterable<Pair<Label, ExtraActionArtifactsProvider>> providers) {
NestedSetBuilder<ExtraArtifactSet> builder = NestedSetBuilder.stableOrder();
- for (ConfiguredTarget topLevel : topLevelTargets) {
- ExtraActionArtifactsProvider provider = topLevel.getProvider(
- ExtraActionArtifactsProvider.class);
+ for (Pair<Label, ExtraActionArtifactsProvider> labelAndProvider : providers) {
+ ExtraActionArtifactsProvider provider = labelAndProvider.getSecond();
if (provider != null) {
if (viewOptions.extraActionTopLevelOnly) {
- builder.add(ExtraArtifactSet.of(topLevel.getLabel(), provider.getExtraActionArtifacts()));
+ builder.add(ExtraArtifactSet.of(
+ labelAndProvider.getFirst(),
+ provider.getExtraActionArtifacts()));
} else {
builder.addTransitive(provider.getTransitiveExtraActionArtifacts());
}