package nebula.data.impl; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; class BrokerInstanceBuilderClassMaker implements Opcodes { private final static String interfaceName = BrokerInstanceBuilder.class.getName(); public byte[] dump(String brokerName,String builderName) { // String name = interfaceName +"_" + brokerName.replace('.', '_'); String brokerInnerName = brokerName.replace('.', '/'); String nameInner = builderName.replace('.', '/'); String interfaceInnerName = interfaceName.replace('.', '/'); ClassWriter cw = new ClassWriter(0); MethodVisitor mv; cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, nameInner, null, "java/lang/Object", new String[] { interfaceInnerName }); cw.visitSource(builderName, null); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC, "build", "()Ljava/lang/Object;", "<T:Ljava/lang/Object;>()TT;", null); mv.visitCode(); mv.visitTypeInsn(NEW, brokerInnerName); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, brokerInnerName, "<init>", "()V"); mv.visitInsn(ARETURN); mv.visitMaxs(2, 1); mv.visitEnd(); } cw.visitEnd(); return cw.toByteArray(); } }