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

Reply via email to