private static void defineAccessorConstructor(String accessorClassNameInternal,ClassWriter cw){ cw.visit(V1_6, ACC_PUBLIC, accessorClassNameInternal, null, CLASS_NAME, null); MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, CLASS_NAME, "<init>", "()V"); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
private static void defineNewInstance(String classNameInternal,ClassWriter cw){ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "newInstance", "()Ljava/lang/Object;", null, null); mv.visitCode(); mv.visitTypeInsn(NEW, classNameInternal); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL,classNameInternal, "<init>", "()V"); mv.visitInsn(ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); }
private static void defineNewArray(Class<?> clazz, String classNameInternal,ClassWriter cw){ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "newArray", "(I)Ljava/lang/Object;", null, null); Label l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 1); if(clazz.isPrimitive()){ mv.visitIntInsn(Opcodes.NEWARRAY,getPrimitiveTypeCode(clazz)); }else{ mv.visitTypeInsn(ANEWARRAY, classNameInternal); } mv.visitInsn(ARETURN); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLocalVariable("this", A_CLASS_NAME, null, l0, l1, 0); mv.visitLocalVariable("length", "I", null, l0, l1, 1); mv.visitMaxs(1, 2); mv.visitEnd(); }
@Override public void visitEnd() { if(!methodBodyOnly) { FieldVisitor fv = cw.visitField(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, PROVIDER_FIELD, PROVIDER_TYPE.getDescriptor(), null, null); fv.visitEnd(); if (!visitStaticInit) { int access = Opcodes.ACC_STATIC; MethodVisitor real = cw.visitMethod(access, "<clinit>", "()V", null, null); ClinitMethodVisitor mv = new ClinitMethodVisitor(real, access, "<clinit>", "()V"); mv.visitCode(); mv.returnValue(); mv.visitMaxs(0, 0); mv.visitEnd(); } } super.visitEnd(); }
MethodVisitor real = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null); ClinitMethodVisitor mv = new ClinitMethodVisitor(real, ACC_STATIC, "<clinit>", "()V"); mv.visitCode();
private static void defineGetField(String classNameInternal,Field[] fields, ClassWriter cw){ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "getFieldValue", "(Ljava/lang/Object;I)Ljava/lang/Object;", null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 2);
private static void defineGetArrayLength(Class<?> clazz, ClassWriter cw){ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "getArrayLength", "(Ljava/lang/Object;)I", null, null);
private static void defineInvokeMethod(String classNameInternal,Method[] methods, ClassWriter cw){ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC + ACC_VARARGS, "invokeMethod", "(Ljava/lang/Object;I[Ljava/lang/Object;)Ljava/lang/Object;", null, null);
protected void visitInterceptedMethod(AopMethod am, String newName) { MethodNode m = am.getMethod(); MethodVisitor real = cw.visitMethod(m.access, m.name, m.desc, m.signature, m.exceptions == null ? null : m.exceptions.toArray(Arrays2.EMPTY_STRING_ARRAY));
private static void defineGetArrayItem(Class<?> clazz, ClassWriter cw){ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "getArrayItem", "(Ljava/lang/Object;I)Ljava/lang/Object;", null, null);
private static void defineSetField(String classNameInternal,Field[] fields, ClassWriter cw){ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "setFieldValue", "(Ljava/lang/Object;ILjava/lang/Object;)V", null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 2);
private static void defineSetArrayItem(Class<?> clazz, ClassWriter cw){ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "setArrayItem", "(Ljava/lang/Object;ILjava/lang/Object;)V", null, null);