diff options
Diffstat (limited to 'src/main/java/gtPlusPlus/preloader/CustomClassLoader.java')
-rw-r--r-- | src/main/java/gtPlusPlus/preloader/CustomClassLoader.java | 81 |
1 files changed, 37 insertions, 44 deletions
diff --git a/src/main/java/gtPlusPlus/preloader/CustomClassLoader.java b/src/main/java/gtPlusPlus/preloader/CustomClassLoader.java index 56394c11f0..388b5fa2a6 100644 --- a/src/main/java/gtPlusPlus/preloader/CustomClassLoader.java +++ b/src/main/java/gtPlusPlus/preloader/CustomClassLoader.java @@ -6,52 +6,45 @@ import java.security.Permissions; import java.security.ProtectionDomain; import java.security.cert.Certificate; import java.util.HashMap; - import org.objectweb.asm.ClassWriter; import org.objectweb.asm.tree.ClassNode; public class CustomClassLoader extends ClassLoader { - private HashMap<String, ClassNode> classes = new HashMap<String, ClassNode>(); - - @Override - - public Class<?> loadClass(String name) throws ClassNotFoundException { - return findClass(name); - } - - @Override - - protected Class<?> findClass(String name) throws ClassNotFoundException { - ClassNode node = classes.get(name.replace('.', '/')); - if (node != null) - return nodeToClass(node); - else - return super.findClass(name); - } - - public final void addNode(ClassNode node) { - classes.put(node.name, node); - } - - private final Class<?> nodeToClass(ClassNode node) { - if (super.findLoadedClass(node.name) != null) - return findLoadedClass(node.name); - ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); - node.accept(cw); - byte[] b = cw.toByteArray(); - return defineClass(node.name.replace('/', '.'), b, 0, b.length, getDomain()); - } - - private final ProtectionDomain getDomain() { - CodeSource code = new CodeSource(null, (Certificate[]) null); - return new ProtectionDomain(code, getPermissions()); - } - - private final Permissions getPermissions() { - Permissions permissions = new Permissions(); - permissions.add(new AllPermission()); - return permissions; - } - -}
\ No newline at end of file + private HashMap<String, ClassNode> classes = new HashMap<String, ClassNode>(); + + @Override + public Class<?> loadClass(String name) throws ClassNotFoundException { + return findClass(name); + } + + @Override + protected Class<?> findClass(String name) throws ClassNotFoundException { + ClassNode node = classes.get(name.replace('.', '/')); + if (node != null) return nodeToClass(node); + else return super.findClass(name); + } + + public final void addNode(ClassNode node) { + classes.put(node.name, node); + } + + private final Class<?> nodeToClass(ClassNode node) { + if (super.findLoadedClass(node.name) != null) return findLoadedClass(node.name); + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); + node.accept(cw); + byte[] b = cw.toByteArray(); + return defineClass(node.name.replace('/', '.'), b, 0, b.length, getDomain()); + } + + private final ProtectionDomain getDomain() { + CodeSource code = new CodeSource(null, (Certificate[]) null); + return new ProtectionDomain(code, getPermissions()); + } + + private final Permissions getPermissions() { + Permissions permissions = new Permissions(); + permissions.add(new AllPermission()); + return permissions; + } +} |