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); - } - } }