@Override
    public void visitEnd() {
	boolean hasDummy = dummyArgument != 0;
	String callerMethodDescriptor = hasDummy ? methodDescriptor.replace("I)", ")") : methodDescriptor;
	Type[] argumentTypes = Type.getArgumentTypes(methodDescriptor);
	MethodVisitor methodVisitor = cv.visitMethod(Opcodes.ACC_PUBLIC, callerMethodName, callerMethodDescriptor, null, null);
	methodVisitor.visitCode();
	methodVisitor.visitVarInsn(Opcodes.ALOAD, 0);
	for (int i = 0; i < argumentTypes.length - (hasDummy ? 1 : 0); i++) {
	    methodVisitor.visitVarInsn(argumentTypes[i].getOpcode(Opcodes.ILOAD), i + 1);
	}
	if (hasDummy) {
	    methodVisitor.visitLdcInsn(dummyArgument);
	}
	methodVisitor.visitMethodInsn(isStatic ? Opcodes.INVOKESTATIC : Opcodes.INVOKEVIRTUAL, ownerName, methodName, methodDescriptor);
	methodVisitor.visitInsn(Type.getReturnType(methodDescriptor).getOpcode(Opcodes.IRETURN));
	methodVisitor.visitMaxs(0, 0);
	methodVisitor.visitEnd();
	cv.visitEnd();
    }