private void visitMethodInsn(
            final int opcode,
            final String owner,
            final String name,
            final String descriptor,
            final boolean isInterface) {
        lastBytecodeOffset = code.length;
        // Add the instruction to the bytecode of the method.
        Symbol methodrefSymbol = symbolTable.addConstantMemberReference(
                isInterface ? /*CONSTANT_INTERFACE_METHODREF_TAG*/ 11 : /*CONSTANT_METHODREF_TAG*/ 10,
                owner,
                name,
                descriptor
        );
        if (opcode == Opcodes.INVOKEINTERFACE) {
            code.put12(Opcodes.INVOKEINTERFACE, methodrefSymbol.index)
                    .put11(methodrefSymbol.getArgumentsAndReturnSizes() >> 2, 0);
        } else {
            code.put12(opcode, methodrefSymbol.index);
        }
        // If needed, update the maximum stack size and number of locals, and stack map frames.
        if (currentBasicBlock != null) {
            currentBasicBlock.frame.execute(opcode, 0, methodrefSymbol, symbolTable);
        }
    }
Constructs a new {@link MethodWriter}.

@param symbolTable where the constants used in this AnnotationWriter must be stored.
@param access      the method's access flags (see {@link Opcodes}).
@param name        the method's name.
@param descriptor  the method's descriptor (see {@link Type}).
core/src/main/java/com/alibaba/fastjson2/internal/asm/MethodWriter.java