code: public String parseNext() {
          StringBuilder result = new StringBuilder();
  
          if (signature.startsWith("[")) {
              int dimensions = 0;
              do {
                  ++dimensions;
                  signature = signature.substring(1);
              } while (signature.charAt(0) == '[');
              result.append(parseNext());
  
              while (dimensions-- > 0) {
                  result.append("[]");
              }
          } else if (signature.startsWith("L")) {
              int semi = signature.indexOf(';');
              if (semi < 0) {
                  throw new IllegalStateException("missing semicolon in signature " + signature);
              }
              result.append(signature.substring(1, semi).replace('/', '.'));
              signature = signature.substring(semi + 1);
          } else {
              switch (signature.charAt(0)) {
              case 'B':
                  result.append("byte");
                  break;
              case 'C':
                  result.append("char");
                  break;
              case 'D':
                  result.append("double");
                  break;
              case 'F':
                  result.append("float");
                  break;
              case 'I':
                  result.append("int");
                  break;
              case 'J':
                  result.append("long");
                  break;
              case 'S':
                  result.append("short");
                  break;
              case 'Z':
                  result.append("boolean");
                  break;
              case 'V':
                  result.append("void");
                  break;
              default:
                  throw new IllegalArgumentException("bad signature " + signature);
              }
              skip();
          }
  
          return result.toString();
      }
docs: Parse a single type out of the signature, starting at the beginning of
  the remaining part of the signature. For example, if the first character
  of the remaining part is "I", then this method will return "int", and the
  "I" will be consumed. Arrays, reference types, and basic types are all
  handled.
  
  @return the parsed type string