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);
+  }
 }