Add ActionInput.getExecPath, which returns a PathFragment

Update some callers to use getExecPath, which generally results in less
intermediate garbage generation (almost all callers need a PathFragment, not
a String).

Another small step towards #1593.

--
PiperOrigin-RevId: 150631279
MOS_MIGRATED_REVID=150631279
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionInput.java b/src/main/java/com/google/devtools/build/lib/actions/ActionInput.java
index a21ed85..91bfb0c 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionInput.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionInput.java
@@ -14,6 +14,8 @@
 
 package com.google.devtools.build.lib.actions;
 
+import com.google.devtools.build.lib.vfs.PathFragment;
+
 /**
  * Represents an input file to a build action, with an appropriate relative path and digest
  * value.
@@ -33,5 +35,10 @@
 public interface ActionInput {
 
   /** @return the relative path to the input file. */
-  public String getExecPathString();
+  String getExecPathString();
+
+  /**
+   * @return the relative path to the input file.
+   */
+  PathFragment getExecPath();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java b/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java
index 4ca4a1b..c63fd5b 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java
@@ -69,6 +69,7 @@
    */
   private static class BasicActionInput implements ActionInput {
     private final String path;
+
     public BasicActionInput(String path) {
       this.path = Preconditions.checkNotNull(path);
     }
@@ -79,6 +80,11 @@
     }
 
     @Override
+    public PathFragment getExecPath() {
+      return new PathFragment(path);
+    }
+
+    @Override
     public int hashCode() {
       return path.hashCode();
     }
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
index 4b7adbc..bd54b0f 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
@@ -344,6 +344,7 @@
     return root;
   }
 
+  @Override
   public final PathFragment getExecPath() {
     return execPath;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/exec/DigestTest.java b/src/test/java/com/google/devtools/build/lib/exec/DigestTest.java
index b610641..27edca0 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/DigestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/DigestTest.java
@@ -23,6 +23,7 @@
 import com.google.devtools.build.lib.testutil.Suite;
 import com.google.devtools.build.lib.testutil.TestSpec;
 import com.google.devtools.build.lib.util.Pair;
+import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.protobuf.ByteString;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -61,7 +62,7 @@
         "8b1a9953c4611296a827abf8c47804d7",
         Digest.fromContent("Hello".getBytes(UTF_8)).toStringUtf8());
 
-    assertEquals(UGLY_DIGEST, Digest.fromContent(UGLY.getBytes()).toStringUtf8());
+    assertEquals(UGLY_DIGEST, Digest.fromContent(UGLY.getBytes(UTF_8)).toStringUtf8());
 
     // ByteBuffer digest not idempotent because ByteBuffer manages a "position" internally.
     ByteBuffer buffer = ByteBuffer.wrap(UGLY.getBytes(UTF_8));
@@ -106,6 +107,11 @@
               public String getExecPathString() {
                 throw new UnsupportedOperationException();
               }
+
+              @Override
+              public PathFragment getExecPath() {
+                throw new UnsupportedOperationException();
+              }
             });
     assertEquals(UGLY_DIGEST, result.first.toStringUtf8());
     assertEquals(UGLY.length(), result.second.longValue());