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());