code: Item newHandleItem(final int tag, final String owner, final String name,
              final String desc, final boolean itf) {
          key4.set(HANDLE_BASE + tag, owner, name, desc);
          Item result = get(key4);
          if (result == null) {
              if (tag <= Opcodes.H_PUTSTATIC) {
                  put112(HANDLE, tag, newField(owner, name, desc));
              } else {
                  put112(HANDLE,
                          tag,
                          newMethod(owner, name, desc, itf));
              }
              result = new Item(index++, key4);
              put(result);
          }
          return result;
      }
docs: Adds a handle to the constant pool of the class being build. Does nothing
  if the constant pool already contains a similar item. <i>This method is
  intended for {@link Attribute} sub classes, and is normally not needed by
  class generators or adapters.</i>
  
  @param tag
  the kind of this handle. Must be {@link Opcodes#H_GETFIELD},
  {@link Opcodes#H_GETSTATIC}, {@link Opcodes#H_PUTFIELD},
  {@link Opcodes#H_PUTSTATIC}, {@link Opcodes#H_INVOKEVIRTUAL},
  {@link Opcodes#H_INVOKESTATIC},
  {@link Opcodes#H_INVOKESPECIAL},
  {@link Opcodes#H_NEWINVOKESPECIAL} or
  {@link Opcodes#H_INVOKEINTERFACE}.
  @param owner
  the internal name of the field or method owner class.
  @param name
  the name of the field or method.
  @param desc
  the descriptor of the field or method.
  @param itf
  true if the owner is an interface.
  @return a new or an already existing method type reference item.