diff options
author | jcater <jcater@google.com> | 2018-02-28 12:44:39 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-02-28 12:46:43 -0800 |
commit | 614fe0dfb9e6bed90c361e4b6bfff37c11a4775f (patch) | |
tree | 1a7dd6c919ba817afe1ec9836976f50c20b617e1 /src/main/java/com/google/devtools | |
parent | 49451c1f853acf3e60ef90635767da0addb8671e (diff) |
Refactor the AbstractAction computeKey method to be easier to add invariants
for every type of action.
PiperOrigin-RevId: 187368369
Diffstat (limited to 'src/main/java/com/google/devtools')
35 files changed, 196 insertions, 248 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java index 6b9d374f0f..86fa2410b7 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java +++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java @@ -38,6 +38,7 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import com.google.devtools.build.lib.syntax.SkylarkDict; import com.google.devtools.build.lib.syntax.SkylarkList; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; +import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; @@ -302,16 +303,18 @@ public abstract class AbstractAction implements Action, SkylarkValue { /** * See the javadoc for {@link com.google.devtools.build.lib.actions.Action} and {@link * ActionExecutionMetadata#getKey(ActionKeyContext)} for the contract for {@link - * #computeKey(ActionKeyContext)}. + * #computeKey(ActionKeyContext, Fingerprint)}. */ - protected abstract String computeKey(ActionKeyContext actionKeyContext) + protected abstract void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) throws CommandLineExpansionException; @Override public final synchronized String getKey(ActionKeyContext actionKeyContext) { if (cachedKey == null) { try { - cachedKey = computeKey(actionKeyContext); + Fingerprint fp = new Fingerprint(); + computeKey(actionKeyContext, fp); + cachedKey = fp.hexDigestAndReset(); } catch (CommandLineExpansionException e) { cachedKey = KEY_ERROR; } diff --git a/src/main/java/com/google/devtools/build/lib/actions/FailAction.java b/src/main/java/com/google/devtools/build/lib/actions/FailAction.java index 86c22e0855..a61d2b2f50 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/FailAction.java +++ b/src/main/java/com/google/devtools/build/lib/actions/FailAction.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.actions; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.util.Fingerprint; /** * FailAction is an Action that always fails to execute. (Used as scaffolding @@ -45,8 +46,8 @@ public final class FailAction extends AbstractAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - return GUID; + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/actions/MiddlemanAction.java b/src/main/java/com/google/devtools/build/lib/actions/MiddlemanAction.java index addbf6ea8d..70a659948e 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/MiddlemanAction.java +++ b/src/main/java/com/google/devtools/build/lib/actions/MiddlemanAction.java @@ -21,6 +21,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; +import com.google.devtools.build.lib.util.Fingerprint; /** * An action that depends on a set of inputs and creates a single output file whenever it runs. This @@ -73,11 +74,10 @@ public final class MiddlemanAction extends AbstractAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { // TODO(bazel-team): Need to take middlemanType into account here. // Only the set of inputs matters, and the dependency checker is // responsible for considering those. - return ""; } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java b/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java index 3f704d201a..52b3ee2ada 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java @@ -64,8 +64,9 @@ public class PseudoAction<InfoType extends MessageLite> extends AbstractAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - return new Fingerprint().addUUID(uuid).addBytes(getInfo().toByteArray()).hexDigestAndReset(); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addUUID(uuid); + fp.addBytes(getInfo().toByteArray()); } protected InfoType getInfo() { diff --git a/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java b/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java index b7a420a03e..2fc824a10f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java @@ -193,29 +193,27 @@ public final class SourceManifestAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addBoolean(runfiles.getLegacyExternalRunfiles()); - f.addPath(runfiles.getSuffix()); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addBoolean(runfiles.getLegacyExternalRunfiles()); + fp.addPath(runfiles.getSuffix()); Map<PathFragment, Artifact> symlinks = runfiles.getSymlinksAsMap(null); - f.addInt(symlinks.size()); + fp.addInt(symlinks.size()); for (Map.Entry<PathFragment, Artifact> symlink : symlinks.entrySet()) { - f.addPath(symlink.getKey()); - f.addPath(symlink.getValue().getPath()); + fp.addPath(symlink.getKey()); + fp.addPath(symlink.getValue().getPath()); } Map<PathFragment, Artifact> rootSymlinks = runfiles.getRootSymlinksAsMap(null); - f.addInt(rootSymlinks.size()); + fp.addInt(rootSymlinks.size()); for (Map.Entry<PathFragment, Artifact> rootSymlink : rootSymlinks.entrySet()) { - f.addPath(rootSymlink.getKey()); - f.addPath(rootSymlink.getValue().getPath()); + fp.addPath(rootSymlink.getKey()); + fp.addPath(rootSymlink.getValue().getPath()); } for (Artifact artifact : runfiles.getArtifacts()) { - f.addPath(artifact.getRootRelativePath()); - f.addPath(artifact.getPath()); + fp.addPath(artifact.getRootRelativePath()); + fp.addPath(artifact.getPath()); } - return f.hexDigestAndReset(); } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/BinaryFileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/BinaryFileWriteAction.java index 0df7abe34a..951b4c127e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/BinaryFileWriteAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/BinaryFileWriteAction.java @@ -71,21 +71,18 @@ public final class BinaryFileWriteAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addString(String.valueOf(makeExecutable)); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addString(String.valueOf(makeExecutable)); try (InputStream in = source.openStream()) { byte[] buffer = new byte[512]; int amountRead; while ((amountRead = in.read(buffer)) != -1) { - f.addBytes(buffer, 0, amountRead); + fp.addBytes(buffer, 0, amountRead); } } catch (IOException e) { throw new RuntimeException(e); } - - return f.hexDigestAndReset(); } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/FileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/FileWriteAction.java index 6ba8be6741..5a75dffc0e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/FileWriteAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/FileWriteAction.java @@ -244,12 +244,10 @@ public final class FileWriteAction extends AbstractFileWriteAction { /** Computes the Action key for this action by computing the fingerprint for the file contents. */ @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addString(String.valueOf(makeExecutable)); - f.addString(getFileContents()); - return f.hexDigestAndReset(); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addString(String.valueOf(makeExecutable)); + fp.addString(getFileContents()); } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/LauncherFileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/LauncherFileWriteAction.java index d674852f4e..5ad73764c1 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/LauncherFileWriteAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/LauncherFileWriteAction.java @@ -87,16 +87,14 @@ public final class LauncherFileWriteAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); try { - f.addBytes(this.launcher.getPath().getDigest()); + fp.addBytes(this.launcher.getPath().getDigest()); } catch (IOException e) { throw new RuntimeException(e); } - f.addString(this.launchInfo.fingerPrint); - return f.hexDigestAndReset(); + fp.addString(this.launchInfo.fingerPrint); } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWritePathsFileAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWritePathsFileAction.java index be17d7dd2d..f351fb53ea 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWritePathsFileAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWritePathsFileAction.java @@ -22,7 +22,6 @@ import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.actions.CommandLineExpansionException; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.util.Fingerprint; @@ -65,17 +64,12 @@ public final class LazyWritePathsFileAction extends AbstractFileWriteAction { }; } - /** - * Computes the Action key for this action by computing the fingerprint for the file contents. - */ + /** Computes the Action key for this action by computing the fingerprint for the file contents. */ @Override - protected String computeKey(ActionKeyContext actionKeyContext) - throws CommandLineExpansionException { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addBoolean(includeDerivedArtifacts); - f.addString(getContents()); - return f.hexDigestAndReset(); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addBoolean(includeDerivedArtifacts); + fp.addString(getContents()); } private String getContents() { diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java index 03b2084064..7af135b67c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java @@ -178,14 +178,12 @@ public final class ParameterFileWriteAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) throws CommandLineExpansionException { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addString(String.valueOf(makeExecutable)); - f.addString(type.toString()); - f.addString(charset.toString()); - commandLine.addToFingerprint(actionKeyContext, f); - return f.hexDigestAndReset(); + fp.addString(GUID); + fp.addString(String.valueOf(makeExecutable)); + fp.addString(type.toString()); + fp.addString(charset.toString()); + commandLine.addToFingerprint(actionKeyContext, fp); } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java index fb9dc28823..131830a41e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java @@ -211,18 +211,16 @@ public final class PopulateTreeArtifactAction extends AbstractAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addString(getMnemonic()); - f.addStrings(spawnCommandLine()); - f.addPaths(zipper.getRunfilesSupplier().getRunfilesDirs()); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addString(getMnemonic()); + fp.addStrings(spawnCommandLine()); + fp.addPaths(zipper.getRunfilesSupplier().getRunfilesDirs()); List<Artifact> runfilesManifests = zipper.getRunfilesSupplier().getManifests(); - f.addInt(runfilesManifests.size()); + fp.addInt(runfilesManifests.size()); for (Artifact manifest : runfilesManifests) { - f.addPath(manifest.getExecPath()); + fp.addPath(manifest.getExecPath()); } - return f.hexDigestAndReset(); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java index e991541ecc..3a5b225cdf 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java @@ -328,25 +328,23 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie } @Override - protected String computeKey(ActionKeyContext actionKeyContext) + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) throws CommandLineExpansionException { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - argv.addToFingerprint(actionKeyContext, f); - f.addString(getMnemonic()); + fp.addString(GUID); + argv.addToFingerprint(actionKeyContext, fp); + fp.addString(getMnemonic()); // We don't need the toolManifests here, because they are a subset of the inputManifests by // definition and the output of an action shouldn't change whether something is considered a // tool or not. - f.addPaths(getRunfilesSupplier().getRunfilesDirs()); + fp.addPaths(getRunfilesSupplier().getRunfilesDirs()); ImmutableList<Artifact> runfilesManifests = getRunfilesSupplier().getManifests(); - f.addInt(runfilesManifests.size()); + fp.addInt(runfilesManifests.size()); for (Artifact runfilesManifest : runfilesManifests) { - f.addPath(runfilesManifest.getExecPath()); + fp.addPath(runfilesManifest.getExecPath()); } - f.addStringMap(getEnvironment()); - f.addStrings(getClientEnvironmentVariables()); - f.addStringMap(getExecutionInfo()); - return f.hexDigestAndReset(); + fp.addStringMap(getEnvironment()); + fp.addStrings(getClientEnvironmentVariables()); + fp.addStringMap(getExecutionInfo()); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java index 5a74e0b8b3..d0aba38bdc 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java @@ -128,15 +128,13 @@ public class SymlinkAction extends AbstractAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); // We don't normally need to add inputs to the key. In this case, however, the inputPath can be // different from the actual input artifact. if (inputPath != null) { - f.addPath(inputPath); + fp.addPath(inputPath); } - return f.hexDigestAndReset(); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkTreeAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkTreeAction.java index 3b2750df5a..60d75e1ede 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkTreeAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkTreeAction.java @@ -91,11 +91,9 @@ public final class SymlinkTreeAction extends AbstractAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addInt(filesetTree ? 1 : 0); - return f.hexDigestAndReset(); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addInt(filesetTree ? 1 : 0); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java index 644129157a..c5af5d1042 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java @@ -439,17 +439,15 @@ public final class TemplateExpansionAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addString(String.valueOf(makeExecutable)); - f.addString(template.getKey()); - f.addInt(substitutions.size()); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addString(String.valueOf(makeExecutable)); + fp.addString(template.getKey()); + fp.addInt(substitutions.size()); for (Substitution entry : substitutions) { - f.addString(entry.getKey()); - f.addString(entry.getValue()); + fp.addString(entry.getKey()); + fp.addString(entry.getValue()); } - return f.hexDigestAndReset(); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java index 5267e7dafd..d2f080ee2a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java @@ -59,12 +59,10 @@ public final class ExtraActionInfoFileWriteAction extends AbstractFileWriteActio } @Override - protected String computeKey(ActionKeyContext actionKeyContext) + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) throws CommandLineExpansionException { - Fingerprint f = new Fingerprint(); - f.addString(UUID); - f.addString(shadowedAction.getKey(actionKeyContext)); - f.addBytes(shadowedAction.getExtraActionInfo(actionKeyContext).build().toByteArray()); - return f.hexDigestAndReset(); + fp.addString(UUID); + fp.addString(shadowedAction.getKey(actionKeyContext)); + fp.addBytes(shadowedAction.getExtraActionInfo(actionKeyContext).build().toByteArray()); } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java index 172d5b2fdc..b400440ca0 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java @@ -59,10 +59,8 @@ public final class BaselineCoverageAction extends AbstractFileWriteAction } @Override - public String computeKey(ActionKeyContext actionKeyContext) { - return new Fingerprint() - .addStrings(getInstrumentedFilePathStrings()) - .hexDigestAndReset(); + public void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addStrings(getInstrumentedFilePathStrings()); } private Iterable<String> getInstrumentedFilePathStrings() { diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFileManifestAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFileManifestAction.java index 628be6cf4a..cfcc9bfc11 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFileManifestAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFileManifestAction.java @@ -78,12 +78,10 @@ final class InstrumentedFileManifestAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); // Not sorting here is probably cheaper, though it might lead to unnecessary re-execution. - f.addStrings(Iterables.transform(files, TO_EXEC_PATH)); - return f.hexDigestAndReset(); + fp.addStrings(Iterables.transform(files, TO_EXEC_PATH)); } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java index 0166545c99..22638c7ce9 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java @@ -232,30 +232,29 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa } @Override - protected String computeKey(ActionKeyContext actionKeyContext) + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) throws CommandLineExpansionException { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addStrings(executionSettings.getArgs().arguments()); - f.addString(executionSettings.getTestFilter() == null ? "" : executionSettings.getTestFilter()); + fp.addString(GUID); + fp.addStrings(executionSettings.getArgs().arguments()); + fp.addString( + executionSettings.getTestFilter() == null ? "" : executionSettings.getTestFilter()); RunUnder runUnder = executionSettings.getRunUnder(); - f.addString(runUnder == null ? "" : runUnder.getValue()); - f.addStringMap(extraTestEnv); + fp.addString(runUnder == null ? "" : runUnder.getValue()); + fp.addStringMap(extraTestEnv); // TODO(ulfjack): It might be better for performance to hash the action and test envs in config, // and only add a hash here. - configuration.getActionEnvironment().addTo(f); - configuration.getTestActionEnvironment().addTo(f); + configuration.getActionEnvironment().addTo(fp); + configuration.getTestActionEnvironment().addTo(fp); // The 'requiredClientEnvVariables' are handled by Skyframe and don't need to be added here. - f.addString(testProperties.getSize().toString()); - f.addString(testProperties.getTimeout().toString()); - f.addStrings(testProperties.getTags()); - f.addInt(testProperties.isLocal() ? 1 : 0); - f.addInt(shardNum); - f.addInt(executionSettings.getTotalShards()); - f.addInt(runNumber); - f.addInt(testConfiguration.getRunsPerTestForLabel(getOwner().getLabel())); - f.addInt(configuration.isCodeCoverageEnabled() ? 1 : 0); - return f.hexDigestAndReset(); + fp.addString(testProperties.getSize().toString()); + fp.addString(testProperties.getTimeout().toString()); + fp.addStrings(testProperties.getTags()); + fp.addInt(testProperties.isLocal() ? 1 : 0); + fp.addInt(shardNum); + fp.addInt(executionSettings.getTotalShards()); + fp.addInt(runNumber); + fp.addInt(testConfiguration.getRunsPerTestForLabel(getOwner().getLabel())); + fp.addInt(configuration.isCodeCoverageEnabled() ? 1 : 0); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java index 1fd392d7c8..9a74ccc95f 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java @@ -51,6 +51,7 @@ import com.google.devtools.build.lib.shell.BadExitStatusException; import com.google.devtools.build.lib.shell.CommandException; import com.google.devtools.build.lib.shell.CommandResult; import com.google.devtools.build.lib.util.CommandBuilder; +import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.util.NetUtil; import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -268,9 +269,7 @@ public class BazelWorkspaceStatusModule extends BlazeModule { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - return ""; - } + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) {} @Override public boolean executeUnconditionally() { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java index 573d9046f7..83a6d73b66 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java @@ -114,19 +114,18 @@ public final class AndroidDeployInfoAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint().addString(GUID); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); try (InputStream in = getByteString().newInput()) { byte[] buffer = new byte[512]; int amountRead; while ((amountRead = in.read(buffer)) != -1) { - f.addBytes(buffer, 0, amountRead); + fp.addBytes(buffer, 0, amountRead); } } catch (IOException e) { throw new RuntimeException(e); } - return f.hexDigestAndReset(); } private static AndroidDeployInfoOuterClass.Artifact makeArtifactProto(Artifact artifact) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/WriteAdbArgsAction.java b/src/main/java/com/google/devtools/build/lib/rules/android/WriteAdbArgsAction.java index 02d46b59a3..d9d108925a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/WriteAdbArgsAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/WriteAdbArgsAction.java @@ -186,8 +186,8 @@ public final class WriteAdbArgsAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - return new Fingerprint().addString(GUID).hexDigestAndReset(); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); } /** Specifies how the app should be started/stopped. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java index 406bb8e8d1..236439e93c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java @@ -1116,11 +1116,10 @@ public class CppCompileAction extends AbstractAction } @Override - public String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addUUID(actionClassId); - f.addStringMap(getEnvironment()); - f.addStringMap(executionInfo); + public void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addUUID(actionClassId); + fp.addStringMap(getEnvironment()); + fp.addStringMap(executionInfo); // For the argv part of the cache key, ignore all compiler flags that explicitly denote module // file (.pcm) inputs. Depending on input discovery, some of the unused ones are removed from @@ -1129,7 +1128,7 @@ public class CppCompileAction extends AbstractAction // itself is fully determined by the input source files and module maps. // A better long-term solution would be to make the compiler to find them automatically and // never hand in the .pcm files explicitly on the command line in the first place. - f.addStrings(compileCommandLine.getArguments(/* overwrittenVariables= */ null)); + fp.addStrings(compileCommandLine.getArguments(/* overwrittenVariables= */ null)); /* * getArguments() above captures all changes which affect the compilation @@ -1138,14 +1137,13 @@ public class CppCompileAction extends AbstractAction * that affect whether validateIncludes() will report an error or warning * have changed, otherwise we might miss some errors. */ - f.addPaths(ccCompilationInfo.getDeclaredIncludeDirs()); - f.addPaths(ccCompilationInfo.getDeclaredIncludeWarnDirs()); - actionKeyContext.addNestedSetToFingerprint(f, ccCompilationInfo.getDeclaredIncludeSrcs()); - f.addInt(0); // mark the boundary between input types - actionKeyContext.addNestedSetToFingerprint(f, getMandatoryInputs()); - f.addInt(0); - actionKeyContext.addNestedSetToFingerprint(f, prunableInputs); - return f.hexDigestAndReset(); + fp.addPaths(ccCompilationInfo.getDeclaredIncludeDirs()); + fp.addPaths(ccCompilationInfo.getDeclaredIncludeWarnDirs()); + actionKeyContext.addNestedSetToFingerprint(fp, ccCompilationInfo.getDeclaredIncludeSrcs()); + fp.addInt(0); // mark the boundary between input types + actionKeyContext.addNestedSetToFingerprint(fp, getMandatoryInputs()); + fp.addInt(0); + actionKeyContext.addNestedSetToFingerprint(fp, prunableInputs); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java index 69ec47e29f..a0e6c84d0f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java @@ -438,12 +438,11 @@ public final class CppLinkAction extends AbstractAction } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(fake ? FAKE_LINK_GUID : LINK_GUID); - f.addString(ldExecutable.getPathString()); - f.addStrings(linkCommandLine.arguments()); - f.addStrings(getExecutionInfo().keySet()); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(fake ? FAKE_LINK_GUID : LINK_GUID); + fp.addString(ldExecutable.getPathString()); + fp.addStrings(linkCommandLine.arguments()); + fp.addStrings(getExecutionInfo().keySet()); // TODO(bazel-team): For correctness, we need to ensure the invariant that all values accessed // during the execution phase are also covered by the key. Above, we add the argv to the key, @@ -452,13 +451,12 @@ public final class CppLinkAction extends AbstractAction // key. We either need to change the code to cover them in the key computation, or change the // LinkConfiguration to disallow the combinations where the value of a setting does not affect // the argv. - f.addBoolean(linkCommandLine.isNativeDeps()); - f.addBoolean(linkCommandLine.useTestOnlyFlags()); + fp.addBoolean(linkCommandLine.isNativeDeps()); + fp.addBoolean(linkCommandLine.useTestOnlyFlags()); if (linkCommandLine.getRuntimeSolibDir() != null) { - f.addPath(linkCommandLine.getRuntimeSolibDir()); + fp.addPath(linkCommandLine.getRuntimeSolibDir()); } - f.addBoolean(isLtoIndexing); - return f.hexDigestAndReset(); + fp.addBoolean(isLtoIndexing); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java index d9d334c1ba..602089b691 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java @@ -228,36 +228,34 @@ public final class CppModuleMapAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addInt(privateHeaders.size()); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addInt(privateHeaders.size()); for (Artifact artifact : privateHeaders) { - f.addPath(artifact.getExecPath()); + fp.addPath(artifact.getExecPath()); } - f.addInt(publicHeaders.size()); + fp.addInt(publicHeaders.size()); for (Artifact artifact : publicHeaders) { - f.addPath(artifact.getExecPath()); + fp.addPath(artifact.getExecPath()); } - f.addInt(dependencies.size()); + fp.addInt(dependencies.size()); for (CppModuleMap dep : dependencies) { - f.addPath(dep.getArtifact().getExecPath()); + fp.addPath(dep.getArtifact().getExecPath()); } - f.addInt(additionalExportedHeaders.size()); + fp.addInt(additionalExportedHeaders.size()); for (PathFragment path : additionalExportedHeaders) { - f.addPath(path); + fp.addPath(path); } - f.addPath(cppModuleMap.getArtifact().getExecPath()); + fp.addPath(cppModuleMap.getArtifact().getExecPath()); Optional<Artifact> umbrellaHeader = cppModuleMap.getUmbrellaHeader(); if (umbrellaHeader.isPresent()) { - f.addPath(umbrellaHeader.get().getExecPath()); + fp.addPath(umbrellaHeader.get().getExecPath()); } - f.addString(cppModuleMap.getName()); - f.addBoolean(moduleMapHomeIsCwd); - f.addBoolean(compiledModule); - f.addBoolean(generateSubmodules); - f.addBoolean(externDependencies); - return f.hexDigestAndReset(); + fp.addString(cppModuleMap.getName()); + fp.addBoolean(moduleMapHomeIsCwd); + fp.addBoolean(compiledModule); + fp.addBoolean(generateSubmodules); + fp.addBoolean(externDependencies); } @VisibleForTesting diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java index ce7824cdc8..bcad6786a7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java @@ -84,13 +84,11 @@ public final class CreateIncSymlinkAction extends AbstractAction { } @Override - public String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint key = new Fingerprint(); + public void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { for (Map.Entry<Artifact, Artifact> entry : symlinks.entrySet()) { - key.addPath(entry.getKey().getPath()); - key.addPath(entry.getValue().getPath()); + fp.addPath(entry.getKey().getPath()); + fp.addPath(entry.getValue().getPath()); } - return key.hexDigestAndReset(); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtractInclusionAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtractInclusionAction.java index 93e6b19e52..211ae9ca4d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtractInclusionAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtractInclusionAction.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ExecException; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.util.Fingerprint; import java.io.IOException; /** @@ -51,8 +52,8 @@ final class ExtractInclusionAction extends AbstractAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - return GUID; + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java index 3997c5130e..f8fd4220a7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java @@ -21,6 +21,7 @@ import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.ActionResult; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.Path; @@ -56,8 +57,8 @@ public final class FdoStubAction extends AbstractAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - return "fdoStubAction"; + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString("fdoStubAction"); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendAction.java index 366d1cb9b6..2e992fefac 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendAction.java @@ -166,32 +166,30 @@ public final class LtoBackendAction extends SpawnAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); try { - f.addStrings(getArguments()); + fp.addStrings(getArguments()); } catch (CommandLineExpansionException e) { throw new AssertionError("LtoBackendAction command line expansion cannot fail"); } - f.addString(getMnemonic()); - f.addPaths(getRunfilesSupplier().getRunfilesDirs()); + fp.addString(getMnemonic()); + fp.addPaths(getRunfilesSupplier().getRunfilesDirs()); ImmutableList<Artifact> runfilesManifests = getRunfilesSupplier().getManifests(); for (Artifact runfilesManifest : runfilesManifests) { - f.addPath(runfilesManifest.getExecPath()); + fp.addPath(runfilesManifest.getExecPath()); } for (Artifact input : getMandatoryInputs()) { - f.addPath(input.getExecPath()); + fp.addPath(input.getExecPath()); } if (imports != null) { for (PathFragment bitcodePath : bitcodeFiles.keySet()) { - f.addPath(bitcodePath); + fp.addPath(bitcodePath); } - f.addPath(imports.getExecPath()); + fp.addPath(imports.getExecPath()); } - f.addStringMap(getEnvironment()); - f.addStringMap(getExecutionInfo()); - return f.hexDigestAndReset(); + fp.addStringMap(getEnvironment()); + fp.addStringMap(getExecutionInfo()); } /** Builder class to construct {@link LtoBackendAction} instances. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java index cfbe99a26e..c0c5e3a657 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java @@ -73,11 +73,9 @@ public final class SolibSymlinkAction extends AbstractAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addPath(symlink.getPath()); - f.addPath(target); - return f.hexDigestAndReset(); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addPath(symlink.getPath()); + fp.addPath(target); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java index a77e6443f7..08a35dd5da 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java @@ -110,18 +110,16 @@ public final class UmbrellaHeaderAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addPath(umbrellaHeader.getExecPath()); - f.addInt(publicHeaders.size()); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addPath(umbrellaHeader.getExecPath()); + fp.addInt(publicHeaders.size()); for (Artifact artifact : publicHeaders) { - f.addPath(artifact.getExecPath()); + fp.addPath(artifact.getExecPath()); } - f.addInt(additionalExportedHeaders.size()); + fp.addInt(additionalExportedHeaders.size()); for (PathFragment path : additionalExportedHeaders) { - f.addPath(path); + fp.addPath(path); } - return f.hexDigestAndReset(); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/WriteBuildInfoHeaderAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/WriteBuildInfoHeaderAction.java index e75153a1b5..93e40f95e1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/WriteBuildInfoHeaderAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/WriteBuildInfoHeaderAction.java @@ -138,12 +138,10 @@ public final class WriteBuildInfoHeaderAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addBoolean(writeStableInfo); - f.addBoolean(writeVolatileInfo); - return f.hexDigestAndReset(); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addBoolean(writeStableInfo); + fp.addBoolean(writeVolatileInfo); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java index d4a2c87d23..529cb4d668 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java +++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java @@ -33,7 +33,6 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction; -import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction.DeterministicWriter; import com.google.devtools.build.lib.analysis.actions.ByteStringDeterministicWriter; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; @@ -49,7 +48,6 @@ import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.NoSuchPackageException; import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.Package; -import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.pkgcache.FilteringPolicies; import com.google.devtools.build.lib.pkgcache.FilteringPolicy; @@ -381,10 +379,8 @@ public class GenQuery implements RuleConfiguredTargetFactory { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addBytes(result.toByteArray()); - return f.hexDigestAndReset(); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addBytes(result.toByteArray()); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java index 719caf20be..7fc16ddfe9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java @@ -127,15 +127,14 @@ public class JavaHeaderCompileAction extends SpawnAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint().addString(GUID); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); try { - f.addString(super.computeKey(actionKeyContext)); - f.addStrings(directCommandLine.arguments()); + super.computeKey(actionKeyContext, fp); + fp.addStrings(directCommandLine.arguments()); } catch (CommandLineExpansionException e) { throw new AssertionError("JavaHeaderCompileAction command line expansion cannot fail"); } - return f.hexDigestAndReset(); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java index 96b68017d5..f23d4e8832 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java @@ -198,13 +198,11 @@ public class WriteBuildInfoPropertiesAction extends AbstractFileWriteAction { } @Override - protected String computeKey(ActionKeyContext actionKeyContext) { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addString(keyTranslations.computeKey()); - f.addBoolean(includeVolatile); - f.addBoolean(includeNonVolatile); - return f.hexDigestAndReset(); + protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) { + fp.addString(GUID); + fp.addString(keyTranslations.computeKey()); + fp.addBoolean(includeVolatile); + fp.addBoolean(includeNonVolatile); } @Override |