You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2020/02/21 02:06:22 UTC
[groovy] branch GROOVY_2_5_X updated: GROOVY-9409:
org.codehaus.groovy.runtime.callsite.GroovySunClassLoader is unusable (port
to 2_5_X)
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_2_5_X by this push:
new a3771b9 GROOVY-9409: org.codehaus.groovy.runtime.callsite.GroovySunClassLoader is unusable (port to 2_5_X)
a3771b9 is described below
commit a3771b94214e35a04c7a8684d8e64cf052bfe833
Author: Paul King <pa...@asert.com.au>
AuthorDate: Fri Feb 21 00:11:03 2020 +1000
GROOVY-9409: org.codehaus.groovy.runtime.callsite.GroovySunClassLoader is unusable (port to 2_5_X)
---
.../codehaus/groovy/reflection/SunClassLoader.java | 20 ++++++-------
.../runtime/callsite/GroovySunClassLoader.java | 33 ++++++++++++----------
2 files changed, 27 insertions(+), 26 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java b/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
index 0a6a082..fffa545 100644
--- a/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
+++ b/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
@@ -34,7 +34,7 @@ import java.util.Map;
* Special class loader, which when running on Sun VM allows to generate accessor classes for any method
*/
public class SunClassLoader extends ClassLoader implements Opcodes {
- protected final Map<String,Class> knownClasses = new HashMap<String,Class>();
+ protected final Map<String, Class> knownClasses = new HashMap<String, Class>();
protected static final SunClassLoader sunVM;
@@ -50,19 +50,18 @@ public class SunClassLoader extends ClassLoader implements Opcodes {
}
}
});
- }
- catch (Throwable e) {
+ } catch (Throwable e) {
res = null;
}
sunVM = res;
}
protected SunClassLoader() throws Throwable {
- super (SunClassLoader.class.getClassLoader());
+ super(SunClassLoader.class.getClassLoader());
final Class magic = ClassLoader.getSystemClassLoader().loadClass("sun.reflect.MagicAccessorImpl");
knownClasses.put("sun.reflect.MagicAccessorImpl", magic);
- loadMagic ();
+ loadMagic();
}
private void loadMagic() {
@@ -73,7 +72,7 @@ public class SunClassLoader extends ClassLoader implements Opcodes {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, "sun/reflect/MagicAccessorImpl", "<init>", "()V", false);
mv.visitInsn(RETURN);
- mv.visitMaxs(0,0);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
cw.visitEnd();
@@ -84,13 +83,13 @@ public class SunClassLoader extends ClassLoader implements Opcodes {
final InputStream asStream = SunClassLoader.class.getClassLoader().getResourceAsStream(resName(name));
ClassReader reader = new ClassReader(asStream);
final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
- reader.accept(cw, ClassWriter.COMPUTE_MAXS);
+ reader.accept(cw, ClassReader.SKIP_DEBUG);
asStream.close();
define(cw.toByteArray(), name);
}
protected static String resName(String s) {
- return s.replace('.','/') + ".class";
+ return s.replace('.', '/') + ".class";
}
protected void define(byte[] bytes, final String name) {
@@ -100,12 +99,11 @@ public class SunClassLoader extends ClassLoader implements Opcodes {
protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
final Class aClass = knownClasses.get(name);
if (aClass != null)
- return aClass;
+ return aClass;
else {
try {
return super.loadClass(name, resolve);
- }
- catch (ClassNotFoundException e) {
+ } catch (ClassNotFoundException e) {
return getClass().getClassLoader().loadClass(name);
}
}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java b/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
index 71fd21e..6f1458c 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
@@ -33,23 +33,26 @@ public class GroovySunClassLoader extends SunClassLoader {
public static final SunClassLoader sunVM;
static {
- sunVM = AccessController.doPrivileged(new PrivilegedAction<SunClassLoader>() {
- public SunClassLoader run() {
- try {
- if (SunClassLoader.sunVM != null) {
- return new GroovySunClassLoader();
- }
+ sunVM = AccessController.doPrivileged(new PrivilegedAction<SunClassLoader>() {
+ public SunClassLoader run() {
+ try {
+ if (SunClassLoader.sunVM != null) {
+ return new GroovySunClassLoader();
}
- catch (Throwable t) {//
- }
- return null;
+ } catch (Throwable ignore) {
}
- });
+ return null;
+ }
+ });
+ }
+
+ protected GroovySunClassLoader() throws Throwable {
+ this(ClassReader.SKIP_CODE);
}
- protected GroovySunClassLoader () throws Throwable {
+ protected GroovySunClassLoader(int parsingOptions) throws Throwable {
super();
- loadAbstract ();
+ loadAbstract(parsingOptions);
loadFromRes("org.codehaus.groovy.runtime.callsite.MetaClassSite");
loadFromRes("org.codehaus.groovy.runtime.callsite.MetaMethodSite");
loadFromRes("org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite");
@@ -57,16 +60,16 @@ public class GroovySunClassLoader extends SunClassLoader {
loadFromRes("org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite");
}
- private void loadAbstract() throws IOException {
+ private void loadAbstract(int parsingOptions) throws IOException {
final InputStream asStream = GroovySunClassLoader.class.getClassLoader().getResourceAsStream(resName("org.codehaus.groovy.runtime.callsite.AbstractCallSite"));
ClassReader reader = new ClassReader(asStream);
final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
final ClassVisitor cv = new ClassVisitor(4, cw) {
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
super.visit(version, access, name, signature, "sun/reflect/GroovyMagic", interfaces);
- }
+ }
};
- reader.accept(cv, ClassWriter.COMPUTE_MAXS);
+ reader.accept(cv, parsingOptions);
asStream.close();
define(cw.toByteArray(), "org.codehaus.groovy.runtime.callsite.AbstractCallSite");
}