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 16:04:56 UTC

[1/2] groovy git commit: Add the missing `equals` and `hashCode` to GroovyCodeSource

Repository: groovy
Updated Branches:
  refs/heads/GROOVY_2_6_X f54331312 -> 7d7b89159


Add the missing `equals` and `hashCode` to GroovyCodeSource

(cherry picked from commit b2b6d8d)


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

Branch: refs/heads/GROOVY_2_6_X
Commit: 5a849138bf09d6a46ce0c80da25f52622e9ae8cd
Parents: f543313
Author: sunlan <su...@apache.org>
Authored: Sun Dec 10 22:52:44 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Mon Dec 11 00:04:34 2017 +0800

----------------------------------------------------------------------
 src/main/groovy/lang/GroovyCodeSource.java | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/5a849138/src/main/groovy/lang/GroovyCodeSource.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/lang/GroovyCodeSource.java b/src/main/groovy/lang/GroovyCodeSource.java
index 0201abe..a5a2bb1 100644
--- a/src/main/groovy/lang/GroovyCodeSource.java
+++ b/src/main/groovy/lang/GroovyCodeSource.java
@@ -36,6 +36,7 @@ import java.security.CodeSource;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.security.cert.Certificate;
+import java.util.Objects;
 
 /**
  * CodeSource wrapper class that allows specific security policies to be associated with a class
@@ -249,4 +250,17 @@ public class GroovyCodeSource {
             throw new RuntimeException("A CodeSource file URL cannot be constructed from the supplied codeBase: " + codeBase);
         }
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        GroovyCodeSource that = (GroovyCodeSource) o;
+        return Objects.equals(codeSource, that.codeSource);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(codeSource);
+    }
 }


[2/2] groovy git commit: Fix caches based on hash

Posted by su...@apache.org.
Fix caches based on hash

(cherry picked from commit fb00a04)


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

Branch: refs/heads/GROOVY_2_6_X
Commit: 7d7b89159721cd73b9bc38896cffaf45a6c74b79
Parents: 5a84913
Author: sunlan <su...@apache.org>
Authored: Sun Dec 10 23:49:18 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Mon Dec 11 00:04:39 2017 +0800

----------------------------------------------------------------------
 .../groovy/runtime/memoize/CacheKey.java        | 56 ++++++++++++++++++++
 .../stc/StaticTypeCheckingSupport.java          | 11 ++--
 .../macro/transform/MacroMethodsCache.java      |  9 ++--
 3 files changed, 67 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/7d7b8915/src/main/org/codehaus/groovy/runtime/memoize/CacheKey.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/runtime/memoize/CacheKey.java b/src/main/org/codehaus/groovy/runtime/memoize/CacheKey.java
new file mode 100644
index 0000000..1efb852
--- /dev/null
+++ b/src/main/org/codehaus/groovy/runtime/memoize/CacheKey.java
@@ -0,0 +1,56 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.runtime.memoize;
+
+import java.util.Objects;
+
+/**
+ * Wrap objects to provide the basic equals and hashCode function, which are essential to collections(especially to collections based on hash)
+ * @param <K> the type of key
+ *
+ * @since 2.5.0
+ */
+public class CacheKey<K> {
+    private K key;
+
+    public CacheKey(K key) {
+        if (null == key) {
+            throw new IllegalArgumentException("key can not be null");
+        }
+
+        this.key = key;
+    }
+
+    public K getKey() {
+        return key;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        CacheKey<?> cacheKey = (CacheKey<?>) o;
+        return Objects.equals(key, cacheKey.key);
+    }
+
+    @Override
+    public int hashCode() {
+        return key.getClass().getCanonicalName().hashCode();
+    }
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/7d7b8915/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
index 95919c9..878bbd9 100644
--- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -46,6 +46,7 @@ import org.codehaus.groovy.runtime.DefaultGroovyStaticMethods;
 import org.codehaus.groovy.runtime.m12n.ExtensionModule;
 import org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner;
 import org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule;
+import org.codehaus.groovy.runtime.memoize.CacheKey;
 import org.codehaus.groovy.runtime.memoize.CommonCache;
 import org.codehaus.groovy.runtime.memoize.EvictableCache;
 import org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl;
@@ -2162,14 +2163,14 @@ public abstract class StaticTypeCheckingSupport {
      * a method lookup.
      */
     private static class ExtensionMethodCache {
-        private final CommonCache<ClassLoader, Map<String, List<MethodNode>>> cache = new CommonCache<ClassLoader, Map<String, List<MethodNode>>>(new WeakHashMap<ClassLoader, Map<String, List<MethodNode>>>());
+        private final CommonCache<CacheKey<ClassLoader>, Map<String, List<MethodNode>>> cache = new CommonCache<CacheKey<ClassLoader>, Map<String, List<MethodNode>>>(new WeakHashMap<CacheKey<ClassLoader>, Map<String, List<MethodNode>>>());
 
         public Map<String, List<MethodNode>> getExtensionMethods(ClassLoader loader) {
             return cache.getAndPut(
-                    loader,
-                    new EvictableCache.ValueProvider<ClassLoader, Map<String, List<MethodNode>>>() {
+                    new CacheKey<ClassLoader>(loader),
+                    new EvictableCache.ValueProvider<CacheKey<ClassLoader>, Map<String, List<MethodNode>>>() {
                         @Override
-                        public Map<String, List<MethodNode>> provide(final ClassLoader key) {
+                        public Map<String, List<MethodNode>> provide(final CacheKey<ClassLoader> key) {
                             final List<ExtensionModule> modules = new LinkedList<ExtensionModule>();
                             ExtensionModuleScanner scanner =
                                     new ExtensionModuleScanner(
@@ -2185,7 +2186,7 @@ public abstract class StaticTypeCheckingSupport {
                                                     if (!skip) modules.add(module);
                                                 }
                                             },
-                                            key
+                                            key.getKey()
                                     );
                             scanner.scanClasspathModules();
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/7d7b8915/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroMethodsCache.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroMethodsCache.java b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroMethodsCache.java
index 5a6af4a..29a30ea 100644
--- a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroMethodsCache.java
+++ b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroMethodsCache.java
@@ -26,6 +26,7 @@ import org.codehaus.groovy.macro.runtime.Macro;
 import org.codehaus.groovy.runtime.m12n.ExtensionModule;
 import org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner;
 import org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule;
+import org.codehaus.groovy.runtime.memoize.CacheKey;
 import org.codehaus.groovy.runtime.memoize.CommonCache;
 import org.codehaus.groovy.runtime.memoize.EvictableCache;
 import org.codehaus.groovy.transform.stc.ExtensionMethodNode;
@@ -44,13 +45,13 @@ import java.util.WeakHashMap;
  */
 class MacroMethodsCache {
     private static final ClassNode MACRO_ANNOTATION_CLASS_NODE = ClassHelper.make(Macro.class);
-    private static final CommonCache<ClassLoader, Map<String, List<MethodNode>>> CACHE = new CommonCache<ClassLoader, Map<String, List<MethodNode>>>(new WeakHashMap<ClassLoader, Map<String, List<MethodNode>>>());
+    private static final CommonCache<CacheKey<ClassLoader>, Map<String, List<MethodNode>>> CACHE = new CommonCache<CacheKey<ClassLoader>, Map<String, List<MethodNode>>>(new WeakHashMap<CacheKey<ClassLoader>, Map<String, List<MethodNode>>>());
 
     public static Map<String, List<MethodNode>> get(final ClassLoader classLoader) {
-        return CACHE.getAndPut(classLoader, new EvictableCache.ValueProvider<ClassLoader, Map<String, List<MethodNode>>>() {
+        return CACHE.getAndPut(new CacheKey<ClassLoader>(classLoader), new EvictableCache.ValueProvider<CacheKey<ClassLoader>, Map<String, List<MethodNode>>>() {
             @Override
-            public Map<String, List<MethodNode>> provide(ClassLoader key) {
-                return getMacroMethodsFromClassLoader(key);
+            public Map<String, List<MethodNode>> provide(CacheKey<ClassLoader> key) {
+                return getMacroMethodsFromClassLoader(key.getKey());
             }
         });
     }