int addConstantNameAndType(final String name, final String descriptor) {
        final int tag = 12; // CONSTANT_NAME_AND_TYPE_TAG
        int hashCode = 0x7FFFFFFF & (tag + name.hashCode() * descriptor.hashCode());
        Symbol entry = entries[hashCode % entries.length];
        while (entry != null) {
            if (entry.tag == tag
                    && entry.hashCode == hashCode
                    && entry.name.equals(name)
                    && entry.value.equals(descriptor)) {
                return entry.index;
            }
            entry = entry.next;
        }
        constantPool.put122(tag, addConstantUtf8(name), addConstantUtf8(descriptor));
        return put(new Symbol(constantPoolCount++, tag, null, name, descriptor, 0, hashCode)).index;
    }
Adds a CONSTANT_NameAndType_info to the constant pool of this symbol table. Does nothing if the
constant pool already contains a similar item.

@param name       a field or method name.
@param descriptor a field or method descriptor.
@return a new or already existing Symbol with the given value.
core/src/main/java/com/alibaba/fastjson2/internal/asm/SymbolTable.java