Replaces the Builder in NestedFileSystemOperationNodes with a factory method.

PiperOrigin-RevId: 716053742
Change-Id: I44a98d4ff4a9c7ae5e9cf4d9715900b284aada42
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
index 457d59d..dfbcb61 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -1559,7 +1559,7 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
-        "//third_party:error_prone_annotations",
+        "//third_party:guava",
         "//third_party:jsr305",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/NestedFileSystemOperationNodes.java b/src/main/java/com/google/devtools/build/lib/skyframe/NestedFileSystemOperationNodes.java
index 1c4de62..e22aedb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/NestedFileSystemOperationNodes.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/NestedFileSystemOperationNodes.java
@@ -13,8 +13,9 @@
 // limitations under the License.
 package com.google.devtools.build.lib.skyframe;
 
-import com.google.errorprone.annotations.CanIgnoreReturnValue;
-import java.util.ArrayList;
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.util.Collection;
 import javax.annotation.Nullable;
 
 /** Represents multiple {@link FileSystemOperationNode}s with nestable composition. */
@@ -33,8 +34,19 @@
    */
   private volatile Object serializationScratch;
 
-  public static FileSystemOperationNodeBuilder builder(FileSystemOperationNode node) {
-    return new FileSystemOperationNodeBuilder(node);
+  /**
+   * Effectively, a factory method for {@link NestedFileSystemOperationNodes}, but formally a
+   * factory method for {@link FileSystemOperationNode}.
+   *
+   * <p>When there is only one node, returns the node directly instead of creating a useless
+   * wrapper.
+   */
+  public static FileSystemOperationNode from(Collection<FileSystemOperationNode> nodes) {
+    checkArgument(!nodes.isEmpty());
+    if (nodes.size() == 1) {
+      return nodes.iterator().next();
+    }
+    return new NestedFileSystemOperationNodes(nodes.toArray(FileSystemOperationNode[]::new));
   }
 
   private NestedFileSystemOperationNodes(FileSystemOperationNode[] nodes) {
@@ -57,32 +69,4 @@
   public void setSerializationScratch(Object value) {
     this.serializationScratch = value;
   }
-
-  /**
-   * Effectively, a builder for {@link NestedFileSystemOperationNodes}, but formally a builder for
-   * {@link FileSystemOperationNode}.
-   *
-   * <p>When there is only one node, this builder returns the node directly instead of creating a
-   * useless wrapper.
-   */
-  public static class FileSystemOperationNodeBuilder {
-    private final ArrayList<FileSystemOperationNode> nodes = new ArrayList<>();
-
-    private FileSystemOperationNodeBuilder(FileSystemOperationNode node) {
-      nodes.add(node);
-    }
-
-    @CanIgnoreReturnValue
-    public FileSystemOperationNodeBuilder add(FileSystemOperationNode node) {
-      nodes.add(node);
-      return this;
-    }
-
-    public FileSystemOperationNode build() {
-      if (nodes.size() > 1) {
-        return new NestedFileSystemOperationNodes(nodes.toArray(FileSystemOperationNode[]::new));
-      }
-      return nodes.get(0);
-    }
-  }
 }