Reviewers: rice+legacy, Description: Sometimes external collections can change unexpectedly; this change makes us call foreign collections fewer times to protect us from the possibility of inconsistency.
Please review this at http://gwt-code-reviews.appspot.com/118810 Affected files: user/super/com/google/gwt/emul/java/util/AbstractList.java user/super/com/google/gwt/emul/java/util/ArrayList.java Index: user/super/com/google/gwt/emul/java/util/AbstractList.java --- user/super/com/google/gwt/emul/java/util/AbstractList.java (revision 6340) +++ user/super/com/google/gwt/emul/java/util/AbstractList.java (working copy) @@ -206,10 +206,12 @@ public abstract class AbstractList<E> extends AbstractCollection<E> implements public boolean addAll(int index, Collection<? extends E> c) { Iterator<? extends E> iter = c.iterator(); + boolean changed = false; while (iter.hasNext()) { add(index++, iter.next()); + changed = true; } - return !c.isEmpty(); + return changed; } @Override Index: user/super/com/google/gwt/emul/java/util/ArrayList.java --- user/super/com/google/gwt/emul/java/util/ArrayList.java (revision 6609) +++ user/super/com/google/gwt/emul/java/util/ArrayList.java (working copy) @@ -81,7 +81,7 @@ public class ArrayList<E> extends AbstractList<E> implements List<E>, public ArrayList(Collection<? extends E> c) { // Avoid calling overridable methods from constructors spliceArray(array, 0, 0, c.toArray()); - size = c.size(); + size = array.length; } public ArrayList(int initialCapacity) { @@ -107,23 +107,19 @@ public class ArrayList<E> extends AbstractList<E> implements List<E>, @Override public boolean addAll(Collection<? extends E> c) { - if (c.isEmpty()) { - return false; - } - spliceArray(array, size, 0, c.toArray()); - size += c.size(); + Object[] cArray = c.toArray(); + spliceArray(array, size, 0, cArray); + size += cArray.length; return true; } public boolean addAll(int index, Collection<? extends E> c) { - if (c.isEmpty()) { - return false; - } if (index < 0 || index > size) { indexOutOfBounds(index, size); } - spliceArray(array, index, 0, c.toArray()); - size += c.size(); + Object[] cArray = c.toArray(); + spliceArray(array, index, 0, cArray); + size += cArray.length; return true; } -- http://groups.google.com/group/Google-Web-Toolkit-Contributors