@NonNls
    String getSignature() {
      if (eof()) return "";

      switch (get()) {
        case 'Z' -> {
          return "boolean";
        }
        case 'B' -> {
          return "byte";
        }
        case 'C' -> {
          return "char";
        }
        case 'S' -> {
          return "short";
        }
        case 'I' -> {
          return "int";
        }
        case 'J' -> {
          return "long";
        }
        case 'F' -> {
          return "float";
        }
        case 'D' -> {
          return "double";
        }
        case 'V' -> {
          return "void";
        }
        case 'L' -> {
          int start = pos;
          pos = buffer.indexOf(';', start) + 1;
          LOG.assertTrue(pos > 0);
          return buffer.substring(start, pos - 1).replace('/', '.');
        }
        case '[' -> {
          return getSignature() + "[]";
        }
        case '(' -> {
          StringBuilder result = new StringBuilder("(");
          String separator = "";
          while (peek() != ')') {
            result.append(separator);
            result.append(getSignature());
            separator = ", ";
          }
          get();
          result.append(")");
          return getSignature() + " " + getClassName() + "." + getMethodName() + " " + result;
        }
        default -> {
          //          LOG.assertTrue(false, "unknown signature " + buffer);
          return null;
        }
      }
    }
@NonNls
    String getSignature()