aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/actions
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2018-01-25 12:31:53 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-25 12:33:49 -0800
commit6e10efac41ea0f85130585d44df2f0565ea8d6fa (patch)
tree74363aa2b367b611d4ceba71cbcb55672d1148ca /src/main/java/com/google/devtools/build/lib/actions
parenteb0150b5e3b95d011e99e6f531c962831beaa109 (diff)
Add CommandLineItem interface.
This interface makes it clearer in the type system exactly how items that go into a CustomCommandLine are turned into strings. It is a preparatory change to allow command line fingerprints to be more cheaply calculated, but it is valuable in itself from a code quality standpoint. PiperOrigin-RevId: 183274022
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/actions')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionKeyContext.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/Artifact.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/BUILD1
3 files changed, 17 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionKeyContext.java b/src/main/java/com/google/devtools/build/lib/actions/ActionKeyContext.java
index 6ba29a7655..6378675147 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionKeyContext.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionKeyContext.java
@@ -20,22 +20,15 @@ import com.google.devtools.build.lib.util.Fingerprint;
/** Contains state that aids in action key computation via {@link AbstractAction#computeKey}. */
public class ActionKeyContext {
- private static final class ArtifactNestedSetFingerprintCache
- extends NestedSetFingerprintCache<Artifact> {
- @Override
- protected void addItemFingerprint(Fingerprint fingerprint, Artifact item) {
- fingerprint.addPath(item.getExecPath());
- }
- }
- private final ArtifactNestedSetFingerprintCache artifactNestedSetFingerprintCache =
- new ArtifactNestedSetFingerprintCache();
+ private final NestedSetFingerprintCache nestedSetFingerprintCache =
+ new NestedSetFingerprintCache();
- public void addArtifactsToFingerprint(Fingerprint fingerprint, NestedSet<Artifact> artifacts) {
- artifactNestedSetFingerprintCache.addNestedSetToFingerprint(fingerprint, artifacts);
+ public <T> void addNestedSetToFingerprint(Fingerprint fingerprint, NestedSet<T> nestedSet) {
+ nestedSetFingerprintCache.addNestedSetToFingerprint(fingerprint, nestedSet);
}
public void clear() {
- artifactNestedSetFingerprintCache.clear();
+ nestedSetFingerprintCache.clear();
}
}
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 e371ec1670..d45d16d587 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
@@ -27,6 +27,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Streams;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata.MiddlemanType;
+import com.google.devtools.build.lib.analysis.actions.CommandLineItem;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.shell.ShellUtils;
@@ -115,7 +116,11 @@ import javax.annotation.Nullable;
+ "<a href='ctx.html#outputs'>ctx.outputs</a>."
)
public class Artifact
- implements FileType.HasFileType, ActionInput, SkylarkValue, Comparable<Object> {
+ implements FileType.HasFileType,
+ ActionInput,
+ SkylarkValue,
+ Comparable<Object>,
+ CommandLineItem {
/** Compares artifact according to their exec paths. Sorts null values first. */
@SuppressWarnings("ReferenceEquality") // "a == b" is an optimization
@@ -328,6 +333,11 @@ public class Artifact
return getExecPath().filePathForFileTypeMatcher();
}
+ @Override
+ public String expandToCommandLine() {
+ return getExecPathString();
+ }
+
/**
* Returns the artifact owner. May be null.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BUILD b/src/main/java/com/google/devtools/build/lib/actions/BUILD
index 2c3f3abb0e..f936712ffb 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/actions/BUILD
@@ -17,6 +17,7 @@ java_library(
"cache/*.java",
]),
deps = [
+ "//src/main/java/com/google/devtools/build/lib:commandline_item",
"//src/main/java/com/google/devtools/build/lib:events",
"//src/main/java/com/google/devtools/build/lib:io",
"//src/main/java/com/google/devtools/build/lib:packages-internal",