diff options
author | 2018-01-25 12:31:53 -0800 | |
---|---|---|
committer | 2018-01-25 12:33:49 -0800 | |
commit | 6e10efac41ea0f85130585d44df2f0565ea8d6fa (patch) | |
tree | 74363aa2b367b611d4ceba71cbcb55672d1148ca /src/main/java/com/google/devtools/build/lib/actions | |
parent | eb0150b5e3b95d011e99e6f531c962831beaa109 (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')
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", |