docs: private boolean readConstantPoolEntry(final DataInput di, final int index)
              throws IOException {
  
          final int tag = di.readUnsignedByte();
          switch (tag) {
              case CP_METHOD_TYPE:
                  di.skipBytes(2);  // readUnsignedShort()
                  return false;
              case CP_METHOD_HANDLE:
                  di.skipBytes(3);
                  return false;
              case CP_INTEGER:
              case CP_FLOAT:
              case CP_REF_FIELD:
              case CP_REF_METHOD:
              case CP_REF_INTERFACE:
              case CP_NAME_AND_TYPE:
              case CP_INVOKE_DYNAMIC:
                  di.skipBytes(4); // readInt() / readFloat() / readUnsignedShort() * 2
                  return false;
              case CP_LONG:
              case CP_DOUBLE:
                  di.skipBytes(8); // readLong() / readDouble()
                  return true;
              case CP_UTF8:
                  constantPool[index] = di.readUTF();
                  return false;
              case CP_CLASS:
              case CP_STRING:
                  // reference to CP_UTF8 entry. The referenced index can have a higher number!
                  constantPool[index] = di.readUnsignedShort();
                  return false;
              default:
                  throw new ClassFormatError(
                          "Unkown tag value for constant pool entry: " + tag);
          }
      }