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

Cole-Greer pushed a commit to branch collections4-upgrade
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 119d4bcf092ff868df55b97b12cb9d74214220b4
Author: Cole Greer <[email protected]>
AuthorDate: Wed Jul 15 11:25:42 2026 -0700

    Bump commons-collections to commons-collections4 (4.4)
    
    Migrate from the legacy org.apache.commons.collections (3.2.2) to
    org.apache.commons.collections4 (4.4) across gremlin-core, updating
    build coordinates in the root pom, gremlin-core, gremlin-server, and
    the shade additionalDependency blocks.
    
    Code changes:
    - IteratorUtils / CollectionUtils: import package rename only
      (compatible v4 signatures).
    - IteratorUtils primitive-array path repointed to the v4
      ArrayIterator (fully qualified to avoid clashing with TinkerPop's
      own ArrayIterator).
    - ReferenceMap (6 traverser classes + Gryo registration): v4 is
      generic and its constructor takes AbstractReferenceMap.ReferenceStrength
      instead of int constants; entrySet iteration casts to Map.Entry.
    - IndexedTraverserSet: MultiValueMap was removed in v4, replaced with
      MultiValuedMap backed by ArrayListValuedHashMap (getCollection -> get,
      remove(k,v) -> removeMapping(k,v)); null-handling preserved for the
      v4 empty-collection semantics.
    
    Assisted-by: Kiro:claude-opus-4.8
---
 CHANGELOG.asciidoc                                   |  1 +
 gremlin-core/pom.xml                                 |  4 ++--
 .../traverser/B_LP_NL_O_P_S_SE_SL_Traverser.java     | 14 ++++++++------
 .../traverser/B_LP_NL_O_S_SE_SL_Traverser.java       | 14 ++++++++------
 .../traverser/B_NL_O_S_SE_SL_Traverser.java          | 14 ++++++++------
 .../traverser/LP_NL_O_OB_P_S_SE_SL_Traverser.java    | 14 ++++++++------
 .../traverser/LP_NL_O_OB_S_SE_SL_Traverser.java      | 14 ++++++++------
 .../traverser/NL_O_OB_S_SE_SL_Traverser.java         | 14 ++++++++------
 .../traverser/util/IndexedTraverserSet.java          | 18 +++++++++---------
 .../structure/io/binary/types/EdgeSerializer.java    |  2 +-
 .../io/binary/types/VertexPropertySerializer.java    |  2 +-
 .../structure/io/binary/types/VertexSerializer.java  |  2 +-
 .../gremlin/structure/io/graphml/GraphMLWriter.java  |  2 +-
 .../gremlin/structure/io/gryo/GryoVersion.java       |  2 +-
 .../gremlin/util/iterator/IteratorUtils.java         |  2 +-
 gremlin-server/pom.xml                               |  4 ++--
 pom.xml                                              | 20 ++++++++++----------
 .../tinkergraph/structure/TinkerShuffleGraph.java    |  2 +-
 18 files changed, 79 insertions(+), 66 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 5e54133fcc..2f158c6ad8 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -32,6 +32,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Fixed conjoin has incorrect null handling.
 * Expanded `gremlin-python` CI matrix to test against Python 3.9, 3.10, 3.11, 
3.12, and 3.13.
 * Add Node 26 support for `gremlin-javascript` and `gremlint`.
+* Upgraded `commons-collections` to `commons-collections4` (4.4).
 
 [[release-3-7-6]]
 === TinkerPop 3.7.6 (Release Date: April 1, 2026)
diff --git a/gremlin-core/pom.xml b/gremlin-core/pom.xml
index d8f95274a0..1c955a82f4 100644
--- a/gremlin-core/pom.xml
+++ b/gremlin-core/pom.xml
@@ -58,8 +58,8 @@ limitations under the License.
             <artifactId>commons-beanutils</artifactId>
         </dependency>
         <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_NL_O_P_S_SE_SL_Traverser.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_NL_O_P_S_SE_SL_Traverser.java
index d8e24d2b3d..1226eb0d5a 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_NL_O_P_S_SE_SL_Traverser.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_NL_O_P_S_SE_SL_Traverser.java
@@ -18,7 +18,9 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.traverser;
 
-import org.apache.commons.collections.map.ReferenceMap;
+import java.util.Map;
+import 
org.apache.commons.collections4.map.AbstractReferenceMap.ReferenceStrength;
+import org.apache.commons.collections4.map.ReferenceMap;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.LabelledCounter;
 
@@ -37,7 +39,7 @@ public class B_LP_NL_O_P_S_SE_SL_Traverser<T> extends 
B_LP_O_P_S_SE_SL_Traverser
     public B_LP_NL_O_P_S_SE_SL_Traverser(final T t, final Step<T, ?> step, 
final long initialBulk) {
         super(t, step, initialBulk);
         this.nestedLoops = new Stack<>();
-        this.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+        this.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
     }
 
     /////////////////
@@ -87,11 +89,11 @@ public class B_LP_NL_O_P_S_SE_SL_Traverser<T> extends 
B_LP_O_P_S_SE_SL_Traverser
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
@@ -110,11 +112,11 @@ public class B_LP_NL_O_P_S_SE_SL_Traverser<T> extends 
B_LP_O_P_S_SE_SL_Traverser
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_NL_O_S_SE_SL_Traverser.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_NL_O_S_SE_SL_Traverser.java
index 07c2b84598..a41558215c 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_NL_O_S_SE_SL_Traverser.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_NL_O_S_SE_SL_Traverser.java
@@ -18,7 +18,9 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.traverser;
 
-import org.apache.commons.collections.map.ReferenceMap;
+import java.util.Map;
+import 
org.apache.commons.collections4.map.AbstractReferenceMap.ReferenceStrength;
+import org.apache.commons.collections4.map.ReferenceMap;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.LabelledCounter;
 
@@ -37,7 +39,7 @@ public class B_LP_NL_O_S_SE_SL_Traverser<T> extends 
B_LP_O_S_SE_SL_Traverser<T>
     public B_LP_NL_O_S_SE_SL_Traverser(final T t, final Step<T, ?> step, final 
long initialBulk) {
         super(t, step, initialBulk);
         this.nestedLoops = new Stack<>();
-        this.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+        this.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
     }
 
     /////////////////
@@ -91,11 +93,11 @@ public class B_LP_NL_O_S_SE_SL_Traverser<T> extends 
B_LP_O_S_SE_SL_Traverser<T>
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
@@ -114,11 +116,11 @@ public class B_LP_NL_O_S_SE_SL_Traverser<T> extends 
B_LP_O_S_SE_SL_Traverser<T>
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_NL_O_S_SE_SL_Traverser.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_NL_O_S_SE_SL_Traverser.java
index 4268526199..9debfb9da6 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_NL_O_S_SE_SL_Traverser.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_NL_O_S_SE_SL_Traverser.java
@@ -18,7 +18,9 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.traverser;
 
-import org.apache.commons.collections.map.ReferenceMap;
+import java.util.Map;
+import 
org.apache.commons.collections4.map.AbstractReferenceMap.ReferenceStrength;
+import org.apache.commons.collections4.map.ReferenceMap;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.LabelledCounter;
 
@@ -36,7 +38,7 @@ public class B_NL_O_S_SE_SL_Traverser<T> extends 
B_O_S_SE_SL_Traverser<T> {
     public B_NL_O_S_SE_SL_Traverser(final T t, final Step<T, ?> step, final 
long initialBulk) {
         super(t, step, initialBulk);
         this.nestedLoops = new Stack<>();
-        this.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+        this.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
     }
 
     /////////////////
@@ -87,11 +89,11 @@ public class B_NL_O_S_SE_SL_Traverser<T> extends 
B_O_S_SE_SL_Traverser<T> {
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
@@ -111,11 +113,11 @@ public class B_NL_O_S_SE_SL_Traverser<T> extends 
B_O_S_SE_SL_Traverser<T> {
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_NL_O_OB_P_S_SE_SL_Traverser.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_NL_O_OB_P_S_SE_SL_Traverser.java
index aae7689083..39d35f9713 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_NL_O_OB_P_S_SE_SL_Traverser.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_NL_O_OB_P_S_SE_SL_Traverser.java
@@ -19,7 +19,9 @@
 
 package org.apache.tinkerpop.gremlin.process.traversal.traverser;
 
-import org.apache.commons.collections.map.ReferenceMap;
+import java.util.Map;
+import 
org.apache.commons.collections4.map.AbstractReferenceMap.ReferenceStrength;
+import org.apache.commons.collections4.map.ReferenceMap;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.LabelledCounter;
 
@@ -38,7 +40,7 @@ public class LP_NL_O_OB_P_S_SE_SL_Traverser<T> extends 
LP_O_OB_P_S_SE_SL_Travers
     public LP_NL_O_OB_P_S_SE_SL_Traverser(final T t, final Step<T, ?> step) {
         super(t, step);
         this.nestedLoops = new Stack<>();
-        this.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+        this.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
     }
 
     /////////////////
@@ -88,11 +90,11 @@ public class LP_NL_O_OB_P_S_SE_SL_Traverser<T> extends 
LP_O_OB_P_S_SE_SL_Travers
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
@@ -111,11 +113,11 @@ public class LP_NL_O_OB_P_S_SE_SL_Traverser<T> extends 
LP_O_OB_P_S_SE_SL_Travers
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_NL_O_OB_S_SE_SL_Traverser.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_NL_O_OB_S_SE_SL_Traverser.java
index b34493133e..ecd226ca59 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_NL_O_OB_S_SE_SL_Traverser.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_NL_O_OB_S_SE_SL_Traverser.java
@@ -19,7 +19,9 @@
 
 package org.apache.tinkerpop.gremlin.process.traversal.traverser;
 
-import org.apache.commons.collections.map.ReferenceMap;
+import java.util.Map;
+import 
org.apache.commons.collections4.map.AbstractReferenceMap.ReferenceStrength;
+import org.apache.commons.collections4.map.ReferenceMap;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.LabelledCounter;
 
@@ -38,7 +40,7 @@ public class LP_NL_O_OB_S_SE_SL_Traverser<T> extends 
LP_O_OB_S_SE_SL_Traverser<T
     public LP_NL_O_OB_S_SE_SL_Traverser(final T t, final Step<T, ?> step) {
         super(t, step);
         this.nestedLoops = new Stack<>();
-        this.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+        this.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
     }
 
     /////////////////
@@ -93,11 +95,11 @@ public class LP_NL_O_OB_S_SE_SL_Traverser<T> extends 
LP_O_OB_S_SE_SL_Traverser<T
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
@@ -116,11 +118,11 @@ public class LP_NL_O_OB_S_SE_SL_Traverser<T> extends 
LP_O_OB_S_SE_SL_Traverser<T
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/NL_O_OB_S_SE_SL_Traverser.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/NL_O_OB_S_SE_SL_Traverser.java
index 2fc4240a35..d6cccaf670 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/NL_O_OB_S_SE_SL_Traverser.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/NL_O_OB_S_SE_SL_Traverser.java
@@ -19,7 +19,9 @@
 
 package org.apache.tinkerpop.gremlin.process.traversal.traverser;
 
-import org.apache.commons.collections.map.ReferenceMap;
+import java.util.Map;
+import 
org.apache.commons.collections4.map.AbstractReferenceMap.ReferenceStrength;
+import org.apache.commons.collections4.map.ReferenceMap;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.LabelledCounter;
 
@@ -38,7 +40,7 @@ public class NL_O_OB_S_SE_SL_Traverser<T> extends 
O_OB_S_SE_SL_Traverser<T> {
     public NL_O_OB_S_SE_SL_Traverser(final T t, final Step<T, ?> step) {
         super(t, step);
         this.nestedLoops = new Stack<>();
-        this.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+        this.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
     }
 
     /////////////////
@@ -88,11 +90,11 @@ public class NL_O_OB_S_SE_SL_Traverser<T> extends 
O_OB_S_SE_SL_Traverser<T> {
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
@@ -111,11 +113,11 @@ public class NL_O_OB_S_SE_SL_Traverser<T> extends 
O_OB_S_SE_SL_Traverser<T> {
             clone.nestedLoops.push((LabelledCounter) lc.clone());
 
         if (this.loopNames != null) {
-            clone.loopNames = new ReferenceMap(ReferenceMap.HARD, 
ReferenceMap.WEAK);
+            clone.loopNames = new ReferenceMap(ReferenceStrength.HARD, 
ReferenceStrength.WEAK);
 
             final Iterator loopNamesIterator = 
this.loopNames.entrySet().iterator();
             while (loopNamesIterator.hasNext()) {
-                final ReferenceMap.Entry pair = (ReferenceMap.Entry) 
loopNamesIterator.next();
+                final Map.Entry pair = (Map.Entry) loopNamesIterator.next();
 
                 final int idx = this.nestedLoops.indexOf(pair.getValue());
                 if (idx != -1)
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/IndexedTraverserSet.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/IndexedTraverserSet.java
index ddf0f4c1f5..7a093302a1 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/IndexedTraverserSet.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/IndexedTraverserSet.java
@@ -18,7 +18,8 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.traverser.util;
 
-import org.apache.commons.collections.map.MultiValueMap;
+import org.apache.commons.collections4.MultiValuedMap;
+import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.util.Host;
@@ -33,7 +34,7 @@ import java.util.function.Function;
  */
 public class IndexedTraverserSet<S,I> extends TraverserSet<S> {
 
-    private final MultiValueMap index = new MultiValueMap();
+    private final MultiValuedMap<I, Traverser.Admin<S>> index = new 
ArrayListValuedHashMap<>();
     private final Function<S,I> indexingFunction;
 
     public IndexedTraverserSet(final Function<S, I> indexingFunction) {
@@ -70,12 +71,11 @@ public class IndexedTraverserSet<S,I> extends 
TraverserSet<S> {
      * @return
      */
     public Collection<Traverser.Admin<S>> get(final I k) {
-        final Collection<Traverser.Admin<S>> c = index.getCollection(k);
+        final Collection<Traverser.Admin<S>> c = index.get(k);
 
-        // if remove() is called on this class, then the MultiValueMap *may* 
(javadoc wasn't clear
-        // what the expectation was - used the word "typically") return an 
empty list if the last
-        // item removed leaves the list empty. i think we want to enforce null 
for TraverserSet
-        // semantics
+        // commons-collections4 MultiValuedMap.get() never returns null; it 
returns an empty
+        // collection when the key is absent. TraverserSet semantics require 
null in that case,
+        // so an empty result is mapped back to null here.
         return c != null && c.isEmpty() ? null : c;
     }
 
@@ -87,7 +87,7 @@ public class IndexedTraverserSet<S,I> extends TraverserSet<S> 
{
     @Override
     public Traverser.Admin<S> remove() {
         final Traverser.Admin<S> removed = super.remove();
-        index.remove(indexingFunction.apply(removed.get()), removed);
+        index.removeMapping(indexingFunction.apply(removed.get()), removed);
         return removed;
     }
 
@@ -97,7 +97,7 @@ public class IndexedTraverserSet<S,I> extends TraverserSet<S> 
{
             throw new IllegalArgumentException("The object to remove must be 
traverser");
 
         final boolean removed = super.remove(traverser);
-        if (removed) index.remove(indexingFunction.apply(((Traverser.Admin<S>) 
traverser).get()), traverser);
+        if (removed) 
index.removeMapping(indexingFunction.apply(((Traverser.Admin<S>) 
traverser).get()), traverser);
         return removed;
     }
 
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EdgeSerializer.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EdgeSerializer.java
index 8e690178c1..e041f63ecb 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EdgeSerializer.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EdgeSerializer.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexPropertySerializer.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexPropertySerializer.java
index aff9742829..5b705e3ef1 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexPropertySerializer.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexPropertySerializer.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
 import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexSerializer.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexSerializer.java
index 791fbb530d..b828865328 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexSerializer.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexSerializer.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java
index fe01e019bf..cae0f9c987 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java
@@ -32,7 +32,7 @@ import javax.xml.XMLConstants;
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
-import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Element;
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
index 18743739f7..c22ef20e54 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
@@ -127,7 +127,7 @@ import org.apache.tinkerpop.shaded.kryo.ClassResolver;
 import org.apache.tinkerpop.shaded.kryo.KryoSerializable;
 import org.apache.tinkerpop.shaded.kryo.serializers.JavaSerializer;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.LabelledCounter;
-import org.apache.commons.collections.map.ReferenceMap;
+import org.apache.commons.collections4.map.ReferenceMap;
 import org.javatuples.Pair;
 import org.javatuples.Triplet;
 
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
index a188c6a421..ee3a42b71c 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
@@ -454,7 +454,7 @@ public final class IteratorUtils {
         else if (o instanceof Object[])
             itty = new ArrayIterator<>((Object[]) o);
         else if (o != null && o.getClass().isArray()) // handle for primitive 
array
-            itty = new 
org.apache.commons.collections.iterators.ArrayIterator(o);
+            itty = new 
org.apache.commons.collections4.iterators.ArrayIterator(o);
         else if (o instanceof Stream)
             itty = ((Stream) o).iterator();
         else if (o instanceof Map)
diff --git a/gremlin-server/pom.xml b/gremlin-server/pom.xml
index 0c979e922b..29986528c4 100644
--- a/gremlin-server/pom.xml
+++ b/gremlin-server/pom.xml
@@ -51,8 +51,8 @@ limitations under the License.
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
         </dependency>
         <dependency>
             <groupId>ch.qos.logback</groupId>
diff --git a/pom.xml b/pom.xml
index a76016d9e2..bbdbfdfb66 100644
--- a/pom.xml
+++ b/pom.xml
@@ -153,7 +153,7 @@ limitations under the License.
     <properties>
         <antlr4.version>4.9.1</antlr4.version>
         <caffeine.version>2.3.1</caffeine.version>
-        <commons.collections.version>3.2.2</commons.collections.version>
+        <commons.collections4.version>4.4</commons.collections4.version>
         <commons.configuration.version>2.15.1</commons.configuration.version>
         <commons.lang.version>2.6</commons.lang.version>
         <commons.io.version>2.22.0</commons.io.version>
@@ -788,9 +788,9 @@ limitations under the License.
                 </exclusions>
             </dependency>
             <dependency>
-                <groupId>commons-collections</groupId>
-                <artifactId>commons-collections</artifactId>
-                <version>${commons.collections.version}</version>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-collections4</artifactId>
+                <version>${commons.collections4.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.commons</groupId>
@@ -1563,9 +1563,9 @@ limitations under the License.
                                             
<version>${commons.configuration.version}</version>
                                         </additionalDependency>
                                         <additionalDependency>
-                                            
<groupId>commons-collections</groupId>
-                                            
<artifactId>commons-collections</artifactId>
-                                            
<version>${commons.collections.version}</version>
+                                            
<groupId>org.apache.commons</groupId>
+                                            
<artifactId>commons-collections4</artifactId>
+                                            
<version>${commons.collections4.version}</version>
                                         </additionalDependency>
                                         <additionalDependency>
                                             
<groupId>org.apache.commons</groupId>
@@ -1866,9 +1866,9 @@ limitations under the License.
                                             <version>${netty.version}</version>
                                         </additionalDependency>
                                         <additionalDependency>
-                                            
<groupId>commons-collections</groupId>
-                                            
<artifactId>commons-collections</artifactId>
-                                            
<version>${commons.collections.version}</version>
+                                            
<groupId>org.apache.commons</groupId>
+                                            
<artifactId>commons-collections4</artifactId>
+                                            
<version>${commons.collections4.version}</version>
                                         </additionalDependency>
                                         <additionalDependency>
                                             
<groupId>org.apache.commons</groupId>
diff --git 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerShuffleGraph.java
 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerShuffleGraph.java
index eec4bee712..8be9b6b30e 100644
--- 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerShuffleGraph.java
+++ 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerShuffleGraph.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.tinkergraph.structure;
 
-import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.commons.configuration2.BaseConfiguration;
 import org.apache.commons.configuration2.Configuration;
 import org.apache.tinkerpop.gremlin.structure.Edge;


Reply via email to