OpenJDK / lambda / lambda / jdk
changeset 8402:643cd3b39b02
remove after forEachRemaining should remove last element
author | akhil |
---|---|
date | Thu, 25 Apr 2013 21:38:34 -0700 |
parents | 9c709039c43d |
children | 507c7f5e073d |
files | src/share/classes/java/util/ArrayList.java src/share/classes/java/util/LinkedList.java src/share/classes/java/util/Vector.java test/java/util/Iterator/IteratorDefaults.java |
diffstat | 4 files changed, 10 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/util/ArrayList.java Thu Apr 25 18:54:57 2013 -0700 +++ b/src/share/classes/java/util/ArrayList.java Thu Apr 25 21:38:34 2013 -0700 @@ -874,7 +874,8 @@ consumer.accept((E) elementData[i++]); } // update once at end of iteration to reduce heap write traffic - lastRet = cursor = i; + cursor = i; + lastRet = i - 1; checkForComodification(); }
--- a/src/share/classes/java/util/LinkedList.java Thu Apr 25 18:54:57 2013 -0700 +++ b/src/share/classes/java/util/LinkedList.java Thu Apr 25 21:38:34 2013 -0700 @@ -954,10 +954,10 @@ Objects.requireNonNull(action); while (modCount == expectedModCount && nextIndex < size) { action.accept(next.item); + lastReturned = next; next = next.next; nextIndex++; } - lastReturned = next; checkForComodification(); }
--- a/src/share/classes/java/util/Vector.java Thu Apr 25 18:54:57 2013 -0700 +++ b/src/share/classes/java/util/Vector.java Thu Apr 25 21:38:34 2013 -0700 @@ -1172,7 +1172,8 @@ action.accept((E) elementData[i++]); } // update once at end of iteration to reduce heap write traffic - lastRet = cursor = i; + cursor = i; + lastRet = i - 1; checkForComodification(); } }
--- a/test/java/util/Iterator/IteratorDefaults.java Thu Apr 25 18:54:57 2013 -0700 +++ b/test/java/util/Iterator/IteratorDefaults.java Thu Apr 25 21:38:34 2013 -0700 @@ -240,6 +240,11 @@ assertEquals(iterator.nextIndex(), data.length); assertEquals(iterator.previousIndex(), data.length - 1); + // CopyOnWriteArrayList.listIterator().remove() is unsupported + if (!"java.util.concurrent.CopyOnWriteArrayList".equals(listClass)) { + iterator.remove(); // should delete the last element, not throw + } + try { iterator.next(); fail(listClass + " iterator advanced beyond end");