protected byte[] endClassOffline(ClassWriter cw) { cw.visitEnd(); byte[] code = cw.toByteArray(); if (DEBUG) CheckClassAdapter.verify(new ClassReader(code), false, new PrintWriter(System.err)); return code; }
protected byte[] endClassOffline(ClassWriter cw) { cw.visitEnd(); byte[] code = cw.toByteArray(); if (DEBUG) CheckClassAdapter.verify(new ClassReader(code), false, new PrintWriter(System.err)); return code; }
@Override protected Class endClass(ClassWriter cw, String name) { cw.visitEnd(); byte[] code = cw.toByteArray(); String cname = name.replace('.','/'); File f = new File(dumpPath,cname+".class"); f.getParentFile().mkdirs(); try { FileOutputStream fos = new FileOutputStream(f); fos.write(code); fos.close(); } catch(Exception e) { } return classLoader.defineClass(name, code); } }// DumpingInvocationMethodFactory
@Override protected Class endClass(ClassWriter cw, String name) { cw.visitEnd(); byte[] code = cw.toByteArray(); String cname = name.replace('.','/'); File f = new File(dumpPath,cname+".class"); f.getParentFile().mkdirs(); try { FileOutputStream fos = new FileOutputStream(f); fos.write(code); fos.close(); } catch(Exception e) { } return classLoader.defineClass(name, code); } }// DumpingInvocationMethodFactory
@Override protected Class endClass(ClassWriter cw, String name) { cw.visitEnd(); byte[] code = cw.toByteArray(); String cname = name.replace('.','/'); File f = new File(dumpPath,cname+".class"); f.getParentFile().mkdirs(); try { FileOutputStream fos = new FileOutputStream(f); fos.write(code); fos.close(); } catch(Exception e) { } return classLoader.defineClass(name, code); } }// DumpingInvocationMethodFactory
@Override protected Class endClass(ClassWriter cw, String name) { cw.visitEnd(); byte[] code = cw.toByteArray(); String cname = name.replace('.','/'); File f = new File(dumpPath,cname+".class"); f.getParentFile().mkdirs(); try { FileOutputStream fos = new FileOutputStream(f); fos.write(code); fos.close(); } catch(Exception e) { } return classLoader.defineClass(name, code); } }// DumpingInvocationMethodFactory
protected Class endClass(ClassWriter cw, String name) { cw.visitEnd(); final byte[] code = cw.toByteArray(); if (DEBUG) CheckClassAdapter.verify(new ClassReader(code), classLoader, false, new PrintWriter(System.err)); return classLoader.defineClass(name, code); }
protected Class endClass(ClassWriter cw, String name) { cw.visitEnd(); byte[] code = cw.toByteArray(); if (DEBUG) CheckClassAdapter.verify(new ClassReader(code), false, new PrintWriter(System.err)); return classLoader.defineClass(name, code); }
protected Class endClass(ClassWriter cw, String name) { cw.visitEnd(); final byte[] code = cw.toByteArray(); if (DEBUG) CheckClassAdapter.verify(new ClassReader(code), classLoader, false, new PrintWriter(System.err)); return classLoader.defineClass(name, code); }
protected Class endClass(ClassWriter cw, String name) { cw.visitEnd(); byte[] code = cw.toByteArray(); if (DEBUG) CheckClassAdapter.verify(new ClassReader(code), false, new PrintWriter(System.err)); return classLoader.defineClass(name, code); }
private JavaProxyClass generate(ClassLoader loader, String targetClassName, Class superClass, Class[] interfaces, Map<MethodKey, MethodData> methods, Type selfType) { ClassWriter cw = beginProxyClass(targetClassName, superClass, interfaces); GeneratorAdapter clazzInit = createClassInitializer(selfType, cw); generateConstructors(superClass, selfType, cw); generateGetProxyClass(selfType, cw); generateGetInvocationHandler(selfType, cw); generateProxyMethods(superClass, methods, selfType, cw, clazzInit); // finish class initializer clazzInit.returnValue(); clazzInit.endMethod(); // end class cw.visitEnd(); Class clazz = invokeDefineClass(loader, selfType.getClassName(), cw.toByteArray()); // trigger class initialization for the class try { Field proxy_class = clazz.getDeclaredField(PROXY_CLASS_FIELD_NAME); proxy_class.setAccessible(true); return (JavaProxyClass) proxy_class.get(clazz); } catch (Exception ex) { InternalError ie = new InternalError(); ie.initCause(ex); throw ie; } }
private JavaProxyClass generate(ClassLoader loader, String targetClassName, Class superClass, Class[] interfaces, Map<MethodKey, MethodData> methods, Type selfType) { ClassWriter cw = beginProxyClass(targetClassName, superClass, interfaces); GeneratorAdapter clazzInit = createClassInitializer(selfType, cw); generateConstructors(superClass, selfType, cw); generateGetProxyClass(selfType, cw); generateGetInvocationHandler(selfType, cw); generateProxyMethods(superClass, methods, selfType, cw, clazzInit); // finish class initializer clazzInit.returnValue(); clazzInit.endMethod(); // end class cw.visitEnd(); Class clazz = invokeDefineClass(loader, selfType.getClassName(), cw.toByteArray()); // trigger class initialization for the class try { Field proxy_class = clazz.getDeclaredField(PROXY_CLASS_FIELD_NAME); proxy_class.setAccessible(true); return (JavaProxyClass) proxy_class.get(clazz); } catch (Exception ex) { InternalError ie = new InternalError(); ie.initCause(ex); throw ie; } }
mv.end(); cw.visitEnd();
mv.end(); cw.visitEnd();
private JavaProxyClass generate(ClassDefiningClassLoader loader, String targetClassName, Class superClass, Class[] interfaces, Map<MethodKey, MethodData> methods, Type selfType) { ClassWriter cw = beginProxyClass(targetClassName, superClass, interfaces, loader); GeneratorAdapter clazzInit = createClassInitializer(selfType, cw); generateConstructors(superClass, selfType, cw); generate___getProxyClass(selfType, cw); generate___getInvocationHandler(selfType, cw); generateProxyMethods(superClass, methods, selfType, cw, clazzInit); // finish class initializer clazzInit.returnValue(); clazzInit.endMethod(); // end class cw.visitEnd(); Class clazz = loader.defineClass(selfType.getClassName(), cw.toByteArray()); // trigger class initialization for the class try { Field proxy_class = clazz.getDeclaredField(PROXY_CLASS_FIELD_NAME); // proxy_class.setAccessible(true); // field is public return (JavaProxyClass) proxy_class.get(clazz); } catch (NoSuchFieldException|IllegalAccessException ex) { Helpers.throwException(ex); return null; // re-throws (although unexpected) } }
private JavaProxyClass generate(ClassDefiningClassLoader loader, String targetClassName, Class superClass, Class[] interfaces, Map<MethodKey, MethodData> methods, Type selfType) { ClassWriter cw = beginProxyClass(targetClassName, superClass, interfaces, loader); GeneratorAdapter clazzInit = createClassInitializer(selfType, cw); generateConstructors(superClass, selfType, cw); generate___getProxyClass(selfType, cw); generate___getInvocationHandler(selfType, cw); generateProxyMethods(superClass, methods, selfType, cw, clazzInit); // finish class initializer clazzInit.returnValue(); clazzInit.endMethod(); // end class cw.visitEnd(); Class clazz = loader.defineClass(selfType.getClassName(), cw.toByteArray()); // trigger class initialization for the class try { Field proxy_class = clazz.getDeclaredField(PROXY_CLASS_FIELD_NAME); // proxy_class.setAccessible(true); // field is public return (JavaProxyClass) proxy_class.get(clazz); } catch (NoSuchFieldException|IllegalAccessException ex) { Helpers.throwException(ex); return null; // re-throws (although unexpected) } }