Split ActionMetadata into ActionAnalysisMetadata and ActionExecutionMetadata.
Except in action execution logic (ActionExecutionFunction, SkyframeActionExecutor, etc.), switch Action interface references to either ActionAnalysisMetadata if possible or ActionExecutionMetadata.

--
MOS_MIGRATED_REVID=120723431
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java
index cf1b16b..dd96b3a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java
@@ -17,6 +17,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.ActionRegistry;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.MiddlemanFactory;
@@ -105,13 +106,13 @@
    * If the artifact was created in another analysis environment (e.g. by a different configured
    * target instance) or the artifact is a source artifact, it returns null.
    */
-  Action getLocalGeneratingAction(Artifact artifact);
+  ActionAnalysisMetadata getLocalGeneratingAction(Artifact artifact);
 
   /**
    * Returns the actions that were registered so far with this analysis environment, that is, all
    * the actions that were created by the current target being analyzed.
    */
-  Iterable<Action> getRegisteredActions();
+  Iterable<ActionAnalysisMetadata> getRegisteredActions();
 
   /**
    * Returns the Skyframe SkyFunction.Environment if available. Otherwise, null.
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 fb30f60..1251fe1 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
@@ -27,7 +27,7 @@
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.google.common.eventbus.EventBus;
-import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.ActionGraph;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.ArtifactFactory;
@@ -552,7 +552,7 @@
           getArtifactFactory(),
           CoverageReportValue.ARTIFACT_OWNER);
       if (actionsWrapper != null) {
-        ImmutableList <Action> actions = actionsWrapper.getActions();
+        ImmutableList<ActionAnalysisMetadata> actions = actionsWrapper.getActions();
         skyframeExecutor.injectCoverageReportData(actions);
         artifactsToBuild.addAll(actionsWrapper.getCoverageOutputs());
       }
@@ -571,7 +571,7 @@
     final ActionGraph actionGraph = new ActionGraph() {
       @Nullable
       @Override
-      public Action getGeneratingAction(Artifact artifact) {
+      public ActionAnalysisMetadata getGeneratingAction(Artifact artifact) {
         ArtifactOwner artifactOwner = artifact.getArtifactOwner();
         if (artifactOwner instanceof ActionLookupValue.ActionLookupKey) {
           SkyKey key = ActionLookupValue.key((ActionLookupValue.ActionLookupKey) artifactOwner);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
index 4d1d787..2f8762d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
@@ -17,7 +17,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
-import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.ArtifactFactory;
 import com.google.devtools.build.lib.actions.ArtifactOwner;
@@ -90,7 +90,7 @@
    * The list of actions registered by the configured target this analysis environment is
    * responsible for. May get cleared out at the end of the analysis of said target.
    */
-  final List<Action> actions = new ArrayList<>();
+  final List<ActionAnalysisMetadata> actions = new ArrayList<>();
 
   public CachingAnalysisEnvironment(ArtifactFactory artifactFactory,
       ArtifactOwner owner, boolean isSystemEnv, boolean extendedSanityChecks,
@@ -119,7 +119,7 @@
     skyframeEnv = null;
   }
 
-  private static StringBuilder shortDescription(Action action) {
+  private static StringBuilder shortDescription(ActionAnalysisMetadata action) {
     if (action == null) {
       return new StringBuilder("null Action");
     }
@@ -138,7 +138,7 @@
     List<String> checkedActions = null;
     if (!orphanArtifacts.isEmpty()) {
       checkedActions = Lists.newArrayListWithCapacity(actions.size());
-      for (Action action : actions) {
+      for (ActionAnalysisMetadata action : actions) {
         StringBuilder sb = shortDescription(action);
         for (Artifact o : action.getOutputs()) {
           sb.append("\n    ");
@@ -166,7 +166,7 @@
   private Map<Artifact, String> getOrphanArtifactMap() {
     // Construct this set to avoid poor performance under large --runs_per_test.
     Set<Artifact> artifactsWithActions = new HashSet<>();
-    for (Action action : actions) {
+    for (ActionAnalysisMetadata action : actions) {
       // Don't bother checking that every Artifact only appears once; that test is performed
       // elsewhere (see #testNonUniqueOutputs in ActionListenerIntegrationTest).
       artifactsWithActions.addAll(action.getOutputs());
@@ -258,7 +258,7 @@
   }
 
   @Override
-  public void registerAction(Action... actions) {
+  public void registerAction(ActionAnalysisMetadata... actions) {
     Preconditions.checkState(enabled);
     if (allowRegisteringActions) {
       Collections.addAll(this.actions, actions);
@@ -266,9 +266,9 @@
   }
 
   @Override
-  public Action getLocalGeneratingAction(Artifact artifact) {
+  public ActionAnalysisMetadata getLocalGeneratingAction(Artifact artifact) {
     Preconditions.checkState(allowRegisteringActions);
-    for (Action action : actions) {
+    for (ActionAnalysisMetadata action : actions) {
       if (action.getOutputs().contains(artifact)) {
         return action;
       }
@@ -277,7 +277,7 @@
   }
 
   @Override
-  public Collection<Action> getRegisteredActions() {
+  public Collection<ActionAnalysisMetadata> getRegisteredActions() {
     return Collections.unmodifiableCollection(actions);
   }
 
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 645cd6d..7f3db2a 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
@@ -20,7 +20,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.UnmodifiableIterator;
-import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -174,7 +174,8 @@
       addProvider(
           ExtraActionArtifactsProvider.class,
           createExtraActionProvider(
-              ImmutableSet.<Action>of() /* actionsWithoutExtraAction */, ruleContext));
+              ImmutableSet.<ActionAnalysisMetadata>of() /* actionsWithoutExtraAction */,
+              ruleContext));
 
       return new ConfiguredAspect(name, ImmutableMap.copyOf(providers));
     }
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 829e637..782eaa2 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
@@ -16,7 +16,7 @@
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Multimap;
-import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.ExtraActionArtifactsProvider.ExtraArtifactSet;
 import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
@@ -44,7 +44,7 @@
    * bookkeeping.
    */
   static ExtraActionArtifactsProvider createExtraActionProvider(
-      Set<Action> actionsWithoutExtraAction, RuleContext ruleContext) {
+      Set<ActionAnalysisMetadata> actionsWithoutExtraAction, RuleContext ruleContext) {
     BuildConfiguration configuration = ruleContext.getConfiguration();
     if (configuration.isHostConfiguration()) {
       return ExtraActionArtifactsProvider.EMPTY;
@@ -61,7 +61,7 @@
 
       // The action list is modified within the body of the loop by the maybeAddExtraAction() call,
       // thus the copy
-      for (Action action :
+      for (ActionAnalysisMetadata action :
           ImmutableList.copyOf(ruleContext.getAnalysisEnvironment().getRegisteredActions())) {
         if (!actionsWithoutExtraAction.contains(action)) {
           visitor.maybeAddExtraAction(action);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java
index 3b4069e..db10173 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java
@@ -17,8 +17,8 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Multimap;
-import com.google.common.collect.Sets;
 import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.ActionGraph;
 import com.google.devtools.build.lib.actions.ActionGraphVisitor;
 import com.google.devtools.build.lib.actions.Artifact;
@@ -26,7 +26,6 @@
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
 import javax.annotation.Nullable;
 
@@ -37,7 +36,6 @@
   private final RuleContext ruleContext;
   private final Multimap<String, ExtraActionSpec> mnemonicToExtraActionMap;
   private final List<Artifact> extraArtifacts;
-  public final Set<Action> actions = Sets.newHashSet();
 
   /** Creates a new visitor for the extra actions associated with the given target. */
   public ExtraActionsVisitor(RuleContext ruleContext,
@@ -48,21 +46,23 @@
     extraArtifacts = Lists.newArrayList();
   }
 
-  void maybeAddExtraAction(Action original) {
-    if (original.extraActionCanAttach()) {
-      Collection<ExtraActionSpec> extraActions =
-          mnemonicToExtraActionMap.get(original.getMnemonic());
-      if (extraActions != null) {
-        for (ExtraActionSpec extraAction : extraActions) {
-          extraArtifacts.addAll(extraAction.addExtraAction(ruleContext, original));
+  void maybeAddExtraAction(ActionAnalysisMetadata original) {
+    if (original instanceof Action) {
+      Action action = (Action) original;
+      if (action.extraActionCanAttach()) {
+        Collection<ExtraActionSpec> extraActions =
+            mnemonicToExtraActionMap.get(action.getMnemonic());
+        if (extraActions != null) {
+          for (ExtraActionSpec extraAction : extraActions) {
+            extraArtifacts.addAll(extraAction.addExtraAction(ruleContext, action));
+          }
         }
       }
     }
   }
 
   @Override
-  protected void visitAction(Action action) {
-    actions.add(action);
+  protected void visitAction(ActionAnalysisMetadata action) {
     maybeAddExtraAction(action);
   }
 
@@ -78,7 +78,7 @@
     return new ActionGraph() {
       @Override
       @Nullable
-      public Action getGeneratingAction(Artifact artifact) {
+      public ActionAnalysisMetadata getGeneratingAction(Artifact artifact) {
         return ruleContext.getAnalysisEnvironment().getLocalGeneratingAction(artifact);
       }
     };
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PrintActionVisitor.java b/src/main/java/com/google/devtools/build/lib/analysis/PrintActionVisitor.java
index 2878092..abe62c1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/PrintActionVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/PrintActionVisitor.java
@@ -16,7 +16,7 @@
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.ActionGraph;
 import com.google.devtools.build.lib.actions.ActionGraphVisitor;
 import com.google.devtools.build.lib.actions.ActionOwner;
@@ -28,8 +28,8 @@
  */
 public final class PrintActionVisitor extends ActionGraphVisitor {
   private final ConfiguredTarget target;
-  private final List<Action> actions;
-  private final Predicate<Action> actionMnemonicMatcher;
+  private final List<ActionAnalysisMetadata> actions;
+  private final Predicate<ActionAnalysisMetadata> actionMnemonicMatcher;
   private final String targetConfigurationChecksum;
 
   /**
@@ -37,7 +37,7 @@
    * mnemonic.
    */
   public PrintActionVisitor(ActionGraph actionGraph, ConfiguredTarget target,
-      Predicate<Action> actionMnemonicMatcher) {
+      Predicate<ActionAnalysisMetadata> actionMnemonicMatcher) {
     super(actionGraph);
     this.target = target;
     this.actionMnemonicMatcher = actionMnemonicMatcher;
@@ -46,21 +46,21 @@
   }
 
   @Override
-  protected boolean shouldVisit(Action action) {
+  protected boolean shouldVisit(ActionAnalysisMetadata action) {
     ActionOwner owner = action.getOwner();
     return owner != null && target.getLabel().equals(owner.getLabel())
         && targetConfigurationChecksum.equals(owner.getConfigurationChecksum());
   }
 
   @Override
-  protected void visitAction(Action action) {
+  protected void visitAction(ActionAnalysisMetadata action) {
     if (actionMnemonicMatcher.apply(action)) {
       actions.add(action);
     }
   }
 
   /** Retrieves the collected actions since this method was last called and clears the list. */
-  public ImmutableList<Action> getActions() {
+  public ImmutableList<ActionAnalysisMetadata> getActions() {
     return ImmutableList.copyOf(actions);
   }
 }
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 07b0d86..853fdf7 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
@@ -18,7 +18,7 @@
 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.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.LicensesProvider.TargetLicense;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -62,7 +62,7 @@
   private NestedSet<Artifact> filesToBuild = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
   private RunfilesSupport runfilesSupport;
   private Artifact executable;
-  private ImmutableSet<Action> actionsWithoutExtraAction = ImmutableSet.of();
+  private ImmutableSet<ActionAnalysisMetadata> actionsWithoutExtraAction = ImmutableSet.of();
 
   public RuleConfiguredTargetBuilder(RuleContext ruleContext) {
     this.ruleContext = ruleContext;
@@ -341,7 +341,8 @@
   /**
    * Set the extra action pseudo actions.
    */
-  public RuleConfiguredTargetBuilder setActionsWithoutExtraAction(ImmutableSet<Action> actions) {
+  public RuleConfiguredTargetBuilder setActionsWithoutExtraAction(
+      ImmutableSet<ActionAnalysisMetadata> actions) {
     this.actionsWithoutExtraAction = actions;
     return this;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index fef9393..cc3118b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -29,6 +29,7 @@
 import com.google.common.collect.Multimaps;
 import com.google.common.collect.Sets;
 import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.ActionOwner;
 import com.google.devtools.build.lib.actions.ActionRegistry;
 import com.google.devtools.build.lib.actions.Artifact;
@@ -379,7 +380,7 @@
   }
 
   @Override
-  public void registerAction(Action... action) {
+  public void registerAction(ActionAnalysisMetadata... action) {
     getAnalysisEnvironment().registerAction(action);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java
index 39b1d96..18a147e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java
@@ -14,7 +14,7 @@
 package com.google.devtools.build.lib.analysis.buildinfo;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.Artifact;
 
 import java.util.List;
@@ -23,19 +23,19 @@
  * A collection of build-info files for both stamped and unstamped modes.
  */
 public final class BuildInfoCollection {
-  private final ImmutableList<Action> actions;
+  private final ImmutableList<ActionAnalysisMetadata> actions;
   private final ImmutableList<Artifact> stampedBuildInfo;
   private final ImmutableList<Artifact> redactedBuildInfo;
 
-  public BuildInfoCollection(List<? extends Action> actions, List<Artifact> stampedBuildInfo,
-      List<Artifact> redactedBuildInfo) {
+  public BuildInfoCollection(List<? extends ActionAnalysisMetadata> actions,
+      List<Artifact> stampedBuildInfo, List<Artifact> redactedBuildInfo) {
     // Do not remove <Action>: workaround for Java 7 type inference.
-    this.actions = ImmutableList.<Action>copyOf(actions);
+    this.actions = ImmutableList.<ActionAnalysisMetadata>copyOf(actions);
     this.stampedBuildInfo = ImmutableList.copyOf(stampedBuildInfo);
     this.redactedBuildInfo = ImmutableList.copyOf(redactedBuildInfo);
   }
 
-  public ImmutableList<Action> getActions() {
+  public ImmutableList<ActionAnalysisMetadata> getActions() {
     return actions;
   }