Change signatures to DerivedArtifact, and get Labels from non-Artifact sources when possible.

In tests, try to get artifacts directly from the actual configured target, rather than creating fresh ones.

This change should be a prod functional no-op, just changing signatures. Split out from the follow-up to reduce the diff.

PiperOrigin-RevId: 250527865
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 a23e5fa..2f69670 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
@@ -64,7 +64,7 @@
    * artifacts generated by two different rules to clash. To avoid this, use the artifact creation
    * method on {@link RuleContext} mentioned above.
    */
-  Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root);
+  Artifact.DerivedArtifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root);
 
   /**
    * Returns an artifact for the derived file {@code rootRelativePath} whose changes do not cause a
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 1556fc2..9e82277 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
@@ -658,8 +658,8 @@
   }
 
   /**
-   * Returns a list of actions from 'provider' that were registered by an aspect from
-   * 'aspectClasses'. All actions in 'provider' are considered - both direct and transitive.
+   * Returns a list of artifacts from 'provider' that were registered by an aspect from
+   * 'aspectClasses'. All artifacts in 'provider' are considered - both direct and transitive.
    */
   private ImmutableList<Artifact> filterTransitiveExtraActions(
       ExtraActionArtifactsProvider provider, Set<AspectClass> aspectClasses) {
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 a495377..d66dee7 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
@@ -20,10 +20,10 @@
 import com.google.common.collect.Lists;
 import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.ActionKeyContext;
+import com.google.devtools.build.lib.actions.ActionLookupValue;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
 import com.google.devtools.build.lib.actions.ArtifactFactory;
-import com.google.devtools.build.lib.actions.ArtifactOwner;
 import com.google.devtools.build.lib.actions.ArtifactRoot;
 import com.google.devtools.build.lib.actions.MiddlemanFactory;
 import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoCollection;
@@ -60,7 +60,7 @@
 public class CachingAnalysisEnvironment implements AnalysisEnvironment {
   private final ArtifactFactory artifactFactory;
 
-  private final ArtifactOwner owner;
+  private final ActionLookupValue.ActionLookupKey owner;
   /**
    * If this is the system analysis environment, then errors and warnings are directly reported
    * to the global reporter, rather than stored, i.e., we don't track here whether there are any
@@ -87,7 +87,7 @@
   public CachingAnalysisEnvironment(
       ArtifactFactory artifactFactory,
       ActionKeyContext actionKeyContext,
-      ArtifactOwner owner,
+      ActionLookupValue.ActionLookupKey owner,
       boolean isSystemEnv,
       boolean extendedSanityChecks,
       boolean allowAnalysisFailures,
@@ -240,7 +240,8 @@
    * sealed (disable()). For performance reasons we only track the originating stacktrace when
    * running with --experimental_extended_sanity_checks.
    */
-  private Artifact trackArtifactAndOrigin(Artifact a, @Nullable Throwable e) {
+  private Artifact.DerivedArtifact trackArtifactAndOrigin(
+      Artifact.DerivedArtifact a, @Nullable Throwable e) {
     if ((e != null) && !artifacts.containsKey(a)) {
       StringWriter sw = new StringWriter();
       e.printStackTrace(new PrintWriter(sw));
@@ -252,7 +253,8 @@
   }
 
   @Override
-  public Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root) {
+  public Artifact.DerivedArtifact getDerivedArtifact(
+      PathFragment rootRelativePath, ArtifactRoot root) {
     Preconditions.checkState(enabled);
     return trackArtifactAndOrigin(
         artifactFactory.getDerivedArtifact(rootRelativePath, root, getOwner()),
@@ -269,7 +271,8 @@
   }
 
   @Override
-  public Artifact getFilesetArtifact(PathFragment rootRelativePath, ArtifactRoot root) {
+  public Artifact.DerivedArtifact getFilesetArtifact(
+      PathFragment rootRelativePath, ArtifactRoot root) {
     Preconditions.checkState(enabled);
     return trackArtifactAndOrigin(
         artifactFactory.getFilesetArtifact(rootRelativePath, root, getOwner()),
@@ -351,7 +354,7 @@
   }
 
   @Override
-  public ArtifactOwner getOwner() {
+  public ActionLookupValue.ActionLookupKey getOwner() {
     return owner;
   }
 }
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 1dd90cf..eedcc19 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
@@ -28,12 +28,12 @@
 public final class ExtraActionArtifactsProvider implements TransitiveInfoProvider {
   public static final ExtraActionArtifactsProvider EMPTY =
       new ExtraActionArtifactsProvider(
-          NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER),
-          NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER));
+          NestedSetBuilder.emptySet(Order.STABLE_ORDER),
+          NestedSetBuilder.emptySet(Order.STABLE_ORDER));
 
   public static ExtraActionArtifactsProvider create(
-      NestedSet<Artifact> extraActionArtifacts,
-      NestedSet<Artifact> transitiveExtraActionArtifacts) {
+      NestedSet<Artifact.DerivedArtifact> extraActionArtifacts,
+      NestedSet<Artifact.DerivedArtifact> transitiveExtraActionArtifacts) {
     if (extraActionArtifacts.isEmpty() && transitiveExtraActionArtifacts.isEmpty()) {
       return EMPTY;
     }
@@ -42,8 +42,9 @@
 
   public static ExtraActionArtifactsProvider merge(
       Iterable<ExtraActionArtifactsProvider> providers) {
-    NestedSetBuilder<Artifact> artifacts = NestedSetBuilder.stableOrder();
-    NestedSetBuilder<Artifact> transitiveExtraActionArtifacts = NestedSetBuilder.stableOrder();
+    NestedSetBuilder<Artifact.DerivedArtifact> artifacts = NestedSetBuilder.stableOrder();
+    NestedSetBuilder<Artifact.DerivedArtifact> transitiveExtraActionArtifacts =
+        NestedSetBuilder.stableOrder();
 
     for (ExtraActionArtifactsProvider provider : providers) {
       artifacts.addTransitive(provider.getExtraActionArtifacts());
@@ -54,28 +55,27 @@
   }
 
   /** The outputs of the extra actions associated with this target. */
-  private final NestedSet<Artifact> extraActionArtifacts;
-  private final NestedSet<Artifact> transitiveExtraActionArtifacts;
+  private final NestedSet<Artifact.DerivedArtifact> extraActionArtifacts;
+
+  private final NestedSet<Artifact.DerivedArtifact> transitiveExtraActionArtifacts;
 
   /** Use {@link #create} instead. */
   @AutoCodec.Instantiator
   @VisibleForSerialization
   ExtraActionArtifactsProvider(
-      NestedSet<Artifact> extraActionArtifacts,
-      NestedSet<Artifact> transitiveExtraActionArtifacts) {
+      NestedSet<Artifact.DerivedArtifact> extraActionArtifacts,
+      NestedSet<Artifact.DerivedArtifact> transitiveExtraActionArtifacts) {
     this.extraActionArtifacts = extraActionArtifacts;
     this.transitiveExtraActionArtifacts = transitiveExtraActionArtifacts;
   }
 
-  /**
-   * The outputs of the extra actions associated with this target.
-   */
-  public NestedSet<Artifact> getExtraActionArtifacts() {
+  /** The outputs of the extra actions associated with this target. */
+  public NestedSet<Artifact.DerivedArtifact> getExtraActionArtifacts() {
     return extraActionArtifacts;
   }
 
   /** The outputs of the extra actions in the whole transitive closure. */
-  public NestedSet<Artifact> getTransitiveExtraActionArtifacts() {
+  public NestedSet<Artifact.DerivedArtifact> getTransitiveExtraActionArtifacts() {
     return 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 e43ba87..a736555 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
@@ -48,8 +48,8 @@
       return ExtraActionArtifactsProvider.EMPTY;
     }
 
-    ImmutableList<Artifact> extraActionArtifacts = ImmutableList.of();
-    NestedSetBuilder<Artifact> builder = NestedSetBuilder.stableOrder();
+    ImmutableList<Artifact.DerivedArtifact> extraActionArtifacts = ImmutableList.of();
+    NestedSetBuilder<Artifact.DerivedArtifact> builder = NestedSetBuilder.stableOrder();
 
     List<Label> actionListenerLabels = configuration.getActionListeners();
     if (!actionListenerLabels.isEmpty()
@@ -79,7 +79,9 @@
     }
 
     return ExtraActionArtifactsProvider.create(
-        NestedSetBuilder.<Artifact>stableOrder().addAll(extraActionArtifacts).build(),
+        NestedSetBuilder.<Artifact.DerivedArtifact>stableOrder()
+            .addAll(extraActionArtifacts)
+            .build(),
         builder.build());
   }
 
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 f6f41de..922bd72 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
@@ -33,7 +33,7 @@
 final class ExtraActionsVisitor extends ActionGraphVisitor {
   private final RuleContext ruleContext;
   private final Multimap<String, ExtraActionSpec> mnemonicToExtraActionMap;
-  private final List<Artifact> extraArtifacts;
+  private final List<Artifact.DerivedArtifact> extraArtifacts;
 
   /** Creates a new visitor for the extra actions associated with the given target. */
   public ExtraActionsVisitor(RuleContext ruleContext,
@@ -63,8 +63,8 @@
   }
 
   /** Retrieves the collected artifacts since this method was last called and clears the list. */
-  public ImmutableList<Artifact> getAndResetExtraArtifacts() {
-    ImmutableList<Artifact> collected = ImmutableList.copyOf(extraArtifacts);
+  ImmutableList<Artifact.DerivedArtifact> getAndResetExtraArtifacts() {
+    ImmutableList<Artifact.DerivedArtifact> collected = ImmutableList.copyOf(extraArtifacts);
     extraArtifacts.clear();
     return collected;
   }
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 76e3b42..7779744 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
@@ -40,7 +40,6 @@
 import com.google.devtools.build.lib.actions.ActionRegistry;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
-import com.google.devtools.build.lib.actions.ArtifactOwner;
 import com.google.devtools.build.lib.actions.ArtifactRoot;
 import com.google.devtools.build.lib.analysis.AliasProvider.TargetMode;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.PrerequisiteValidator;
@@ -499,7 +498,7 @@
   }
 
   @Override
-  public ArtifactOwner getOwner() {
+  public ActionLookupValue.ActionLookupKey getOwner() {
     return getAnalysisEnvironment().getOwner();
   }
 
@@ -657,22 +656,6 @@
    * Creates an artifact in a directory that is unique to the package that contains the rule, thus
    * guaranteeing that it never clashes with artifacts created by rules in other packages.
    */
-  public Artifact getPackageRelativeArtifact(String relative, ArtifactRoot root) {
-    return getPackageRelativeArtifact(PathFragment.create(relative), root);
-  }
-
-  /**
-   * Creates an artifact in a directory that is unique to the package that contains the rule, thus
-   * guaranteeing that it never clashes with artifacts created by rules in other packages.
-   */
-  public Artifact getPackageRelativeTreeArtifact(String relative, ArtifactRoot root) {
-    return getPackageRelativeTreeArtifact(PathFragment.create(relative), root);
-  }
-
-  /**
-   * Creates an artifact in a directory that is unique to the package that contains the rule, thus
-   * guaranteeing that it never clashes with artifacts created by rules in other packages.
-   */
   public Artifact getBinArtifact(String relative) {
     return getBinArtifact(PathFragment.create(relative));
   }
@@ -701,10 +684,19 @@
   }
 
   @Override
-  public Artifact getPackageRelativeArtifact(PathFragment relative, ArtifactRoot root) {
+  public Artifact.DerivedArtifact getPackageRelativeArtifact(
+      PathFragment relative, ArtifactRoot root) {
     return getDerivedArtifact(getPackageDirectory().getRelative(relative), root);
   }
 
+  /**
+   * Creates an artifact in a directory that is unique to the package that contains the rule, thus
+   * guaranteeing that it never clashes with artifacts created by rules in other packages.
+   */
+  public Artifact getPackageRelativeArtifact(String relative, ArtifactRoot root) {
+    return getPackageRelativeArtifact(PathFragment.create(relative), root);
+  }
+
   @Override
   public PathFragment getPackageDirectory() {
     return getLabel().getPackageIdentifier().getSourceRoot();
@@ -718,7 +710,8 @@
    * method.
    */
   @Override
-  public Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root) {
+  public Artifact.DerivedArtifact getDerivedArtifact(
+      PathFragment rootRelativePath, ArtifactRoot root) {
     Preconditions.checkState(rootRelativePath.startsWith(getPackageDirectory()),
         "Output artifact '%s' not under package directory '%s' for target '%s'",
         rootRelativePath, getPackageDirectory(), getLabel());
@@ -1421,7 +1414,8 @@
   }
 
   @Override
-  public final Artifact getRelatedArtifact(PathFragment pathFragment, String extension) {
+  public final Artifact.DerivedArtifact getRelatedArtifact(
+      PathFragment pathFragment, String extension) {
     PathFragment file = FileSystemUtils.replaceExtension(pathFragment, extension);
     return getDerivedArtifact(file, getConfiguration().getBinDirectory(rule.getRepository()));
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java
index ff15303..4f1d5c5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java
@@ -156,7 +156,7 @@
   }
 
   static void addArtifactsWithOwnerLabel(
-      Iterable<Artifact> artifacts,
+      Iterable<? extends Artifact> artifacts,
       @Nullable RegexFilter filter,
       Label ownerLabel,
       ArtifactsToOwnerLabels.Builder artifactsToOwnerLabelsBuilder) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
index 92d25f7..c9e600b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
@@ -63,7 +63,7 @@
    * thus ensuring that it doesn't clash with other artifacts generated by other rules using this
    * method.
    */
-  Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root);
+  Artifact.DerivedArtifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root);
 
   /**
    * Creates a TreeArtifact under a given root with the given root-relative path.
@@ -94,7 +94,7 @@
    * Returns an artifact with a given file extension. All other path components are the same as in
    * {@code pathFragment}.
    */
-  Artifact getRelatedArtifact(PathFragment pathFragment, String extension);
+  Artifact.DerivedArtifact getRelatedArtifact(PathFragment pathFragment, String extension);
 
   /**
    * Creates an artifact in a directory that is unique to the rule, thus guaranteeing that it never
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index 4c33832..fcc15da 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -191,7 +191,7 @@
       ActionOwner owner,
       Iterable<Artifact> tools,
       Iterable<Artifact> inputs,
-      Iterable<Artifact> outputs,
+      Iterable<? extends Artifact> outputs,
       Artifact primaryOutput,
       ResourceSet resourceSet,
       CommandLines commandLines,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java
index 7f7396b..4762ba7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java
@@ -67,7 +67,7 @@
   ExtraAction(
       ImmutableSet<Artifact> extraActionInputs,
       RunfilesSupplier runfilesSupplier,
-      Collection<Artifact> outputs,
+      Collection<Artifact.DerivedArtifact> outputs,
       Action shadowedAction,
       boolean createDummyOutput,
       CommandLine argv,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionSpec.java b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionSpec.java
index 9e4cdd2..5c17eff 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionSpec.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionSpec.java
@@ -78,12 +78,11 @@
     return label;
   }
 
-  /**
-   * Adds an extra_action to the action graph based on the action to shadow.
-   */
-  public Collection<Artifact> addExtraAction(RuleContext owningRule, Action actionToShadow) {
-    Collection<Artifact> extraActionOutputs = new LinkedHashSet<>();
-    Collection<Artifact> protoOutputs = new ArrayList<>();
+  /** Adds an extra_action to the action graph based on the action to shadow. */
+  public Collection<Artifact.DerivedArtifact> addExtraAction(
+      RuleContext owningRule, Action actionToShadow) {
+    Collection<Artifact.DerivedArtifact> extraActionOutputs = new LinkedHashSet<>();
+    Collection<Artifact.DerivedArtifact> protoOutputs = new ArrayList<>();
     NestedSetBuilder<Artifact> extraActionInputs = NestedSetBuilder.stableOrder();
 
     Label ownerLabel = owningRule.getLabel();
@@ -111,8 +110,8 @@
 
     // We generate a file containing a protocol buffer describing the action that is being shadowed.
     // It is up to each action being shadowed to decide what contents to store here.
-    Artifact extraActionInfoFile = getExtraActionOutputArtifact(
-        owningRule, actionToShadow, "$(ACTION_ID).xa");
+    Artifact.DerivedArtifact extraActionInfoFile =
+        getExtraActionOutputArtifact(owningRule, actionToShadow, "$(ACTION_ID).xa");
     owningRule.registerAction(new ExtraActionInfoFileWriteAction(
         actionToShadow.getOwner(), extraActionInfoFile, actionToShadow));
     extraActionInputs.add(extraActionInfoFile);
@@ -152,7 +151,10 @@
             commandMessage,
             label.getName()));
 
-    return ImmutableSet.<Artifact>builder().addAll(extraActionOutputs).addAll(protoOutputs).build();
+    return ImmutableSet.<Artifact.DerivedArtifact>builder()
+        .addAll(extraActionOutputs)
+        .addAll(protoOutputs)
+        .build();
   }
 
   /**
@@ -177,22 +179,19 @@
   }
 
   /**
-   * Creates an output artifact for the extra_action based on the output_template.
-   * The path will be in the following form:
-   * <output dir>/<target-configuration-specific-path>/extra_actions/<extra_action_label>/ +
-   *   <configured_target_label>/<expanded_template>
+   * Creates an output artifact for the extra_action based on the output_template. The path will be
+   * in the following form: <output
+   * dir>/<target-configuration-specific-path>/extra_actions/<extra_action_label>/ +
+   * <configured_target_label>/<expanded_template>
    *
-   * The template can use the following variables:
-   * $(ACTION_ID): a unique id for the extra_action.
+   * <p>The template can use the following variables: $(ACTION_ID): a unique id for the
+   * extra_action.
    *
-   *  Sample:
-   *    extra_action: foo/bar:extra
-   *    template: $(ACTION_ID).analysis
-   *    target: foo/bar:main
-   *    expands to: output/configuration/extra_actions/\
-   *      foo/bar/extra/foo/bar/4683026f7ac1dd1a873ccc8c3d764132.analysis
+   * <p>Sample: extra_action: foo/bar:extra template: $(ACTION_ID).analysis target: foo/bar:main
+   * expands to: output/configuration/extra_actions/\
+   * foo/bar/extra/foo/bar/4683026f7ac1dd1a873ccc8c3d764132.analysis
    */
-  private Artifact getExtraActionOutputArtifact(
+  private Artifact.DerivedArtifact getExtraActionOutputArtifact(
       RuleContext ruleContext, Action action, String template) {
     String actionId =
         getActionId(ruleContext.getActionKeyContext(), ruleContext.getActionOwner(), action);
@@ -203,7 +202,7 @@
     return getRootRelativePath(template, ruleContext);
   }
 
-  private Artifact getRootRelativePath(String template, RuleContext ruleContext) {
+  private Artifact.DerivedArtifact getRootRelativePath(String template, RuleContext ruleContext) {
     PathFragment extraActionPackageFragment = label.getPackageIdentifier().getSourceRoot();
     PathFragment extraActionPrefix = extraActionPackageFragment.getRelative(label.getName());
     PathFragment rootRelativePath = PathFragment.create("extra_actions")
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
index 35d4bbe..df30e48 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
@@ -22,9 +22,9 @@
 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.ActionLookupValue;
 import com.google.devtools.build.lib.actions.ActionRegistry;
 import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.actions.ArtifactOwner;
 import com.google.devtools.build.lib.actions.ArtifactRoot;
 import com.google.devtools.build.lib.actions.CommandLine;
 import com.google.devtools.build.lib.actions.CommandLineExpansionException;
@@ -117,7 +117,7 @@
       }
 
       @Override
-      public ArtifactOwner getOwner() {
+      public ActionLookupValue.ActionLookupKey getOwner() {
         return skylarkActionFactory
             .getActionConstructionContext()
             .getAnalysisEnvironment()
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
index 6e5a58e..c702722 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
@@ -321,7 +321,8 @@
 
     Iterable<Artifact> inputs = inputsBuilder.build();
     int shardRuns = (shards > 0 ? shards : 1);
-    List<Artifact> results = Lists.newArrayListWithCapacity(runsPerTest * shardRuns);
+    List<Artifact.DerivedArtifact> results =
+        Lists.newArrayListWithCapacity(runsPerTest * shardRuns);
     ImmutableList.Builder<Artifact> coverageArtifacts = ImmutableList.builder();
 
     for (int run = 0; run < runsPerTest; run++) {
@@ -337,14 +338,14 @@
           testRunDir += PathFragment.SEPARATOR_CHAR;
           shardRunDir = shardRunDir.isEmpty() ? testRunDir : shardRunDir + "_" + testRunDir;
         }
-        Artifact testLog =
+        Artifact.DerivedArtifact testLog =
             ruleContext.getPackageRelativeArtifact(
                 targetName.getRelative(shardRunDir + "test.log"), root);
-        Artifact cacheStatus =
+        Artifact.DerivedArtifact cacheStatus =
             ruleContext.getPackageRelativeArtifact(
                 targetName.getRelative(shardRunDir + "test.cache_status"), root);
 
-        Artifact coverageArtifact = null;
+        Artifact.DerivedArtifact coverageArtifact = null;
         if (collectCodeCoverage) {
           coverageArtifact = ruleContext.getPackageRelativeArtifact(
               targetName.getRelative(shardRunDir + "coverage.dat"), root);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java
index f356deb..cc64055 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java
@@ -58,7 +58,8 @@
    * @param target the configured target. Should belong to a test rule.
    * @return the test status artifacts
    */
-  public static ImmutableList<Artifact> getTestStatusArtifacts(TransitiveInfoCollection target) {
+  public static ImmutableList<Artifact.DerivedArtifact> getTestStatusArtifacts(
+      TransitiveInfoCollection target) {
     return target.getProvider(TestProvider.class).getTestParams().getTestStatusArtifacts();
   }
 
@@ -70,16 +71,20 @@
     private final int shards;
     private final TestTimeout timeout;
     private final String testRuleClass;
-    private final ImmutableList<Artifact> testStatusArtifacts;
+    private final ImmutableList<Artifact.DerivedArtifact> testStatusArtifacts;
     private final ImmutableList<Artifact> coverageArtifacts;
     private final FilesToRunProvider coverageReportGenerator;
 
     /**
-     * Don't call this directly. Instead use
-     * {@link com.google.devtools.build.lib.analysis.test.TestActionBuilder}.
+     * Don't call this directly. Instead use {@link
+     * com.google.devtools.build.lib.analysis.test.TestActionBuilder}.
      */
-    TestParams(int runs, int shards, TestTimeout timeout, String testRuleClass,
-        ImmutableList<Artifact> testStatusArtifacts,
+    TestParams(
+        int runs,
+        int shards,
+        TestTimeout timeout,
+        String testRuleClass,
+        ImmutableList<Artifact.DerivedArtifact> testStatusArtifacts,
         ImmutableList<Artifact> coverageArtifacts,
         FilesToRunProvider coverageReportGenerator) {
       this.runs = runs;
@@ -123,7 +128,7 @@
      * Returns a list of test status artifacts that represent serialized test status protobuffers
      * produced by testing this target.
      */
-    public ImmutableList<Artifact> getTestStatusArtifacts() {
+    public ImmutableList<Artifact.DerivedArtifact> getTestStatusArtifacts() {
       return testStatusArtifacts;
     }