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