Repository: groovy
Updated Branches:
  refs/heads/GROOVY_2_6_X d37a834e6 -> e33151a8c


Refine CommonCache

(cherry picked from commit 5a16022)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/c04a9e37
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/c04a9e37
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/c04a9e37

Branch: refs/heads/GROOVY_2_6_X
Commit: c04a9e37775051411d183349c5b2510c08ce6b6f
Parents: d37a834
Author: sunlan <[email protected]>
Authored: Sun Dec 10 18:27:38 2017 +0800
Committer: sunlan <[email protected]>
Committed: Sun Dec 10 19:19:16 2017 +0800

----------------------------------------------------------------------
 .../org/codehaus/groovy/runtime/memoize/CommonCache.java  | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/c04a9e37/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java 
b/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java
index ee6e0a9..ff521cd 100644
--- a/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java
+++ b/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java
@@ -18,6 +18,8 @@
  */
 package org.codehaus.groovy.runtime.memoize;
 
+import java.lang.ref.SoftReference;
+import java.lang.ref.WeakReference;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -177,8 +179,12 @@ public class CommonCache<K, V> implements 
EvictableCache<K, V> {
             List<K> keys = new LinkedList<>();
 
             for (Map.Entry<K, V> entry : map.entrySet()) {
-                if (null == entry.getValue()) {
-                    keys.add(entry.getKey());
+                K key = entry.getKey();
+                V value = entry.getValue();
+                if (null == value
+                        || (value instanceof SoftReference && null == 
((SoftReference) value).get())
+                        || (value instanceof WeakReference && null == 
((WeakReference) value).get())) {
+                    keys.add(key);
                 }
             }
 

Reply via email to