Remove DifferentRealPath.
It was added in unknown commit (2014 June) and since then became superfluous: the only place where ArtifactFileMetadata#value() is called with pathFragment and realPathFragment not being the same is the end ActionMetadataHandler#fileMetadataFromArtifact(), but control only ever gets there if a symlink is being processed.
RELNOTES: None.
PiperOrigin-RevId: 259938294
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFileMetadata.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFileMetadata.java
index 73e5ef8..bc42962 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFileMetadata.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFileMetadata.java
@@ -126,21 +126,21 @@
FileStateValue realFileStateValue) {
Preconditions.checkState(pathFragment.isAbsolute(), pathFragment);
Preconditions.checkState(realPathFragment.isAbsolute(), realPathFragment);
- if (pathFragment.equals(realPathFragment)) {
- Preconditions.checkState(
- fileStateValue.getType() != FileStateType.SYMLINK,
- "path: %s, fileStateValue: %s, realPath: %s, realFileStateValue: %s",
- pathFragment,
- fileStateValue,
- realPathFragment,
- realFileStateValue);
- return new Regular(pathFragment, fileStateValue);
+ boolean pathsDiffer = !pathFragment.equals(realPathFragment);
+ boolean isSymlink = fileStateValue.getType() == FileStateType.SYMLINK;
+
+ Preconditions.checkState(
+ pathsDiffer == isSymlink,
+ "path: %s, fileStateValue: %s, realPath: %s, realFileStateValue: %s",
+ pathFragment,
+ fileStateValue,
+ realPathFragment,
+ realFileStateValue);
+
+ if (isSymlink) {
+ return new Symlink(realPathFragment, realFileStateValue, fileStateValue.getSymlinkTarget());
} else {
- if (fileStateValue.getType() == FileStateType.SYMLINK) {
- return new Symlink(realPathFragment, realFileStateValue, fileStateValue.getSymlinkTarget());
- } else {
- return new DifferentRealPath(realPathFragment, realFileStateValue);
- }
+ return new Regular(pathFragment, fileStateValue);
}
}
@@ -197,29 +197,17 @@
}
}
- /**
- * Base class for {@link ArtifactFileMetadata}s for files whose fully resolved path is different
- * than the requested path. For example, this is the case for the path "foo/bar/baz" if at least
- * one of 'foo', 'foo/bar', or 'foo/bar/baz' is a symlink.
- */
- private static class DifferentRealPath extends ArtifactFileMetadata {
- protected final PathFragment realPath;
- protected final FileStateValue realFileStateValue;
+ /** Implementation of {@link ArtifactFileMetadata} for files that are symlinks. */
+ private static final class Symlink extends ArtifactFileMetadata {
+ private final PathFragment linkTarget;
+ private final PathFragment realPath;
+ private final FileStateValue realFileStateValue;
- DifferentRealPath(PathFragment realPath, FileStateValue realFileStateValue) {
- this.realPath = Preconditions.checkNotNull(realPath);
- this.realFileStateValue = Preconditions.checkNotNull(realFileStateValue);
- }
-
- @Override
- public BigInteger getFingerprint() {
- BigInteger original = super.getFingerprint();
- BigIntegerFingerprint fp = new BigIntegerFingerprint();
- fp.addBigIntegerOrdered(original);
- fp.addString(getClass().getCanonicalName());
- fp.addPath(realPath);
- fp.addBigIntegerOrdered(realFileStateValue.getValueFingerprint());
- return fp.getFingerprint();
+ private Symlink(
+ PathFragment realPath, FileStateValue realFileStateValue, PathFragment linkTarget) {
+ this.realPath = realPath;
+ this.realFileStateValue = realFileStateValue;
+ this.linkTarget = linkTarget;
}
@Override
@@ -227,40 +215,6 @@
return realFileStateValue;
}
- @SuppressWarnings("EqualsGetClass") // Only subclass should never be equal to this class.
- @Override
- public boolean equals(Object obj) {
- if (obj == null) {
- return false;
- }
- if (obj.getClass() != DifferentRealPath.class) {
- return false;
- }
- DifferentRealPath other = (DifferentRealPath) obj;
- return realPath.equals(other.realPath) && realFileStateValue.equals(other.realFileStateValue);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(realPath, realFileStateValue);
- }
-
- @Override
- public String toString() {
- return realPath + ", " + realFileStateValue + " (symlink ancestor)";
- }
- }
-
- /** Implementation of {@link ArtifactFileMetadata} for files that are symlinks. */
- private static final class Symlink extends DifferentRealPath {
- private final PathFragment linkTarget;
-
- private Symlink(
- PathFragment realPath, FileStateValue realFileStateValue, PathFragment linkTarget) {
- super(realPath, realFileStateValue);
- this.linkTarget = linkTarget;
- }
-
@Override
public BigInteger getFingerprint() {
BigInteger original = super.getFingerprint();