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