You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2017/12/10 10:29:25 UTC

groovy git commit: Refine CommonCache

Repository: groovy
Updated Branches:
  refs/heads/master 913454a0e -> 5a16022eb


Refine CommonCache


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

Branch: refs/heads/master
Commit: 5a16022eb356de9a9bc4971b2e8eb1f9a4b2baaa
Parents: 913454a
Author: sunlan <su...@apache.org>
Authored: Sun Dec 10 18:27:38 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Dec 10 18:27:38 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/5a16022e/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);
                 }
             }