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 2026/07/13 16:10:05 UTC
(commons-collections) branch master updated: Fix AbstractDualBidiMap.MapEntry.setValue returning new value (#711)
This is an automated email from the ASF dual-hosted git repository.
garydgregory 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 e572c5444 Fix AbstractDualBidiMap.MapEntry.setValue returning new value (#711)
e572c5444 is described below
commit e572c54441e9ab72ebd53ddef1e744be071ec6a7
Author: Naveed Khan <16...@users.noreply.github.com>
AuthorDate: Mon Jul 13 16:10:00 2026 +0000
Fix AbstractDualBidiMap.MapEntry.setValue returning new value (#711)
---
src/changes/changes.xml | 1 +
.../commons/collections4/bidimap/AbstractDualBidiMap.java | 5 +++--
.../commons/collections4/bidimap/AbstractBidiMapTest.java | 13 +++++++++++++
3 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index f1663f196..3b760321a 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,7 @@
<body>
<release version="4.6.0" date="YYYY-MM-DD" description="This is a feature and maintenance release. Java 8 or later is required.">
<!-- FIX -->
+ <action type="fix" dev="ggregory" due-to="Naveed Khan, Gary Gregory">DualHashBidiMap, DualLinkedHashBidiMap, and DualTreeBidiMap entrySet() Map.Entry.setValue(Object) returns the new value instead of the previous value.</action>
<action type="fix" dev="ggregory" due-to="Naveed Khan, Gary Gregory">AbstractMapBag and AbstractMapMultiSet.add(Object, int) overflow the size and element count past Integer.MAX_VALUE.</action>
<action type="fix" dev="ggregory" due-to="Naveed Khan">CompositeCollection, CompositeSet, CompositeMap, AbstractMultiValuedMap and AbstractMultiSet size() overflow int when the total exceeds Integer.MAX_VALUE.</action>
<action type="fix" dev="ggregory" due-to="Gary Gregory" issue="COLLECTIONS-776">Wrapping PassiveExpiringMap in Collections.synchronizedMap breaks expiration.</action>
diff --git a/src/main/java/org/apache/commons/collections4/bidimap/AbstractDualBidiMap.java b/src/main/java/org/apache/commons/collections4/bidimap/AbstractDualBidiMap.java
index 5fb336e20..b7d6a2532 100644
--- a/src/main/java/org/apache/commons/collections4/bidimap/AbstractDualBidiMap.java
+++ b/src/main/java/org/apache/commons/collections4/bidimap/AbstractDualBidiMap.java
@@ -359,8 +359,9 @@ public abstract class AbstractDualBidiMap<K, V> implements BidiMap<K, V> {
throw new IllegalArgumentException(
"Cannot use setValue() when the object being set is already in the map");
}
- parent.put(key, value);
- return super.setValue(value);
+ final V oldValue = parent.put(key, value);
+ super.setValue(value);
+ return oldValue;
}
}
diff --git a/src/test/java/org/apache/commons/collections4/bidimap/AbstractBidiMapTest.java b/src/test/java/org/apache/commons/collections4/bidimap/AbstractBidiMapTest.java
index 509723fef..aefafb3b0 100644
--- a/src/test/java/org/apache/commons/collections4/bidimap/AbstractBidiMapTest.java
+++ b/src/test/java/org/apache/commons/collections4/bidimap/AbstractBidiMapTest.java
@@ -108,6 +108,19 @@ public abstract class AbstractBidiMapTest<K, V> extends AbstractIterableMapTest<
}
}
+ @Test
+ void testMapEntrySetValueReturnsOldValue() {
+ if (!isSetValueSupported()) {
+ return;
+ }
+ final V newValue = getNewSampleValues()[0];
+ resetFull();
+ final Map.Entry<K, V> entry = BidiMapEntrySetTest.this.getCollection().iterator().next();
+ final V oldValue = entry.getValue();
+ assertEquals(oldValue, entry.setValue(newValue));
+ assertEquals(newValue, entry.getValue());
+ }
+
}
@Nested