OSDN Git Service

* java/util/ArrayList.java (addAll(int,Collection)): System.arraycopy
authormark <mark@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 7 Apr 2002 07:40:49 +0000 (07:40 +0000)
committermark <mark@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 7 Apr 2002 07:40:49 +0000 (07:40 +0000)
        all of the remaining elements.
        * java/util/Vector.java (addAll(int,Collection)): Likewise.
        (removeRange): If toIndex == fromIndex do
        nothing, if toIndex < fromIndex throw IndexOutIfBoundsException.
        (removeAll): Always throw NullPointerException when collection is
        null.
        (retrainAll): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51979 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/util/ArrayList.java
libjava/java/util/Vector.java

index a48ba51..5ef858c 100644 (file)
@@ -1,3 +1,14 @@
+2002-04-06  Mark Wielaard <mark@klomp.org>
+
+       * java/util/ArrayList.java (addAll(int,Collection)): System.arraycopy
+       all of the remaining elements.
+       * java/util/Vector.java (addAll(int,Collection)): Likewise.
+       (removeRange): If toIndex == fromIndex do
+       nothing, if toIndex < fromIndex throw IndexOutIfBoundsException.
+       (removeAll): Always throw NullPointerException when collection is
+       null.
+       (retrainAll): Likewise.
+
 2002-04-05  Mark Wielaard <mark@klomp.org>
 
        * java/util/ArrayList.jva (removeRange): If toIndex == fromIndex do
index 59ce974..99745d0 100644 (file)
@@ -427,8 +427,8 @@ public class ArrayList extends AbstractList
     if (csize + size > data.length)
       ensureCapacity(size + csize);
     int end = index + csize;
-    if (index != size)
-      System.arraycopy(data, index, data, end, csize);
+    if (size > 0 && index != size)
+      System.arraycopy(data, index, data, end, size - index);
     size += csize;
     for ( ; index < end; index++)
       data[index] = itr.next();
index e8d1c96..9cf8639 100644 (file)
@@ -716,6 +716,9 @@ public class Vector extends AbstractList
    */
   public synchronized boolean removeAll(Collection c)
   {
+    if (c == null)
+      throw new NullPointerException();
+
     int i;
     int j;
     for (i = 0; i < elementCount; i++)
@@ -742,6 +745,9 @@ public class Vector extends AbstractList
    */
   public synchronized boolean retainAll(Collection c)
   {
+    if (c == null)
+      throw new NullPointerException();
+
     int i;
     int j;
     for (i = 0; i < elementCount; i++)
@@ -779,7 +785,8 @@ public class Vector extends AbstractList
     ensureCapacity(elementCount + csize);
     int end = index + csize;
     if (elementCount > 0 && index != elementCount)
-      System.arraycopy(elementData, index, elementData, end, csize);
+      System.arraycopy(elementData, index,
+                      elementData, end, elementCount - index);
     elementCount += csize;
     for ( ; index < end; index++)
       elementData[index] = itr.next();
@@ -852,23 +859,28 @@ public class Vector extends AbstractList
 
   /**
    * Removes a range of elements from this list.
+   * Does nothing when toIndex is equal to fromIndex.
    *
    * @param fromIndex the index to start deleting from (inclusive)
    * @param toIndex the index to delete up to (exclusive)
+   * @throws IndexOutOfBoundsException if fromIndex &gt; toIndex
    */
   // This does not need to be synchronized, because it is only called through
   // clear() of a sublist, and clear() had already synchronized.
   protected void removeRange(int fromIndex, int toIndex)
   {
-    if (fromIndex != toIndex)
+    int change = toIndex - fromIndex;
+    if (change > 0)
       {
         modCount++;
         System.arraycopy(elementData, toIndex, elementData, fromIndex,
                          elementCount - toIndex);
         int save = elementCount;
-        elementCount -= toIndex - fromIndex;
+        elementCount -= change;
         Arrays.fill(elementData, elementCount, save, null);
       }
+    else if (change < 0)
+      throw new IndexOutOfBoundsException();
   }
 
   /**