bazel nestedset: don't allocate empty CompactHashSet in addAll

commit 565c199f51cf8b9898342c47c07666c1a8159375 recently changed the depset constructor to use
NestedSetBuilder.addAll, which should be more efficient than a loop
around add, but it was not, resulting in a measurable memory regression:
addAll causes the allocation of a CompactHashSet even when there are no elements.

This change fixes the bug. Thanks to brandjon for spotting the problem.

PiperOrigin-RevId: 283537882
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java
index d8bb68e..e84180f 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java
@@ -100,7 +100,11 @@
       throw new IllegalArgumentException("NestedSet should be added as a transitive member");
     }
     if (items == null) {
-      items = CompactHashSet.createWithExpectedSize(Iterables.size(elements));
+      int n = Iterables.size(elements);
+      if (n == 0) {
+        return this; // avoid allocating an empty set
+      }
+      items = CompactHashSet.createWithExpectedSize(n);
     }
     Iterables.addAll(items, elements);
     return this;