fv = cw.visitField(ACC_PRIVATE + ACC_FINAL, "queue", sig(DISPATCH_QUEUE), null, null);
fv.visitEnd();
fv = cw.visitField(ACC_PRIVATE + ACC_FINAL, "target", sig(interfaceName), null, null);
fv.visitEnd();
mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(" + sig(interfaceName) + sig(DISPATCH_QUEUE) + ")V", null, null);
mv.visitFieldInsn(PUTFIELD, proxyName, "queue", sig(DISPATCH_QUEUE));
mv.visitFieldInsn(PUTFIELD, proxyName, "target", sig(interfaceName));
mv.visitLocalVariable("this", sig(proxyName), null, start, end, 0);
mv.visitLocalVariable("target", sig(interfaceName), null, start, end, 1);
mv.visitLocalVariable("queue", sig(DISPATCH_QUEUE), null, start, end, 2);
mv.visitMaxs(2, 3);
mv.visitLabel(start);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, proxyName, "queue", sig(DISPATCH_QUEUE));
mv.visitTypeInsn(NEW, runnable(index, methods[index]));
mv.visitInsn(DUP);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, proxyName, "target", sig(interfaceName));
mv.visitMethodInsn(INVOKESPECIAL, runnable(index, methods[index]), "<init>", "(" + sig(interfaceName) + sig(params) +")V");
mv.visitMethodInsn(INVOKEINTERFACE, DISPATCH_QUEUE, "execute", "(" + sig(RUNNABLE) + ")V");
mv.visitLocalVariable("this", sig(proxyName), null, start, end, 0);