List of usage examples for org.objectweb.asm MethodVisitor visitVarInsn
public void visitVarInsn(final int opcode, final int var)
From source file:erjang.ETuple.java
License:Apache License
private static void create_constructor(ClassAdapter cw, String super_class_name) { MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode();/*from w w w . ja v a2 s. c o m*/ mv.visitVarInsn(Opcodes.ALOAD, 0); // load this mv.visitMethodInsn(Opcodes.INVOKESPECIAL, super_class_name, "<init>", "()V"); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); }
From source file:formatasm.FormatASM.java
License:Open Source License
public static byte[] generateBytes(String klazz, String subklazz, List<Spec> specs) { klazz = klazz.replace('.', '/'); subklazz = subklazz.replace('.', '/'); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); MethodVisitor mv; cw.visit(V1_7, ACC_PUBLIC + ACC_SUPER, subklazz, null, klazz, null); {/*from w ww . j ava 2s . c o m*/ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, klazz, "<init>", "()V"); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_VARARGS, "format", "([Ljava/lang/Object;)Ljava/lang/String;", null, null); /// StringBuilder sb = new StringBuilder(); mv.visitCode(); mv.visitTypeInsn(NEW, "java/lang/StringBuilder"); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V"); mv.visitVarInsn(ASTORE, 2); for (Spec spec : specs) { switch (spec.type) { case CONTENT: copyTemplateASM(klazz, mv, spec.begin, spec.end); // Skip further processing continue; case PERCENT: mv.visitVarInsn(ALOAD, 2); mv.visitIntInsn(BIPUSH, '%'); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(C)Ljava/lang/StringBuilder;"); mv.visitInsn(POP); // Skip further processing continue; case INT: formatIntegerASM(mv, spec); break; case INT_HEX: formatHexidecimalASM(mv, spec); break; case OCTAL: formatOctalASM(mv, spec); break; case BOOL: case CHAR: // text = args[?].toString(); mv.visitVarInsn(ALOAD, 1); mv.visitIntInsn(BIPUSH, spec.index); mv.visitInsn(AALOAD); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "toString", "()Ljava/lang/String;"); mv.visitVarInsn(ASTORE, 3); break; case STRING: // text = (String) args[?] mv.visitVarInsn(ALOAD, 1); mv.visitIntInsn(BIPUSH, spec.index); mv.visitInsn(AALOAD); mv.visitTypeInsn(CHECKCAST, "java/lang/String"); mv.visitVarInsn(ASTORE, 3); break; case DATETIME: formatDateTimeASM(mv, spec); break; default: break; } if (spec.upper && spec.type != Type.DATETIME) { toUpperCaseASM(mv); } if (spec.width > 0 && !spec.leftFlag) { addWidthASM(mv, spec); } appendTextASM(mv); if (spec.width > 0 && spec.leftFlag) { addWidthASM(mv, spec); } } /// return sb.toString(); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;"); mv.visitInsn(ARETURN); mv.visitMaxs(0, 0); mv.visitEnd(); } cw.visitEnd(); return cw.toByteArray(); }
From source file:formatasm.FormatASM.java
License:Open Source License
public static void copyTemplateASM(String klazz, MethodVisitor mv, int begin, int end) { mv.visitVarInsn(ALOAD, 2); mv.visitVarInsn(ALOAD, 0);// w w w .jav a 2s. co m mv.visitFieldInsn(GETFIELD, klazz, "template", "Ljava/lang/String;"); mv.visitIntInsn(BIPUSH, begin); mv.visitIntInsn(BIPUSH, end); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "substring", "(II)Ljava/lang/String;"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); mv.visitInsn(POP); }
From source file:formatasm.FormatASM.java
License:Open Source License
public static void formatIntegerASM(MethodVisitor mv, Spec spec) { mv.visitVarInsn(ALOAD, 1); mv.visitIntInsn(BIPUSH, spec.index); mv.visitInsn(AALOAD);/*from www. ja v a 2 s . c om*/ mv.visitTypeInsn(CHECKCAST, "java/lang/Integer"); mv.visitInsn(spec.parensFlag ? ICONST_1 : ICONST_0); mv.visitInsn(spec.groupFlag ? ICONST_1 : ICONST_0); mv.visitInsn(spec.plusFlag ? ICONST_1 : ICONST_0); mv.visitInsn(spec.spaceFlag ? ICONST_1 : ICONST_0); mv.visitMethodInsn(INVOKESTATIC, "formatasm/FormatASM", "formatInteger", "(Ljava/lang/Integer;ZZZZ)Ljava/lang/String;"); mv.visitVarInsn(ASTORE, 3); }
From source file:formatasm.FormatASM.java
License:Open Source License
public static void formatDateTimeASM(MethodVisitor mv, Spec spec) { mv.visitVarInsn(ALOAD, 1); mv.visitIntInsn(BIPUSH, spec.index); mv.visitInsn(AALOAD);//from w w w.j ava 2 s . c om mv.visitInsn(spec.upper ? ICONST_1 : ICONST_0); mv.visitIntInsn(BIPUSH, spec.datetime); mv.visitMethodInsn(INVOKESTATIC, "formatasm/FormatASM", "formatDateTime", "(Ljava/lang/Object;ZC)Ljava/lang/String;"); mv.visitVarInsn(ASTORE, 3); }
From source file:formatasm.FormatASM.java
License:Open Source License
public static void formatHexidecimalASM(MethodVisitor mv, Spec spec) { mv.visitVarInsn(ALOAD, 1); mv.visitIntInsn(BIPUSH, spec.index); mv.visitInsn(AALOAD);//from w w w. j av a2s. c o m mv.visitTypeInsn(CHECKCAST, "java/lang/Integer"); mv.visitMethodInsn(INVOKESTATIC, "formatasm/FormatASM", "formatHexidecimal", "(Ljava/lang/Integer;)Ljava/lang/String;"); mv.visitVarInsn(ASTORE, 3); }
From source file:formatasm.FormatASM.java
License:Open Source License
public static void formatOctalASM(MethodVisitor mv, Spec spec) { mv.visitVarInsn(ALOAD, 1); mv.visitIntInsn(BIPUSH, spec.index); mv.visitInsn(AALOAD);//ww w . j a va2s . co m mv.visitTypeInsn(CHECKCAST, "java/lang/Integer"); mv.visitMethodInsn(INVOKESTATIC, "formatasm/FormatASM", "formatOctal", "(Ljava/lang/Integer;)Ljava/lang/String;"); mv.visitVarInsn(ASTORE, 3); }
From source file:formatasm.FormatASM.java
License:Open Source License
public static void appendTextASM(MethodVisitor mv) { mv.visitVarInsn(ALOAD, 2); mv.visitVarInsn(ALOAD, 3);//from www. ja va2 s . co m mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); mv.visitInsn(POP); }
From source file:formatasm.FormatASM.java
License:Open Source License
public static void toUpperCaseASM(MethodVisitor mv) { mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "toUpperCase", "()Ljava/lang/String;"); mv.visitVarInsn(ASTORE, 3);/*from ww w . ja v a 2s .c o m*/ }
From source file:formatasm.FormatASM.java
License:Open Source License
public static void addWidthASM(MethodVisitor mv, Spec spec) { mv.visitVarInsn(ALOAD, 2); mv.visitIntInsn(BIPUSH, spec.width); mv.visitVarInsn(ALOAD, 3);// ww w . ja v a 2 s . c o m mv.visitMethodInsn(INVOKESTATIC, "formatasm/FormatASM", "addWidth", "(Ljava/lang/StringBuilder;ILjava/lang/String;)V"); }