Make Metadata an interface for FileArtifactValue
Replace all previous uses of Metadata with FileArtifactValue (or a simple inner
class in the case of ActionCacheChecker.CONSTANT_METADATA).
Care was taken to make the equals method obey the equals contract, even in the
presence of multiple implementations.
PiperOrigin-RevId: 160115080
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java b/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
index 57abd35..1a6c4c8 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
@@ -50,6 +50,28 @@
* otherwise lightweight, and should be constructed anew and discarded for each build request.
*/
public class ActionCacheChecker {
+ private static final Metadata CONSTANT_METADATA = new Metadata() {
+ @Override
+ public boolean isFile() {
+ return false;
+ }
+
+ @Override
+ public byte[] getDigest() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public long getSize() {
+ return 0;
+ }
+
+ @Override
+ public long getModifiedTime() {
+ return -1;
+ }
+ };
+
private final ActionCache actionCache;
private final Predicate<? super Action> executionFilter;
private final ArtifactResolver artifactResolver;
@@ -294,7 +316,7 @@
private static Metadata getMetadataOrConstant(MetadataHandler metadataHandler, Artifact artifact)
throws IOException {
if (artifact.isConstantMetadata()) {
- return Metadata.CONSTANT_METADATA;
+ return CONSTANT_METADATA;
} else {
return metadataHandler.getMetadata(artifact);
}