public Class<?> createClass(String className, byte[] bytes, ClassLoader declaringClassLoader) { return factoryClassLoader.registerClass(className, bytes, declaringClassLoader); }
public AsmFactory(ClassLoader cl) { factoryClassLoader = new FactoryClassLoader(cl); }
private boolean isAlreadyAccessible(ClassLoader classLoader) { if (isAccessibleFrom(classLoader, getParent())) { return true; } for(ClassLoader cl : delegateClassLoader) { if (isAccessibleFrom(classLoader, cl)) { return true; } } return false; }
public Class<?> registerClass(final String name, final byte[] bytes, ClassLoader classLoader) { lock.lock(); try { ClassInfo info = classes.get(name); if (info != null) { if (!Arrays.equals(info.bytes, bytes)) { throw new LinkageError("Class " + name + " is defined with different bytecodes"); } } else { Class<?> clazz = defineClass(name, bytes, 0, bytes.length); info = new ClassInfo(bytes, clazz); classes.put(name, info); if (classLoader != null && !isAlreadyAccessible(classLoader)) { delegateClassLoader.add(classLoader); } } return info.clazz; } finally { lock.unlock(); } }
public Class<?> registerClass(final String name, final byte[] bytes, ClassLoader classLoader) { lock.lock(); try { ClassInfo info = classes.get(name); if (info != null) { if (!Arrays.equals(info.bytes, bytes)) { throw new LinkageError("Class " + name + " is defined with different bytecodes"); } } else { Class<?> clazz = defineClass(name, bytes, 0, bytes.length); info = new ClassInfo(bytes, clazz); classes.put(name, info); if (classLoader != null && !isAlreadyAccessible(classLoader)) { delegateClassLoader.add(classLoader); } } return info.clazz; } finally { lock.unlock(); } }
public Class<?> createClass(String className, byte[] bytes, ClassLoader declaringClassLoader) { return factoryClassLoader.registerClass(className, bytes, declaringClassLoader); }
private boolean isAlreadyAccessible(ClassLoader classLoader) { if (isAccessibleFrom(classLoader, getParent())) { return true; } for(ClassLoader cl : delegateClassLoader) { if (isAccessibleFrom(classLoader, cl)) { return true; } } return false; }
public AsmFactory(ClassLoader cl) { factoryClassLoader = new FactoryClassLoader(cl); }
AsmUtils.writeClassToFile(className, bytes); Class<?> clazz = classLoader.registerClass(className, bytes, null);