GROOVY-11156: remove illegal magic accessor usage
diff --git a/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java b/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
index 1fe20f1..413f28c 100644
--- a/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
+++ b/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
@@ -21,7 +21,6 @@
 import groovy.lang.MetaClassImpl;
 import groovy.lang.MetaMethod;
 import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.GroovySunClassLoader;
 
 import java.lang.ref.SoftReference;
 import java.lang.reflect.Constructor;
@@ -50,12 +49,6 @@
         if (cls != null)
             return cls;
 
-        if (GroovySunClassLoader.sunVM != null) {
-            cls = GroovySunClassLoader.sunVM.doesKnow(name);
-            if (cls != null)
-                return cls;
-        }
-
         return super.loadClass(name);
     }
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java b/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
deleted file mode 100644
index ee0a104..0000000
--- a/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *  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.reflection;
-
-import org.codehaus.groovy.control.CompilerConfiguration;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
-import static org.objectweb.asm.Opcodes.ALOAD;
-import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
-import static org.objectweb.asm.Opcodes.RETURN;
-
-/**
- * Special class loader, which when running on Sun VM allows to generate accessor classes for any method
- */
-public class SunClassLoader extends ClassLoader {
-    protected final Map<String, Class> knownClasses = new HashMap<String, Class>();
-
-    protected static final SunClassLoader sunVM;
-
-    static {
-        SunClassLoader res;
-        try {
-            res = doPrivileged((PrivilegedAction<SunClassLoader>) () -> {
-                try {
-                    return new SunClassLoader();
-                } catch (Throwable e) {
-                    return null;
-                }
-            });
-        } catch (Throwable e) {
-            res = null;
-        }
-        sunVM = res;
-    }
-
-    @SuppressWarnings("removal") // TODO a future Groovy version should perform the operation not as a privileged action
-    private static <T> T doPrivileged(PrivilegedAction<T> action) {
-        return java.security.AccessController.doPrivileged(action);
-    }
-
-    protected SunClassLoader() throws Throwable {
-        super(SunClassLoader.class.getClassLoader());
-
-        final Class magic = ClassLoader.getSystemClassLoader().loadClass("sun.reflect.MagicAccessorImpl");
-        knownClasses.put("sun.reflect.MagicAccessorImpl", magic);
-        loadMagic();
-    }
-
-    private void loadMagic() {
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
-        cw.visit(CompilerConfiguration.DEFAULT.getBytecodeVersion(), ACC_PUBLIC, "sun/reflect/GroovyMagic", null, "sun/reflect/MagicAccessorImpl", null);
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "sun/reflect/MagicAccessorImpl", "<init>", "()V", false);
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-        cw.visitEnd();
-
-        define(cw.toByteArray(), "sun.reflect.GroovyMagic");
-    }
-
-    protected void loadFromRes(String name) throws IOException {
-        try (final InputStream asStream = SunClassLoader.class.getClassLoader().getResourceAsStream(resName(name))) {
-            ClassReader reader = new ClassReader(asStream);
-            final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
-            reader.accept(cw, ClassReader.SKIP_DEBUG);
-            define(cw.toByteArray(), name);
-        }
-    }
-
-    protected static String resName(String s) {
-        return s.replace('.', '/') + ".class";
-    }
-
-    protected void define(byte[] bytes, final String name) {
-        knownClasses.put(name, defineClass(name, bytes, 0, bytes.length));
-    }
-
-    @Override
-    protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
-        final Class aClass = knownClasses.get(name);
-        if (aClass != null)
-            return aClass;
-        else {
-            try {
-                return super.loadClass(name, resolve);
-            } catch (ClassNotFoundException e) {
-                return getClass().getClassLoader().loadClass(name);
-            }
-        }
-    }
-
-    public Class doesKnow(String name) {
-        return knownClasses.get(name);
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
index 643c084..4b9aac7 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
@@ -249,7 +249,7 @@
     }
 
     public static boolean isCompilable (CachedMethod method) {
-        return (GroovySunClassLoader.sunVM != null || Modifier.isPublic(method.cachedClass.getModifiers()) && method.isPublic() && publicParams(method))
+        return (Modifier.isPublic(method.cachedClass.getModifiers()) && method.isPublic() && publicParams(method))
                 && !AndroidSupport.isRunningAndroid() && containsOnlyValidChars(method.getName());
     }
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java b/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
deleted file mode 100644
index 9dc48c4..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *  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.callsite;
-
-import org.codehaus.groovy.reflection.SunClassLoader;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.PrivilegedAction;
-
-import static org.codehaus.groovy.control.CompilerConfiguration.ASM_API_VERSION;
-
-public class GroovySunClassLoader extends SunClassLoader {
-
-    public static final SunClassLoader sunVM;
-
-    static {
-        sunVM = doPrivileged((PrivilegedAction<SunClassLoader>) () -> {
-            try {
-                if (SunClassLoader.sunVM != null) {
-                    return new GroovySunClassLoader();
-                }
-            } catch (Throwable ignore) {
-            }
-            return null;
-        });
-    }
-
-    @SuppressWarnings("removal") // TODO a future Groovy version should perform the operation not as a privileged action
-    private static <T> T doPrivileged(PrivilegedAction<T> action) {
-        return java.security.AccessController.doPrivileged(action);
-    }
-
-    protected GroovySunClassLoader() throws Throwable {
-        this(ClassReader.SKIP_CODE);
-    }
-
-    protected GroovySunClassLoader(int parsingOptions) throws Throwable {
-        super();
-        loadAbstract(parsingOptions);
-        loadFromRes("org.codehaus.groovy.runtime.callsite.MetaClassSite");
-        loadFromRes("org.codehaus.groovy.runtime.callsite.MetaMethodSite");
-        loadFromRes("org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite");
-        loadFromRes("org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite");
-        loadFromRes("org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite");
-    }
-
-    private void loadAbstract(int parsingOptions) throws IOException {
-        try (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 | ClassWriter.COMPUTE_FRAMES);
-            final ClassVisitor cv = new ClassVisitor(ASM_API_VERSION, cw) {
-                @Override
-                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, parsingOptions);
-            define(cw.toByteArray(), "org.codehaus.groovy.runtime.callsite.AbstractCallSite");
-        }
-    }
-}