Introduce TreeFileArtifact, which represents files under TreeArtifacts.
Remove ArtifactFile, which is rendered obsolete by TreeFileArtifact.

--
MOS_MIGRATED_REVID=119789154
diff --git a/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java b/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
index 37f57c8..ae2d09a 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
@@ -201,7 +201,7 @@
 
   @Test
   public void testAddExpandedArtifacts() throws Exception {
-    List<ArtifactFile> expanded = new ArrayList<>();
+    List<Artifact> expanded = new ArrayList<>();
     MutableActionGraph actionGraph = new MapBasedActionGraph();
     List<Artifact> original = getFooBarArtifacts(actionGraph, true);
     Artifact.addExpandedArtifacts(original, expanded,
@@ -252,7 +252,7 @@
   // TODO consider tests for the future
   @Test
   public void testAddExpandedArtifactsNewActionGraph() throws Exception {
-    List<ArtifactFile> expanded = new ArrayList<>();
+    List<Artifact> expanded = new ArrayList<>();
     MutableActionGraph actionGraph = new MapBasedActionGraph();
     List<Artifact> original = getFooBarArtifacts(actionGraph, true);
     Artifact.addExpandedArtifacts(original, expanded,
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
index 9f35341..ef53ce5 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
@@ -397,7 +397,7 @@
       FileArtifactValue value;
       if (action.getActionType() == MiddlemanType.NORMAL) {
         try {
-          FileValue fileValue = ActionMetadataHandler.fileValueFromArtifactFile(output, null, null);
+          FileValue fileValue = ActionMetadataHandler.fileValueFromArtifact(output, null, null);
           artifactData.put(output, fileValue);
           value = FileArtifactValue.create(output, fileValue);
         } catch (IOException e) {
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
index e9f4cf8..6be70e2 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
@@ -14,7 +14,7 @@
 package com.google.devtools.build.lib.skyframe;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.actions.ActionInputHelper.artifactFile;
+import static com.google.devtools.build.lib.actions.ActionInputHelper.treeFileArtifact;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -28,7 +28,7 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
 import com.google.devtools.build.lib.actions.Artifact.SpecialArtifactType;
-import com.google.devtools.build.lib.actions.ArtifactFile;
+import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
 import com.google.devtools.build.lib.actions.ArtifactOwner;
 import com.google.devtools.build.lib.actions.Root;
 import com.google.devtools.build.lib.actions.cache.DigestUtils;
@@ -40,7 +40,6 @@
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.BasicFilesystemDirtinessChecker;
 import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
-import com.google.devtools.build.lib.util.Preconditions;
 import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
 import com.google.devtools.build.lib.vfs.BatchStat;
 import com.google.devtools.build.lib.vfs.FileStatus;
@@ -391,14 +390,14 @@
     // contents into ActionExecutionValues.
 
     Artifact out1 = createTreeArtifact("one");
-    ArtifactFile file11 = artifactFile(out1, "fizz");
+    TreeFileArtifact file11 = treeFileArtifact(out1, "fizz");
     FileSystemUtils.createDirectoryAndParents(out1.getPath());
     FileSystemUtils.writeContentAsLatin1(file11.getPath(), "buzz");
 
     Artifact out2 = createTreeArtifact("two");
     FileSystemUtils.createDirectoryAndParents(out2.getPath().getChild("subdir"));
-    ArtifactFile file21 = artifactFile(out2, "moony");
-    ArtifactFile file22 = artifactFile(out2, "subdir/wormtail");
+    TreeFileArtifact file21 = treeFileArtifact(out2, "moony");
+    TreeFileArtifact file22 = treeFileArtifact(out2, "subdir/wormtail");
     FileSystemUtils.writeContentAsLatin1(file21.getPath(), "padfoot");
     FileSystemUtils.writeContentAsLatin1(file22.getPath(), "prongs");
 
@@ -484,11 +483,11 @@
         .containsExactly(ActionExecutionValue.key(action1));
 
     // Test that directory contents (and nested contents) matter
-    ArtifactFile out1new = artifactFile(out1, "julius/caesar");
+    Artifact out1new = treeFileArtifact(out1, "julius/caesar");
     FileSystemUtils.createDirectoryAndParents(out1.getPath().getChild("julius"));
     FileSystemUtils.writeContentAsLatin1(out1new.getPath(), "octavian");
     // even for empty directories
-    ArtifactFile outEmptyNew = artifactFile(outEmpty, "marcus");
+    Artifact outEmptyNew = treeFileArtifact(outEmpty, "marcus");
     FileSystemUtils.writeContentAsLatin1(outEmptyNew.getPath(), "aurelius");
     // so does removing
     file21.getPath().delete();
@@ -624,7 +623,7 @@
         FileStatusWithDigest stat =
             forceDigest ? statWithDigest(path, path.statIfFound(Symlinks.NOFOLLOW)) : null;
         artifactData.put(output,
-            ActionMetadataHandler.fileValueFromArtifactFile(output, stat, null));
+            ActionMetadataHandler.fileValueFromArtifact(output, stat, null));
       } catch (IOException e) {
         throw new IllegalStateException(e);
       }
@@ -637,28 +636,27 @@
 
   private ActionExecutionValue actionValueWithEmptyDirectory(Artifact emptyDir) {
     TreeArtifactValue emptyValue = TreeArtifactValue.create
-        (ImmutableMap.<PathFragment, FileArtifactValue>of());
+        (ImmutableMap.<TreeFileArtifact, FileArtifactValue>of());
 
     return new ActionExecutionValue(
-        ImmutableMap.<ArtifactFile, FileValue>of(),
+        ImmutableMap.<Artifact, FileValue>of(),
         ImmutableMap.of(emptyDir, emptyValue),
         ImmutableMap.<Artifact, FileArtifactValue>of());
   }
 
-  private ActionExecutionValue actionValueWithTreeArtifacts(List<ArtifactFile> contents) {
-    Map<ArtifactFile, FileValue> fileData = new HashMap<>();
-    Map<Artifact, Map<ArtifactFile, FileArtifactValue>> directoryData = new HashMap<>();
+  private ActionExecutionValue actionValueWithTreeArtifacts(List<TreeFileArtifact> contents) {
+    Map<Artifact, FileValue> fileData = new HashMap<>();
+    Map<Artifact, Map<TreeFileArtifact, FileArtifactValue>> directoryData = new HashMap<>();
 
-    for (ArtifactFile output : contents) {
-      Preconditions.checkState(!(output instanceof Artifact));
+    for (TreeFileArtifact output : contents) {
       try {
-        Map<ArtifactFile, FileArtifactValue> dirDatum =
+        Map<TreeFileArtifact, FileArtifactValue> dirDatum =
             directoryData.get(output.getParent());
         if (dirDatum == null) {
           dirDatum = new HashMap<>();
           directoryData.put(output.getParent(), dirDatum);
         }
-        FileValue fileValue = ActionMetadataHandler.fileValueFromArtifactFile(output, null, null);
+        FileValue fileValue = ActionMetadataHandler.fileValueFromArtifact(output, null, null);
         // Always test with digests. TreeArtifact checking behavior doesn't depend on the
         // presence/absence of digests. FileValue checking w/o digests is already tested.
         byte[] digest = DigestUtils.getDigestOrFail(output.getPath(), 1);
@@ -671,14 +669,9 @@
     }
 
     Map<Artifact, TreeArtifactValue> treeArtifactData = new HashMap<>();
-    for (Map.Entry<Artifact, Map<ArtifactFile, FileArtifactValue>> dirDatum :
+    for (Map.Entry<Artifact, Map<TreeFileArtifact, FileArtifactValue>> dirDatum :
         directoryData.entrySet()) {
-      Map<PathFragment, FileArtifactValue> artifactValues = new HashMap<>();
-      for (Map.Entry<ArtifactFile, FileArtifactValue> dirEntry : dirDatum.getValue().entrySet()) {
-        ArtifactFile file = dirEntry.getKey();
-        artifactValues.put(file.getParentRelativePath(), dirEntry.getValue());
-      }
-      treeArtifactData.put(dirDatum.getKey(), TreeArtifactValue.create(artifactValues));
+      treeArtifactData.put(dirDatum.getKey(), TreeArtifactValue.create(dirDatum.getValue()));
     }
 
     return new ActionExecutionValue(fileData, treeArtifactData,
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java
index 18d54e9..4c1a6713 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java
@@ -15,7 +15,7 @@
 
 import static com.google.common.base.Throwables.getRootCause;
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.actions.ActionInputHelper.artifactFile;
+import static com.google.devtools.build.lib.actions.ActionInputHelper.treeFileArtifact;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -34,7 +34,7 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
 import com.google.devtools.build.lib.actions.Artifact.SpecialArtifactType;
-import com.google.devtools.build.lib.actions.ArtifactFile;
+import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
 import com.google.devtools.build.lib.actions.BuildFailedException;
 import com.google.devtools.build.lib.actions.Root;
 import com.google.devtools.build.lib.actions.TestExecException;
@@ -67,20 +67,20 @@
 /** Timestamp builder tests for TreeArtifacts. */
 @RunWith(JUnit4.class)
 public class TreeArtifactBuildTest extends TimestampBuilderTestCase {
-  // Common Artifacts, ArtifactFiles, and Buttons. These aren't all used in all tests, but they're
-  // used often enough that we can save ourselves a lot of copy-pasted code by creating them
+  // Common Artifacts, TreeFileArtifact, and Buttons. These aren't all used in all tests, but
+  // they're used often enough that we can save ourselves a lot of copy-pasted code by creating them
   // in setUp().
 
   Artifact in;
 
   Artifact outOne;
-  ArtifactFile outOneFileOne;
-  ArtifactFile outOneFileTwo;
+  TreeFileArtifact outOneFileOne;
+  TreeFileArtifact outOneFileTwo;
   Button buttonOne = new Button();
 
   Artifact outTwo;
-  ArtifactFile outTwoFileOne;
-  ArtifactFile outTwoFileTwo;
+  TreeFileArtifact outTwoFileOne;
+  TreeFileArtifact outTwoFileTwo;
   Button buttonTwo = new Button();
 
   @Before
@@ -89,12 +89,12 @@
     writeFile(in, "input_content");
 
     outOne = createTreeArtifact("outputOne");
-    outOneFileOne = artifactFile(outOne, "out_one_file_one");
-    outOneFileTwo = artifactFile(outOne, "out_one_file_two");
+    outOneFileOne = treeFileArtifact(outOne, "out_one_file_one");
+    outOneFileTwo = treeFileArtifact(outOne, "out_one_file_two");
 
     outTwo = createTreeArtifact("outputTwo");
-    outTwoFileOne = artifactFile(outTwo, "out_one_file_one");
-    outTwoFileTwo = artifactFile(outTwo, "out_one_file_two");
+    outTwoFileOne = treeFileArtifact(outTwo, "out_one_file_one");
+    outTwoFileTwo = treeFileArtifact(outTwo, "out_one_file_two");
   }
 
   /** Simple smoke test. If this isn't passing, something is very wrong... */
@@ -489,42 +489,42 @@
    * exactly one output TreeArtifact, and some path fragment inputs/outputs.
    */
   private abstract static class TreeArtifactTestAction extends TestAction {
-    final Iterable<ArtifactFile> inputFiles;
-    final Iterable<ArtifactFile> outputFiles;
+    final Iterable<TreeFileArtifact> inputFiles;
+    final Iterable<TreeFileArtifact> outputFiles;
 
     TreeArtifactTestAction(final Artifact output, final String... subOutputs) {
       this(Runnables.doNothing(),
           null,
-          ImmutableList.<ArtifactFile>of(),
+          ImmutableList.<TreeFileArtifact>of(),
           output,
           Collections2.transform(
               Arrays.asList(subOutputs),
-              new Function<String, ArtifactFile>() {
+              new Function<String, TreeFileArtifact>() {
                 @Nullable
                 @Override
-                public ArtifactFile apply(String s) {
-                  return ActionInputHelper.artifactFile(output, s);
+                public TreeFileArtifact apply(String s) {
+                  return ActionInputHelper.treeFileArtifact(output, s);
                 }
               }));
     }
 
-    TreeArtifactTestAction(Runnable effect, ArtifactFile... outputFiles) {
+    TreeArtifactTestAction(Runnable effect, TreeFileArtifact... outputFiles) {
       this(effect, Arrays.asList(outputFiles));
     }
 
-    TreeArtifactTestAction(Runnable effect, Collection<ArtifactFile> outputFiles) {
-      this(effect, null, ImmutableList.<ArtifactFile>of(),
+    TreeArtifactTestAction(Runnable effect, Collection<TreeFileArtifact> outputFiles) {
+      this(effect, null, ImmutableList.<TreeFileArtifact>of(),
           outputFiles.iterator().next().getParent(), outputFiles);
     }
 
     TreeArtifactTestAction(Runnable effect, Artifact inputFile,
-        Collection<ArtifactFile> outputFiles) {
-      this(effect, inputFile, ImmutableList.<ArtifactFile>of(),
+        Collection<TreeFileArtifact> outputFiles) {
+      this(effect, inputFile, ImmutableList.<TreeFileArtifact>of(),
           outputFiles.iterator().next().getParent(), outputFiles);
     }
 
-    TreeArtifactTestAction(Runnable effect, Collection<ArtifactFile> inputFiles,
-        Collection<ArtifactFile> outputFiles) {
+    TreeArtifactTestAction(Runnable effect, Collection<TreeFileArtifact> inputFiles,
+        Collection<TreeFileArtifact> outputFiles) {
       this(effect, inputFiles.iterator().next().getParent(), inputFiles,
           outputFiles.iterator().next().getParent(), outputFiles);
     }
@@ -532,9 +532,9 @@
     TreeArtifactTestAction(
         Runnable effect,
         @Nullable Artifact input,
-        Collection<ArtifactFile> inputFiles,
+        Collection<TreeFileArtifact> inputFiles,
         Artifact output,
-        Collection<ArtifactFile> outputFiles) {
+        Collection<TreeFileArtifact> outputFiles) {
       super(effect,
           input == null ? ImmutableList.<Artifact>of() : ImmutableList.of(input),
           ImmutableList.of(output));
@@ -543,10 +543,10 @@
       Preconditions.checkArgument(output == null || output.isTreeArtifact());
       this.inputFiles = ImmutableList.copyOf(inputFiles);
       this.outputFiles = ImmutableList.copyOf(outputFiles);
-      for (ArtifactFile inputFile : inputFiles) {
+      for (TreeFileArtifact inputFile : inputFiles) {
         Preconditions.checkState(inputFile.getParent().equals(input));
       }
-      for (ArtifactFile outputFile : outputFiles) {
+      for (TreeFileArtifact outputFile : outputFiles) {
         Preconditions.checkState(outputFile.getParent().equals(output));
       }
     }
@@ -561,7 +561,7 @@
           throw new IllegalStateException("action's input Artifact does not exist: "
               + input.getPath());
         }
-        for (ArtifactFile inputFile : inputFiles) {
+        for (Artifact inputFile : inputFiles) {
           if (!inputFile.getPath().exists()) {
             throw new IllegalStateException("action's input does not exist: " + inputFile);
           }
@@ -573,7 +573,7 @@
       try {
         effect.call();
         executeTestBehavior(actionExecutionContext);
-        for (ArtifactFile outputFile : outputFiles) {
+        for (TreeFileArtifact outputFile : outputFiles) {
           actionExecutionContext.getMetadataHandler().addExpandedTreeOutput(outputFile);
         }
       } catch (RuntimeException e) {
@@ -611,37 +611,37 @@
 
     void registerOutput(ActionExecutionContext context, String outputName) throws IOException {
       context.getMetadataHandler().addExpandedTreeOutput(
-          artifactFile(getSoleOutput(), new PathFragment(outputName)));
+          treeFileArtifact(getSoleOutput(), new PathFragment(outputName)));
     }
 
-    static List<ArtifactFile> asArtifactFiles(final Artifact parent, String... files) {
+    static List<TreeFileArtifact> asTreeFileArtifacts(final Artifact parent, String... files) {
       return Lists.transform(
           Arrays.asList(files),
-          new Function<String, ArtifactFile>() {
+          new Function<String, TreeFileArtifact>() {
             @Nullable
             @Override
-            public ArtifactFile apply(String s) {
-              return ActionInputHelper.artifactFile(parent, s);
+            public TreeFileArtifact apply(String s) {
+              return ActionInputHelper.treeFileArtifact(parent, s);
             }
           });
     }
   }
 
-  /** An action that touches some output ArtifactFiles. Takes no inputs. */
+  /** An action that touches some output TreeFileArtifacts. Takes no inputs. */
   private static class TouchingTestAction extends TreeArtifactTestAction {
-    TouchingTestAction(ArtifactFile... outputPaths) {
+    TouchingTestAction(TreeFileArtifact... outputPaths) {
       super(Runnables.doNothing(), outputPaths);
     }
 
     TouchingTestAction(Runnable effect, Artifact output, String... outputPaths) {
-      super(effect, asArtifactFiles(output, outputPaths));
+      super(effect, asTreeFileArtifacts(output, outputPaths));
     }
 
     @Override
     public void executeTestBehavior(ActionExecutionContext actionExecutionContext)
         throws ActionExecutionException {
       try {
-        for (ArtifactFile file : outputFiles) {
+        for (Artifact file : outputFiles) {
           touchFile(file);
         }
       } catch (IOException e) {
@@ -652,14 +652,14 @@
 
   /** Takes an input file and populates several copies inside a TreeArtifact. */
   private static class WriteInputToFilesAction extends TreeArtifactTestAction {
-    WriteInputToFilesAction(Artifact input, ArtifactFile... outputs) {
+    WriteInputToFilesAction(Artifact input, TreeFileArtifact... outputs) {
       this(Runnables.doNothing(), input, outputs);
     }
 
     WriteInputToFilesAction(
         Runnable effect,
         Artifact input,
-        ArtifactFile... outputs) {
+        TreeFileArtifact... outputs) {
       super(effect, input, Arrays.asList(outputs));
       Preconditions.checkArgument(!input.isTreeArtifact());
     }
@@ -668,7 +668,7 @@
     public void executeTestBehavior(ActionExecutionContext actionExecutionContext)
         throws ActionExecutionException {
       try {
-        for (ArtifactFile file : outputFiles) {
+        for (Artifact file : outputFiles) {
           FileSystemUtils.createDirectoryAndParents(file.getPath().getParentDirectory());
           FileSystemUtils.copyFile(getSoleInput().getPath(), file.getPath());
         }
@@ -678,37 +678,37 @@
     }
   }
 
-  /** Copies the given ArtifactFile inputs to the given outputs, in respective order. */
+  /** Copies the given TreeFileArtifact inputs to the given outputs, in respective order. */
   private static class CopyTreeAction extends TreeArtifactTestAction {
 
     CopyTreeAction(Runnable effect, Artifact input, Artifact output, String... sourcesAndDests) {
-      super(effect, input, asArtifactFiles(input, sourcesAndDests), output,
-          asArtifactFiles(output, sourcesAndDests));
+      super(effect, input, asTreeFileArtifacts(input, sourcesAndDests), output,
+          asTreeFileArtifacts(output, sourcesAndDests));
     }
 
     CopyTreeAction(
-        Collection<ArtifactFile> inputPaths,
-        Collection<ArtifactFile> outputPaths) {
+        Collection<TreeFileArtifact> inputPaths,
+        Collection<TreeFileArtifact> outputPaths) {
       super(Runnables.doNothing(), inputPaths, outputPaths);
     }
 
     CopyTreeAction(
         Runnable effect,
-        Collection<ArtifactFile> inputPaths,
-        Collection<ArtifactFile> outputPaths) {
+        Collection<TreeFileArtifact> inputPaths,
+        Collection<TreeFileArtifact> outputPaths) {
       super(effect, inputPaths, outputPaths);
     }
 
     @Override
     public void executeTestBehavior(ActionExecutionContext actionExecutionContext)
         throws ActionExecutionException {
-      Iterator<ArtifactFile> inputIterator = inputFiles.iterator();
-      Iterator<ArtifactFile> outputIterator = outputFiles.iterator();
+      Iterator<TreeFileArtifact> inputIterator = inputFiles.iterator();
+      Iterator<TreeFileArtifact> outputIterator = outputFiles.iterator();
 
       try {
         while (inputIterator.hasNext() || outputIterator.hasNext()) {
-          ArtifactFile input = inputIterator.next();
-          ArtifactFile output = outputIterator.next();
+          Artifact input = inputIterator.next();
+          Artifact output = outputIterator.next();
           FileSystemUtils.createDirectoryAndParents(output.getPath().getParentDirectory());
           FileSystemUtils.copyFile(input.getPath(), output.getPath());
         }
@@ -746,7 +746,7 @@
     FileSystemUtils.writeContentAsLatin1(path, contents);
   }
 
-  private static void writeFile(ArtifactFile file, String contents) throws IOException {
+  private static void writeFile(Artifact file, String contents) throws IOException {
     writeFile(file.getPath(), contents);
   }
 
@@ -756,11 +756,11 @@
     FileSystemUtils.touchFile(path);
   }
 
-  private static void touchFile(ArtifactFile file) throws IOException {
+  private static void touchFile(Artifact file) throws IOException {
     touchFile(file.getPath());
   }
 
-  private static void deleteFile(ArtifactFile file) throws IOException {
+  private static void deleteFile(Artifact file) throws IOException {
     Path path = file.getPath();
     // sometimes we write read-only files
     if (path.exists()) {
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
index 54a1418..c36e3a1 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
@@ -14,7 +14,7 @@
 package com.google.devtools.build.lib.skyframe;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.actions.ActionInputHelper.asArtifactFiles;
+import static com.google.devtools.build.lib.actions.ActionInputHelper.asTreeFileArtifacts;
 import static org.junit.Assert.fail;
 
 import com.google.common.base.Throwables;
@@ -27,7 +27,7 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
 import com.google.devtools.build.lib.actions.Artifact.SpecialArtifactType;
-import com.google.devtools.build.lib.actions.ArtifactFile;
+import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
 import com.google.devtools.build.lib.actions.MissingInputFileException;
 import com.google.devtools.build.lib.actions.Root;
 import com.google.devtools.build.lib.actions.cache.Digest;
@@ -92,8 +92,8 @@
       throws Exception {
     TreeArtifactValue value = evaluateTreeArtifact(tree, children);
     assertThat(value.getChildPaths()).containsExactlyElementsIn(ImmutableSet.copyOf(children));
-    assertThat(value.getChildren(tree)).containsExactlyElementsIn(
-        asArtifactFiles(tree, children));
+    assertThat(value.getChildren()).containsExactlyElementsIn(
+        asTreeFileArtifacts(tree, children));
 
     // Assertions about digest. As of this writing this logic is essentially the same
     // as that in TreeArtifact, but it's good practice to unit test anyway to guard against
@@ -219,19 +219,19 @@
   private class TreeArtifactExecutionFunction implements SkyFunction {
     @Override
     public SkyValue compute(SkyKey skyKey, Environment env) throws SkyFunctionException {
-      Map<ArtifactFile, FileValue> fileData = new HashMap<>();
-      Map<PathFragment, FileArtifactValue> treeArtifactData = new HashMap<>();
+      Map<Artifact, FileValue> fileData = new HashMap<>();
+      Map<TreeFileArtifact, FileArtifactValue> treeArtifactData = new HashMap<>();
       Action action = (Action) skyKey.argument();
       Artifact output = Iterables.getOnlyElement(action.getOutputs());
       for (PathFragment subpath : testTreeArtifactContents) {
         try {
-          ArtifactFile suboutput = ActionInputHelper.artifactFile(output, subpath);
-          FileValue fileValue = ActionMetadataHandler.fileValueFromArtifactFile(
+          TreeFileArtifact suboutput = ActionInputHelper.treeFileArtifact(output, subpath);
+          FileValue fileValue = ActionMetadataHandler.fileValueFromArtifact(
               suboutput, null, null);
           fileData.put(suboutput, fileValue);
           // Ignore FileValue digests--correctness of these digests is not part of this tests.
           byte[] digest = DigestUtils.getDigestOrFail(suboutput.getPath(), 1);
-          treeArtifactData.put(suboutput.getParentRelativePath(),
+          treeArtifactData.put(suboutput,
               FileArtifactValue.createWithDigest(suboutput.getPath(), digest, fileValue.getSize()));
         } catch (IOException e) {
           throw new SkyFunctionException(e, Transience.TRANSIENT) {};