package nebula.simpletemplate;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
public class TestCodeMapDump implements Opcodes {
public static byte[] dump() throws Exception {
ClassWriter cw = new ClassWriter(0);
FieldVisitor fv;
MethodVisitor mv;
cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, "nebula/simpletemplate/TestCodeMap", null, "java/lang/Object", new String[] { "nebula/simpletemplate/Action" });
cw.visitSource("TestCodeMap.java", null);
{
fv = cw.visitField(0, "tempalte1LeadingClass", "Ljava/lang/Class;", "Ljava/lang/Class<*>;", null);
fv.visitEnd();
}
{
fv = cw.visitField(0, "template1Action", "Lnebula/simpletemplate/Action;", null, null);
fv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(8, l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
mv.visitInsn(RETURN);
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLocalVariable("this", "Lnebula/simpletemplate/TestCodeMap;", null, l0, l1, 0);
mv.visitMaxs(1, 1);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PUBLIC, "exec",
"(Lnebula/simpletemplate/STGroup;Lnebula/simpletemplate/TemplateImpl;Ljava/lang/StringBuilder;[Ljava/lang/Object;)V", null,
new String[] { "java/io/IOException" });
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(17, l0);
mv.visitVarInsn(ALOAD, 4);
mv.visitInsn(ICONST_0);
mv.visitInsn(AALOAD);
mv.visitVarInsn(ASTORE, 5);
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLineNumber(18, l1);
mv.visitVarInsn(ALOAD, 5);
Label _gotoAllEnd = new Label();
Label _gotoNULL = new Label();
mv.visitJumpInsn(IFNULL, _gotoNULL);// if (o != null) {
{
// // if (tempalte1LeadingClass == o.getClass()) {
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, "nebula/simpletemplate/TestCodeMap", "tempalte1LeadingClass", "Ljava/lang/Class;");
mv.visitVarInsn(ALOAD, 5);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
Label _gotoNotEq = new Label();
mv.visitJumpInsn(IF_ACMPNE, _gotoNotEq);
{
{ // call template1Action.exec(group, template, out, argv);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, "nebula/simpletemplate/TestCodeMap", "template1Action", "Lnebula/simpletemplate/Action;");
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 2);
mv.visitVarInsn(ALOAD, 3);
mv.visitVarInsn(ALOAD, 4);
mv.visitMethodInsn(INVOKEINTERFACE, "nebula/simpletemplate/Action", "exec",
"(Lnebula/simpletemplate/STGroup;Lnebula/simpletemplate/TemplateImpl;Ljava/lang/StringBuilder;[Ljava/lang/Object;)V");
}
mv.visitJumpInsn(GOTO, _gotoAllEnd);
}
mv.visitLabel(_gotoNotEq); // else
{
// template1Action = template.get(Void.class.getName(),
// Void.class);
{
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 2);
mv.visitLdcInsn(Type.getType("Ljava/lang/Void;"));
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getName", "()Ljava/lang/String;");
mv.visitInsn(ICONST_1);
mv.visitTypeInsn(ANEWARRAY, "java/lang/Object");
mv.visitInsn(DUP);
mv.visitInsn(ICONST_0);
mv.visitLdcInsn(Type.getType("Ljava/lang/Void;"));
mv.visitInsn(AASTORE);
mv.visitMethodInsn(INVOKEVIRTUAL, "nebula/simpletemplate/TemplateImpl", "get",
"(Ljava/lang/String;[Ljava/lang/Object;)Lnebula/simpletemplate/Action;");
mv.visitFieldInsn(PUTFIELD, "nebula/simpletemplate/TestCodeMap", "template1Action", "Lnebula/simpletemplate/Action;");
}
{// tempalte1LeadingClass = Void.class;
mv.visitVarInsn(ALOAD, 0);
mv.visitLdcInsn(Type.getType("Ljava/lang/Void;"));
mv.visitFieldInsn(PUTFIELD, "nebula/simpletemplate/TestCodeMap", "tempalte1LeadingClass", "Ljava/lang/Class;");
}
{// template1Action.exec(group, template, out, argv);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, "nebula/simpletemplate/TestCodeMap", "template1Action", "Lnebula/simpletemplate/Action;");
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 2);
mv.visitVarInsn(ALOAD, 3);
mv.visitVarInsn(ALOAD, 4);
mv.visitMethodInsn(INVOKEINTERFACE, "nebula/simpletemplate/Action", "exec",
"(Lnebula/simpletemplate/STGroup;Lnebula/simpletemplate/TemplateImpl;Ljava/lang/StringBuilder;[Ljava/lang/Object;)V");
}
mv.visitJumpInsn(GOTO, _gotoAllEnd);
}
}
mv.visitLabel(_gotoNULL);
{
// if (tempalte1LeadingClass == Void.class) {
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, "nebula/simpletemplate/TestCodeMap", "tempalte1LeadingClass", "Ljava/lang/Class;");
mv.visitLdcInsn(Type.getType("Ljava/lang/Void;"));
Label _notEq = new Label();
mv.visitJumpInsn(IF_ACMPNE, _notEq);
{
{
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, "nebula/simpletemplate/TestCodeMap", "template1Action", "Lnebula/simpletemplate/Action;");
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 2);
mv.visitVarInsn(ALOAD, 3);
mv.visitVarInsn(ALOAD, 4);
mv.visitMethodInsn(INVOKEINTERFACE, "nebula/simpletemplate/Action", "exec",
"(Lnebula/simpletemplate/STGroup;Lnebula/simpletemplate/TemplateImpl;Ljava/lang/StringBuilder;[Ljava/lang/Object;)V");
}
mv.visitJumpInsn(GOTO, _gotoAllEnd);
}
mv.visitLabel(_notEq);
mv.visitLineNumber(30, _notEq);
{
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 5);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
mv.visitFieldInsn(PUTFIELD, "nebula/simpletemplate/TestCodeMap", "tempalte1LeadingClass", "Ljava/lang/Class;");
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 2);
mv.visitVarInsn(ALOAD, 5);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getName", "()Ljava/lang/String;");
mv.visitInsn(ICONST_1);
mv.visitTypeInsn(ANEWARRAY, "java/lang/Object");
mv.visitInsn(DUP);
mv.visitInsn(ICONST_0);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, "nebula/simpletemplate/TestCodeMap", "tempalte1LeadingClass", "Ljava/lang/Class;");
mv.visitInsn(AASTORE);
mv.visitMethodInsn(INVOKEVIRTUAL, "nebula/simpletemplate/TemplateImpl", "get",
"(Ljava/lang/String;[Ljava/lang/Object;)Lnebula/simpletemplate/Action;");
{
mv.visitFieldInsn(PUTFIELD, "nebula/simpletemplate/TestCodeMap", "template1Action", "Lnebula/simpletemplate/Action;");
}
{
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, "nebula/simpletemplate/TestCodeMap", "template1Action", "Lnebula/simpletemplate/Action;");
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 2);
mv.visitVarInsn(ALOAD, 3);
mv.visitVarInsn(ALOAD, 4);
mv.visitMethodInsn(INVOKEINTERFACE, "nebula/simpletemplate/Action", "exec",
"(Lnebula/simpletemplate/STGroup;Lnebula/simpletemplate/TemplateImpl;Ljava/lang/StringBuilder;[Ljava/lang/Object;)V");
}
}
}
mv.visitMaxs(7, 6);
mv.visitEnd();
}
cw.visitEnd();
return cw.toByteArray();
}
}