You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2019/12/05 16:12:49 UTC

[commons-collections] branch master updated: [COLLECTIONS-734] Encountered an IllegalStateException while traversing with Flat3Map.entrySet().

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-collections.git


The following commit(s) were added to refs/heads/master by this push:
     new 45b6865  [COLLECTIONS-734] Encountered an IllegalStateException while traversing with Flat3Map.entrySet().
45b6865 is described below

commit 45b6865b59d344910dd8cf09b54e6ea91347752d
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Dec 5 11:12:44 2019 -0500

    [COLLECTIONS-734] Encountered an IllegalStateException while traversing
    with Flat3Map.entrySet().
    
    Closes #115. This is slightly modified patch from the PR.
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    .
---
 src/changes/changes.xml                            |  3 +++
 .../apache/commons/collections4/map/Flat3Map.java  |  2 +-
 .../commons/collections4/map/Flat3MapTest.java     | 27 ++++++++++++++++++++--
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b84478e..fb6b285 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -87,6 +87,9 @@
     <action dev="ggregory" type="update" due-to="Gary Gregory">
       [test] org.easymock:easymock 4.0.2 -> 4.1.
     </action>
+    <action issue="COLLECTIONS-734" dev="ggregory" type="fix" due-to="Chen">
+      Encountered an IllegalStateException while traversing with Flat3Map.entrySet(). #115.
+    </action>
   </release>
   <release version="4.4" date="2019-07-05" description="Maintenance release.">
     <action issue="COLLECTIONS-710" dev="ggregory" type="fix" due-to="Yu Shi, Gary Gregory">
diff --git a/src/main/java/org/apache/commons/collections4/map/Flat3Map.java b/src/main/java/org/apache/commons/collections4/map/Flat3Map.java
index 2bfa20a..c506c53 100644
--- a/src/main/java/org/apache/commons/collections4/map/Flat3Map.java
+++ b/src/main/java/org/apache/commons/collections4/map/Flat3Map.java
@@ -946,8 +946,8 @@ public class Flat3Map<K, V> implements IterableMap<K, V>, Serializable, Cloneabl
             if (currentEntry == null) {
                 throw new IllegalStateException(AbstractHashedMap.REMOVE_INVALID);
             }
-            currentEntry.setRemoved(true);
             parent.remove(currentEntry.getKey());
+            currentEntry.setRemoved(true);
             nextIndex--;
             currentEntry = null;
         }
diff --git a/src/test/java/org/apache/commons/collections4/map/Flat3MapTest.java b/src/test/java/org/apache/commons/collections4/map/Flat3MapTest.java
index c234349..d4e3b29 100644
--- a/src/test/java/org/apache/commons/collections4/map/Flat3MapTest.java
+++ b/src/test/java/org/apache/commons/collections4/map/Flat3MapTest.java
@@ -24,13 +24,13 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
-import junit.framework.Test;
-
 import org.apache.commons.collections4.BulkTest;
 import org.apache.commons.collections4.IterableMap;
 import org.apache.commons.collections4.MapIterator;
 import org.apache.commons.collections4.iterators.AbstractMapIteratorTest;
 
+import junit.framework.Test;
+
 /**
  * JUnit tests.
  *
@@ -336,6 +336,29 @@ public class Flat3MapTest<K, V> extends AbstractIterableMapTest<K, V> {
         assertEquals("NewValue", map.get(THREE));
     }
 
+    public void testEntrySet() {
+        // Sanity check
+        putAndRemove(new HashMap<>());
+        // Actual test
+        putAndRemove(new Flat3Map<>());
+    }
+
+    private void putAndRemove(final Map<K, V> map) {
+        map.put((K) "A", (V) "one");
+        map.put((K) "B", (V) "two");
+        map.put((K) "C", (V) "three");
+        Iterator<Map.Entry<K, V>> it = map.entrySet().iterator();
+
+        Map.Entry<K, V> mapEntry1 = it.next();
+        Map.Entry<K, V> mapEntry2 = it.next();
+        Map.Entry<K, V> mapEntry3 = it.next();
+        it.remove();
+        assertEquals(2, map.size());
+        assertEquals("one", map.get((K) "A"));
+        assertEquals("two", map.get((K) "B"));
+        assertEquals(null, map.get((K) "C"));
+    }
+
     //-----------------------------------------------------------------------
     @Override
     public BulkTest bulkTestMapIterator() {