aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/util/GroupedList.java
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2015-02-24 01:28:11 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-02-24 01:28:11 +0000
commitbd05aa6072afe1c5b72f1f7227929ccb10838deb (patch)
treea767c6262d51e8db22fd9f214de91ae974a29183 /src/main/java/com/google/devtools/build/lib/util/GroupedList.java
parent8da263cb6275f3822551b4a26544a4b8692199c8 (diff)
Description redacted.
-- MOS_MIGRATED_REVID=87009938
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/util/GroupedList.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/util/GroupedList.java29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/util/GroupedList.java b/src/main/java/com/google/devtools/build/lib/util/GroupedList.java
index 43f6ff2cc6..a6642fe7ba 100644
--- a/src/main/java/com/google/devtools/build/lib/util/GroupedList.java
+++ b/src/main/java/com/google/devtools/build/lib/util/GroupedList.java
@@ -85,12 +85,27 @@ public class GroupedList<T> implements Iterable<Iterable<T>>, Serializable {
return elements.isEmpty();
}
- private static final Object EMPTY_LIST = new Serializable() {};
+ private static final class EmptyList implements Serializable {
+ private static final EmptyList INSTANCE = new EmptyList();
+
+ private EmptyList() {
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return obj instanceof EmptyList;
+ }
+
+ @Override
+ public int hashCode() {
+ return 42;
+ }
+ }
public Object compress() {
switch (size()) {
case 0:
- return EMPTY_LIST;
+ return EmptyList.INSTANCE;
case 1:
return Iterables.getOnlyElement(elements);
default:
@@ -116,7 +131,7 @@ public class GroupedList<T> implements Iterable<Iterable<T>>, Serializable {
}
public static <E> GroupedList<E> create(Object compressed) {
- if (compressed == EMPTY_LIST) {
+ if (compressed.equals(EmptyList.INSTANCE)) {
return new GroupedList<>();
}
if (compressed.getClass().isArray()) {
@@ -158,18 +173,18 @@ public class GroupedList<T> implements Iterable<Iterable<T>>, Serializable {
* iterator is needed here because, to optimize memory, we store single-element lists as elements
* internally, and so they must be wrapped before they're returned.
*/
- private class GroupedIterator implements Iterator<Iterable<T>> {
- private final Iterator<Object> iter = elements.iterator();
+ private class GroupedIterator implements Iterator<Iterable<T>>, Serializable {
+ private int pos = 0;
@Override
public boolean hasNext() {
- return iter.hasNext();
+ return pos < elements.size();
}
@SuppressWarnings("unchecked") // Cast of Object to List<T> or T.
@Override
public Iterable<T> next() {
- Object obj = iter.next();
+ Object obj = elements.get(pos++);
if (obj instanceof List) {
return (List<T>) obj;
}