BaseReificator(Class<?> reifiedParent, String javaName, String javaPath) { this.reifiedParent = reifiedParent; this.javaName = javaName; this.javaPath = javaPath; cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, javaPath, null, p(reifiedParent), interfaces()); }
private ClassWriter beginProxyClass(final String className, final Class superClass, final Class[] interfaces) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); // start class cw.visit(Opcodes.V1_3, Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL | Opcodes.ACC_SUPER, toInternalClassName(className), /*signature*/ null, toInternalClassName(superClass), interfaceNamesForProxyClass(interfaces)); cw.visitField(Opcodes.ACC_PRIVATE, INVOCATION_HANDLER_FIELD_NAME, INVOCATION_HANDLER_TYPE.getDescriptor(), null, null).visitEnd(); cw.visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, PROXY_CLASS_FIELD_NAME, PROXY_CLASS_TYPE.getDescriptor(), null, null).visitEnd(); return cw; }
private ClassWriter createCompiledCtor(String namePath, String shortPath, String sup) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, sup, null); cw.visitSource(shortPath, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.aload(0); mv.visitMethodInsn(INVOKESPECIAL, sup, "<init>", "()V"); mv.voidreturn(); mv.end(); return cw; }
private ClassWriter createBlockCtor(String namePath, String classname) { String ciClassname = "L" + classname + ";"; ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, COMPILED_BLOCK_SUPER_CLASS_NAME, null); cw.visitSource(namePath, null); cw.visitField(ACC_PRIVATE | ACC_FINAL, "$scriptObject", ciClassname, null, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", sig(Void.TYPE, params(Object.class)), null, null); mv.start(); mv.aload(0); mv.invokespecial(p(CompiledBlockCallback.class), "<init>", sig(void.class)); mv.aloadMany(0, 1); mv.checkcast(classname); mv.putfield(namePath, "$scriptObject", ciClassname); mv.voidreturn(); mv.end(); return cw; }
cw.visit(V_BC, ACC_PUBLIC | ACC_SUPER, pathName, null, p(Object.class), superTypeNames); cw.visitSource(pathName + ".gen", null);
private static ClassWriter createJavaMethodCtor(String namePath, String sup, String parameterDesc) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); String sourceFile = namePath.substring(namePath.lastIndexOf('/') + 1) + ".gen"; cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, sup, null); cw.visitSource(sourceFile, null); AnnotationVisitor av = cw.visitAnnotation(ci(DynamicMethod.Version.class), true); av.visit("version", 0); av.visitEnd(); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", JAVA_SUPER_SIG, null, null); mv.start(); mv.aloadMany(0, 1, 2, 3); mv.invokespecial(sup, "<init>", JAVA_SUPER_SIG); mv.aload(0); mv.ldc(parameterDesc.toString()); mv.invokevirtual(p(JavaMethod.class), "setParameterDesc", sig(void.class, String.class)); mv.voidreturn(); mv.end(); return cw; }
private ClassWriter createBlockCtor(String namePath, String classname) { String ciClassname = "L" + classname + ";"; ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, COMPILED_BLOCK_SUPER_CLASS_NAME, null); cw.visitSource(namePath, null); cw.visitField(ACC_PRIVATE | ACC_FINAL, "$scriptObject", ciClassname, null, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", sig(Void.TYPE, params(Object.class)), null, null); mv.start(); mv.aload(0); mv.invokespecial(p(CompiledBlockCallback.class), "<init>", sig(void.class)); mv.aloadMany(0, 1); mv.checkcast(classname); mv.putfield(namePath, "$scriptObject", ciClassname); mv.voidreturn(); mv.end(); return cw; }
cw.visit(V_BC, ACC_PUBLIC | ACC_SUPER, pathName, null, p(Object.class), superTypeNames); cw.visitSource(pathName + ".gen", null);
private ClassWriter createCompiledCtor(String namePath, String shortPath, String sup) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, sup, null); cw.visitSource(shortPath, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.aload(0); mv.visitMethodInsn(INVOKESPECIAL, sup, "<init>", "()V"); mv.voidreturn(); mv.end(); return cw; }
private static ClassWriter createJavaMethodCtor(String namePath, String sup, String parameterDesc) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); String sourceFile = namePath.substring(namePath.lastIndexOf('/') + 1) + ".gen"; cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, sup, null); cw.visitSource(sourceFile, null); AnnotationVisitor av = cw.visitAnnotation(ci(DynamicMethod.Version.class), true); av.visit("version", 0); av.visitEnd(); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", JAVA_SUPER_SIG, null, null); mv.start(); mv.aloadMany(0, 1, 2, 3); mv.invokespecial(sup, "<init>", JAVA_SUPER_SIG); mv.aload(0); mv.ldc(parameterDesc.toString()); mv.invokevirtual(p(JavaMethod.class), "setParameterDesc", sig(void.class, String.class)); mv.voidreturn(); mv.end(); return cw; }
private ClassWriter beginProxyClass(final String className, final Class superClass, final Class[] interfaces) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); // start class cw.visit(Opcodes.V1_3, Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL | Opcodes.ACC_SUPER, toInternalClassName(className), /*signature*/ null, toInternalClassName(superClass), interfaceNamesForProxyClass(interfaces)); cw.visitField(Opcodes.ACC_PRIVATE, INVOCATION_HANDLER_FIELD_NAME, INVOCATION_HANDLER_TYPE.getDescriptor(), null, null).visitEnd(); cw.visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, PROXY_CLASS_FIELD_NAME, PROXY_CLASS_TYPE.getDescriptor(), null, null).visitEnd(); return cw; }
BaseReificator(Class<?> reifiedParent, String javaName, String javaPath) { this.reifiedParent = reifiedParent; this.javaName = javaName; this.javaPath = javaPath; cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, javaPath, null, p(reifiedParent), interfaces()); }
private ClassWriter createBlockCtor19(String namePath, String classname) { String ciClassname = "L" + classname + ";"; ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, p(Object.class), new String[] {COMPILED_BLOCK_19_INTERFACE_NAME}); cw.visitSource(namePath, null); cw.visitField(ACC_PRIVATE | ACC_FINAL, "$scriptObject", ciClassname, null, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", sig(Void.TYPE, params(Object.class)), null, null); mv.start(); mv.aload(0); mv.invokespecial(p(Object.class), "<init>", sig(void.class)); mv.aloadMany(0, 1); mv.checkcast(classname); mv.putfield(namePath, "$scriptObject", ciClassname); mv.voidreturn(); mv.end(); return cw; }
private ClassWriter createJavaMethodCtor(String namePath, String sup, String parameterDesc) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); String sourceFile = namePath.substring(namePath.lastIndexOf('/') + 1) + ".gen"; cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, sup, null); cw.visitSource(sourceFile, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", JAVA_SUPER_SIG, null, null); mv.start(); mv.aloadMany(0, 1, 2); mv.visitMethodInsn(INVOKESPECIAL, sup, "<init>", JAVA_SUPER_SIG); mv.aload(0); mv.ldc(parameterDesc); mv.invokevirtual(p(JavaMethod.class), "setParameterDesc", sig(void.class, String.class)); mv.voidreturn(); mv.end(); return cw; }
private static ClassWriter beginProxyClass(final String className, final Class superClass, final Class[] interfaces, final ClassDefiningClassLoader loader) { ClassWriter cw = ASM.newClassWriter(loader.asClassLoader()); // start class cw.visit(JAVA_VERSION, Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL | Opcodes.ACC_SUPER, toInternalClassName(className), /*signature*/ null, toInternalClassName(superClass), interfaceNamesForProxyClass(interfaces)); // private final JavaProxyInvocationHandler __handler; cw.visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_FINAL, INVOCATION_HANDLER_FIELD_NAME, INVOCATION_HANDLER_TYPE.getDescriptor(), null, null ).visitEnd(); // /* public */ static final JavaProxyClass __proxy_class; cw.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, PROXY_CLASS_FIELD_NAME, PROXY_CLASS_TYPE.getDescriptor(), null, null ).visitEnd(); return cw; }
private ClassWriter createBlockCtor19(String namePath, String classname) { String ciClassname = "L" + classname + ";"; ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, p(Object.class), new String[] {COMPILED_BLOCK_19_INTERFACE_NAME}); cw.visitSource(namePath, null); cw.visitField(ACC_PRIVATE | ACC_FINAL, "$scriptObject", ciClassname, null, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", sig(Void.TYPE, params(Object.class)), null, null); mv.start(); mv.aload(0); mv.invokespecial(p(Object.class), "<init>", sig(void.class)); mv.aloadMany(0, 1); mv.checkcast(classname); mv.putfield(namePath, "$scriptObject", ciClassname); mv.voidreturn(); mv.end(); return cw; }
private ClassWriter createJavaMethodCtor(String namePath, String sup, String parameterDesc) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); String sourceFile = namePath.substring(namePath.lastIndexOf('/') + 1) + ".gen"; cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, sup, null); cw.visitSource(sourceFile, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", JAVA_SUPER_SIG, null, null); mv.start(); mv.aloadMany(0, 1, 2); mv.visitMethodInsn(INVOKESPECIAL, sup, "<init>", JAVA_SUPER_SIG); mv.aload(0); mv.ldc(parameterDesc); mv.invokevirtual(p(JavaMethod.class), "setParameterDesc", sig(void.class, String.class)); mv.voidreturn(); mv.end(); return cw; }
private static ClassWriter beginProxyClass(final String className, final Class superClass, final Class[] interfaces, final ClassDefiningClassLoader loader) { ClassWriter cw = ASM.newClassWriter(loader.asClassLoader()); // start class cw.visit(JAVA_VERSION, Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL | Opcodes.ACC_SUPER, toInternalClassName(className), /*signature*/ null, toInternalClassName(superClass), interfaceNamesForProxyClass(interfaces)); // private final JavaProxyInvocationHandler __handler; cw.visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_FINAL, INVOCATION_HANDLER_FIELD_NAME, INVOCATION_HANDLER_TYPE.getDescriptor(), null, null ).visitEnd(); // /* public */ static final JavaProxyClass __proxy_class; cw.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, PROXY_CLASS_FIELD_NAME, PROXY_CLASS_TYPE.getDescriptor(), null, null ).visitEnd(); return cw; }
classWriter.visit(javaVersion == null ? RubyInstanceConfig.JAVA_VERSION : javaVersion, ACC_PUBLIC + ACC_SUPER,getClassname(), null, p(AbstractScript.class), null);
classWriter.visit(javaVersion == null ? RubyInstanceConfig.JAVA_VERSION : javaVersion, ACC_PUBLIC + ACC_SUPER,getClassname(), null, p(AbstractScript.class), null);