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