You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2021/05/26 07:45:16 UTC
[cayenne] branch master updated: Fix WeakMap.Entry setValue() method
This is an automated email from the ASF dual-hosted git repository.
ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new 48206e7 Fix WeakMap.Entry setValue() method
48206e7 is described below
commit 48206e7d45df34d1fd771e03ffb91738038e2ae4
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Tue May 25 10:13:08 2021 +0300
Fix WeakMap.Entry setValue() method
---
.../java/org/apache/cayenne/util/ReferenceMap.java | 4 +++-
.../org/apache/cayenne/util/WeakValueMapTest.java | 26 ++++++++++++++++++++++
2 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/util/ReferenceMap.java b/cayenne-server/src/main/java/org/apache/cayenne/util/ReferenceMap.java
index e917889..7eb8149 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/util/ReferenceMap.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/util/ReferenceMap.java
@@ -251,6 +251,7 @@ abstract class ReferenceMap<K, V, R extends Reference<V>> extends AbstractMap<K,
}
private void resetReferenceQueue() {
+ //noinspection StatementWithEmptyBody
while(referenceQueue.poll() != null) {
// just purge this queue
}
@@ -371,8 +372,9 @@ abstract class ReferenceMap<K, V, R extends Reference<V>> extends AbstractMap<K,
public V setValue(V value) {
R newRef = newReference(value);
R oldRef = refEntry.setValue(newRef);
+ super.setValue(value);
if(oldRef != null) {
- return getValue();
+ return oldRef.get();
}
return null;
}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/util/WeakValueMapTest.java b/cayenne-server/src/test/java/org/apache/cayenne/util/WeakValueMapTest.java
index c333564..74cca8c 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/util/WeakValueMapTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/util/WeakValueMapTest.java
@@ -180,6 +180,32 @@ public class WeakValueMapTest {
assertEquals(map1.hashCode(), map2.hashCode());
}
+ @Test
+ public void testEntrySetValue() {
+ Map<String, Integer> map = new WeakValueMap<>(3);
+ map.put("key_1", 123);
+ map.put("key_2", 42);
+ map.put("key_3", 543);
+ assertEquals(3, map.size());
+
+ for(Map.Entry<String, Integer> entry : map.entrySet()) {
+ if("key_2".equals(entry.getKey())) {
+ assertEquals(Integer.valueOf(42), entry.getValue());
+ assertEquals(Integer.valueOf(42), entry.setValue(24));
+ assertEquals(Integer.valueOf(24), entry.getValue());
+ }
+ }
+
+ for(Map.Entry<String, Integer> entry : map.entrySet()) {
+ if("key_2".equals(entry.getKey())) {
+ assertEquals(Integer.valueOf(24), entry.getValue());
+ }
+ }
+
+ assertEquals(3, map.size());
+ assertEquals(Integer.valueOf(24), map.get("key_2"));
+ }
+
@Test(expected = ConcurrentModificationException.class)
public void testConcurrentModification() {
Map<String, Integer> map = new WeakValueMap<>(3);