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);