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;
