Refactoring: get rid of RecursiveFilesystemTraversalValue.ResolvedFileUtils

--
MOS_MIGRATED_REVID=109420721
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
index 33ce1f1..269b554 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
@@ -282,17 +282,19 @@
       if (!(obj instanceof RegularFile)) {
         return false;
       }
-      return ResolvedFileUtils.areObjectsEqual(this, (RegularFile) obj);
+      return this.type.equals(((RegularFile) obj).type)
+          && this.path.equals(((RegularFile) obj).path)
+          && this.metadata.equals(((RegularFile) obj).metadata);
     }
 
     @Override
     public int hashCode() {
-      return ResolvedFileUtils.hashCodeOf(this);
+      return Objects.hashCode(type, path, metadata);
     }
 
     @Override
     public String toString() {
-      return String.format("RegularFile(%s)", ResolvedFileUtils.asString(this));
+      return String.format("RegularFile(path=%s)", path);
     }
 
     @Override
@@ -343,17 +345,18 @@
       if (!(obj instanceof Directory)) {
         return false;
       }
-      return ResolvedFileUtils.areObjectsEqual(this, (Directory) obj);
+      return this.type.equals(((Directory) obj).type)
+          && this.path.equals(((Directory) obj).path);
     }
 
     @Override
     public int hashCode() {
-      return ResolvedFileUtils.hashCodeOf(this);
+      return Objects.hashCode(type, path);
     }
 
     @Override
     public String toString() {
-      return String.format("Directory(%s)", ResolvedFileUtils.asString(this));
+      return String.format("Directory(path=%s)", path);
     }
 
     @Override
@@ -413,18 +416,19 @@
       if (!(obj instanceof DanglingSymlink)) {
         return false;
       }
-      DanglingSymlink o = (DanglingSymlink) obj;
-      return ResolvedFileUtils.areObjectsEqual(this, o) && symlink.equals(o.symlink);
+      return this.type.equals(((DanglingSymlink) obj).type)
+          && this.metadata.equals(((DanglingSymlink) obj).metadata)
+          && this.symlink.equals(((DanglingSymlink) obj).symlink);
     }
 
     @Override
     public int hashCode() {
-      return Objects.hashCode(ResolvedFileUtils.hashCodeOf(this), symlink);
+      return Objects.hashCode(type, metadata, symlink);
     }
 
     @Override
     public String toString() {
-      return String.format("DanglingSymlink(%s, %s)", ResolvedFileUtils.asString(this), symlink);
+      return String.format("DanglingSymlink(%s)", symlink);
     }
 
     @Override
@@ -494,18 +498,20 @@
       if (!(obj instanceof SymlinkToFile)) {
         return false;
       }
-      SymlinkToFile o = (SymlinkToFile) obj;
-      return ResolvedFileUtils.areObjectsEqual(this, o) && symlink.equals(o.symlink);
+      return this.type.equals(((SymlinkToFile) obj).type)
+          && this.path.equals(((SymlinkToFile) obj).path)
+          && this.metadata.equals(((SymlinkToFile) obj).metadata)
+          && this.symlink.equals(((SymlinkToFile) obj).symlink);
     }
 
     @Override
     public int hashCode() {
-      return Objects.hashCode(ResolvedFileUtils.hashCodeOf(this), symlink);
+      return Objects.hashCode(type, path, metadata, symlink);
     }
 
     @Override
     public String toString() {
-      return String.format("SymlinkToFile(%s, %s)", ResolvedFileUtils.asString(this), symlink);
+      return String.format("SymlinkToFile(target=%s, %s)", path, symlink);
     }
 
     @Override
@@ -568,18 +574,20 @@
       if (!(obj instanceof SymlinkToDirectory)) {
         return false;
       }
-      SymlinkToDirectory o = (SymlinkToDirectory) obj;
-      return ResolvedFileUtils.areObjectsEqual(this, o) && symlink.equals(o.symlink);
+      return this.type.equals(((SymlinkToDirectory) obj).type)
+          && this.path.equals(((SymlinkToDirectory) obj).path)
+          && this.metadata.equals(((SymlinkToDirectory) obj).metadata)
+          && this.symlink.equals(((SymlinkToDirectory) obj).symlink);
     }
 
     @Override
     public int hashCode() {
-      return Objects.hashCode(ResolvedFileUtils.hashCodeOf(this), symlink);
+      return Objects.hashCode(type, path, metadata, symlink);
     }
 
     @Override
     public String toString() {
-      return String.format("SymlinkToDirectory(%s, %s)", ResolvedFileUtils.asString(this), symlink);
+      return String.format("SymlinkToDirectory(target=%s, %s)", path, symlink);
     }
 
     @Override
@@ -625,36 +633,6 @@
     }
   }
 
-  private static final class ResolvedFileUtils {
-    private ResolvedFileUtils() {}
-
-    static boolean areObjectsEqual(ResolvedFile a, ResolvedFile b) {
-      if (a == b) {
-        return true;
-      }
-      if ((a == null) != (b == null)) {
-        return false;
-      }
-      return a.getType().equals(b.getType())
-          && a.getPath().equals(b.getPath())
-          && a.getMetadata().equals(b.getMetadata());
-    }
-
-    static int hashCodeOf(ResolvedFile f) {
-      return Objects.hashCode(f.getType(), f.getPath(), f.getMetadata());
-    }
-
-    static String asString(ResolvedFile f) {
-      return String.format(
-          "type=%s, path=%s, metadata=%s",
-          f.getType(),
-          f.getPath(),
-          f.getMetadata().isPresent()
-              ? Integer.toHexString(f.getMetadata().get().hashCode())
-              : "(stripped)");
-    }
-  }
-
   /**
    * Path and type information about a single file or symlink.
    *