You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2007/10/25 09:54:10 UTC

svn commit: r588158 - in /harmony/enhanced/classlib/trunk/modules/luni/src: main/java/java/util/ArrayList.java test/api/common/tests/api/java/util/ArrayListTest.java

Author: tellison
Date: Thu Oct 25 00:54:09 2007
New Revision: 588158

URL: http://svn.apache.org/viewvc?rev=588158&view=rev
Log:
Growing an ArrayList should not call size() method
to be compatible with RI behavior.

Modified:
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java
    harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/tests/api/java/util/ArrayListTest.java

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java?rev=588158&r1=588157&r2=588158&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java Thu Oct 25 00:54:09 2007
@@ -334,7 +334,7 @@
 	}
 
 	private void growAtEnd(int required) {
-		int size = size();
+		int size = lastIndex - firstIndex;
 		if (firstIndex >= required - (array.length - lastIndex)) {
 			int newLast = lastIndex - firstIndex;
 			if (size > 0) {
@@ -363,7 +363,7 @@
 	}
 
 	private void growAtFront(int required) {
-		int size = size();
+		int size = lastIndex - firstIndex;
 		if (array.length - lastIndex + firstIndex >= required) {
 			int newFirst = array.length - size;
 			if (size > 0) {
@@ -394,7 +394,8 @@
 	}
 
 	private void growForInsert(int location, int required) {
-		int size = size(), increment = size / 2;
+		int size = lastIndex - firstIndex;
+		int increment = size / 2;
 		if (required > increment) {
             increment = required;
         }

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/tests/api/java/util/ArrayListTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/tests/api/java/util/ArrayListTest.java?rev=588158&r1=588157&r2=588158&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/tests/api/java/util/ArrayListTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/tests/api/java/util/ArrayListTest.java Thu Oct 25 00:54:09 2007
@@ -19,11 +19,11 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.ConcurrentModificationException;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
-import java.util.ConcurrentModificationException;
 import java.util.Vector;
 
 import tests.support.Support_ListTest;
@@ -544,8 +544,35 @@
         list.addAll(0, collection);
         assertEquals(14, list.size());
     }
-    
-    
+
+    public static class ArrayListExtend extends ArrayList {
+
+        private int size = 0;
+
+        public ArrayListExtend() {
+            super(10);
+        }
+
+        public boolean add(Object o) {
+            size++;
+            return super.add(o);
+        }
+
+        public int size() {
+            return size;
+        }
+    }
+
+    public void test_subclassing() {
+        ArrayListExtend a = new ArrayListExtend();
+        /*
+         * Regression test for subclasses that override size() (which used to
+         * cause an exception when growing 'a').
+         */
+        for (int i = 0; i < 100; i++) {
+            a.add(new Object());
+        }
+    }
     
 	/**
 	 * Sets up the fixture, for example, open a network connection. This method