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/13 02:23:00 UTC

groovy git commit: Refine the `clear` method of `CommonCache`

Repository: groovy
Updated Branches:
  refs/heads/master 380c79d98 -> 22e45ebe2


Refine the `clear` method of `CommonCache`


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

Branch: refs/heads/master
Commit: 22e45ebe2ab9a7524ccde311fed8f01c7ff3b987
Parents: 380c79d
Author: sunlan <su...@apache.org>
Authored: Wed Dec 13 10:22:54 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Wed Dec 13 10:22:54 2017 +0800

----------------------------------------------------------------------
 src/main/groovy/lang/GroovyClassLoader.java                   | 7 ++++---
 src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java | 7 +++----
 .../groovy/runtime/memoize/ConcurrentCommonCache.java         | 2 +-
 .../org/codehaus/groovy/runtime/memoize/EvictableCache.java   | 5 +++--
 .../org/codehaus/groovy/runtime/memoize/CommonCacheTest.java  | 2 +-
 .../groovy/runtime/memoize/ConcurrentCommonCacheTest.java     | 2 +-
 6 files changed, 13 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/22e45ebe/src/main/groovy/lang/GroovyClassLoader.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/lang/GroovyClassLoader.java b/src/main/groovy/lang/GroovyClassLoader.java
index 37480cb..8581879 100644
--- a/src/main/groovy/lang/GroovyClassLoader.java
+++ b/src/main/groovy/lang/GroovyClassLoader.java
@@ -72,6 +72,7 @@ import java.security.ProtectionDomain;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Enumeration;
+import java.util.Map;
 
 /**
  * A ClassLoader which can load Groovy classes. The loaded classes are cached,
@@ -1022,17 +1023,17 @@ public class GroovyClassLoader extends URLClassLoader {
      * @see #removeClassCacheEntry(String)
      */
     public void clearCache() {
-        Collection<Class> classesToClear = classCache.clear();
+        Map<String, Class> clearedClasses = classCache.clear();
 
         sourceCache.clear();
 
-        for (Class c : classesToClear) {
+        for (Map.Entry<String, Class> entry : clearedClasses.entrySet()) {
             // Another Thread may be using an instance of this class
             // (for the first time) requiring a ClassInfo lock and
             // classloading which would require a lock on classCache.
             // The following locks on ClassInfo and to avoid deadlock
             // should not be done with a classCache lock.
-            InvokerHelper.removeClass(c);
+            InvokerHelper.removeClass(entry.getValue());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/22e45ebe/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 9286a3f..4659459 100644
--- a/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java
+++ b/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java
@@ -21,7 +21,6 @@ package org.codehaus.groovy.runtime.memoize;
 
 import java.lang.ref.SoftReference;
 import java.lang.ref.WeakReference;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
@@ -182,11 +181,11 @@ public class CommonCache<K, V> implements EvictableCache<K, V> {
      * {@inheritDoc}
      */
     @Override
-    public Collection<V> clear() {
-        Collection<V> values = new ArrayList<V>(map.values()); // we must create a new list, or the method will always return empty collection.
+    public Map<K, V> clear() {
+        Map<K, V> result = new LinkedHashMap<K, V>(map);
         map.clear();
 
-        return values;
+        return result;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/groovy/blob/22e45ebe/src/main/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCache.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCache.java b/src/main/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCache.java
index 3854b12..9eae7cd 100644
--- a/src/main/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCache.java
+++ b/src/main/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCache.java
@@ -215,7 +215,7 @@ public class ConcurrentCommonCache<K, V> extends CommonCache<K, V> {
      * {@inheritDoc}
      */
     @Override
-    public Collection<V> clear() {
+    public Map<K, V> clear() {
         writeLock.lock();
         try {
             return super.clear();

http://git-wip-us.apache.org/repos/asf/groovy/blob/22e45ebe/src/main/org/codehaus/groovy/runtime/memoize/EvictableCache.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/runtime/memoize/EvictableCache.java b/src/main/org/codehaus/groovy/runtime/memoize/EvictableCache.java
index 67bb794..34a0b8d 100644
--- a/src/main/org/codehaus/groovy/runtime/memoize/EvictableCache.java
+++ b/src/main/org/codehaus/groovy/runtime/memoize/EvictableCache.java
@@ -19,6 +19,7 @@
 package org.codehaus.groovy.runtime.memoize;
 
 import java.util.Collection;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -38,9 +39,9 @@ public interface EvictableCache<K, V> extends MemoizeCache<K, V> {
 
     /**
      * Clear the cache
-     * @return returns cleared values
+     * @return returns the content of the cleared map
      */
-    Collection<V> clear();
+    Map<K, V> clear();
 
     /**
      * Try to get the value from cache.

http://git-wip-us.apache.org/repos/asf/groovy/blob/22e45ebe/src/test/org/codehaus/groovy/runtime/memoize/CommonCacheTest.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/memoize/CommonCacheTest.java b/src/test/org/codehaus/groovy/runtime/memoize/CommonCacheTest.java
index 9ffc129..74defbd 100644
--- a/src/test/org/codehaus/groovy/runtime/memoize/CommonCacheTest.java
+++ b/src/test/org/codehaus/groovy/runtime/memoize/CommonCacheTest.java
@@ -156,7 +156,7 @@ public class CommonCacheTest {
                         )
                 );
 
-        Assert.assertArrayEquals(new String[] {"Daniel", "Male", "Shanghai"}, sc.clear().toArray(new String[0]));
+        Assert.assertArrayEquals(new String[] {"Daniel", "Male", "Shanghai"}, sc.clear().values().toArray(new String[0]));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/groovy/blob/22e45ebe/src/test/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCacheTest.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCacheTest.java b/src/test/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCacheTest.java
index e2d4366..44c9ae2 100644
--- a/src/test/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCacheTest.java
+++ b/src/test/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCacheTest.java
@@ -155,7 +155,7 @@ public class ConcurrentCommonCacheTest {
                         )
                 );
 
-        Assert.assertArrayEquals(new String[] {"Daniel", "Male", "Shanghai"}, sc.clear().toArray(new String[0]));
+        Assert.assertArrayEquals(new String[] {"Daniel", "Male", "Shanghai"}, sc.clear().values().toArray(new String[0]));
     }
 
     @Test