public void visitLabel(final Label label) {
        // Resolve the forward references to this label, if any.
        hasAsmInstructions |= label.resolve(code.data, code.length);
        // visitLabel starts a new basic block (except for debug only labels), so we need to update the
        // previous and current block references and list of successors.
        if ((label.flags & Label.FLAG_DEBUG_ONLY) != 0) {
            return;
        }

        if (currentBasicBlock != null) {
            if (label.bytecodeOffset == currentBasicBlock.bytecodeOffset) {
                // We use {@link Label#getCanonicalInstance} to store the state of a basic block in only
                // one place, but this does not work for labels which have not been visited yet.
                // Therefore, when we detect here two labels having the same bytecode offset, we need to
                // - consolidate the state scattered in these two instances into the canonical instance:
                currentBasicBlock.flags |= (label.flags & Label.FLAG_JUMP_TARGET);
                // - make sure the two instances share the same Frame instance (the implementation of
                // {@link Label#getCanonicalInstance} relies on this property; here label.frame should be
                // null):
                label.frame = currentBasicBlock.frame;
                // - and make sure to NOT assign 'label' into 'currentBasicBlock' or 'lastBasicBlock', so
                // that they still refer to the canonical instance for this bytecode offset.
                return;
            }
            // End the current basic block (with one new successor).
            addSuccessorToCurrentBasicBlock(label);
        }
        // Append 'label' at the end of the basic block list.
        if (lastBasicBlock != null) {
            if (label.bytecodeOffset == lastBasicBlock.bytecodeOffset) {
                // Same comment as above.
                lastBasicBlock.flags |= (label.flags & Label.FLAG_JUMP_TARGET);
                // Here label.frame should be null.
                label.frame = lastBasicBlock.frame;
                currentBasicBlock = lastBasicBlock;
                return;
            }
            lastBasicBlock.nextBasicBlock = label;
        }
        lastBasicBlock = label;
        // Make it the new current basic block.
        currentBasicBlock = label;
        // Here label.frame should be null.
        label.frame = new Frame(label);
    }
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