docs: static ClassRefTypeSignature parse(final Parser parser, final String definingClassName) throws ParseException {
          if (parser.peek() == 'L') {
              parser.next();
              if (!TypeUtils.getIdentifierToken(parser, /* separator = */ '/', /* separatorReplace = */ '.')) {
                  throw new ParseException(parser, "Could not parse identifier token");
              }
              final String className = parser.currToken();
              final List<TypeArgument> typeArguments = TypeArgument.parseList(parser, definingClassName);
              List<String> suffixes;
              List<List<TypeArgument>> suffixTypeArguments;
              if (parser.peek() == '.') {
                  suffixes = new ArrayList<>();
                  suffixTypeArguments = new ArrayList<>();
                  while (parser.peek() == '.') {
                      parser.expect('.');
                      if (!TypeUtils.getIdentifierToken(parser, /* separator = */ '/',
                              /* separatorReplace = */ '.')) {
                          throw new ParseException(parser, "Could not parse identifier token");
                      }
                      suffixes.add(parser.currToken());
                      suffixTypeArguments.add(TypeArgument.parseList(parser, definingClassName));
                  }
              } else {
                  suffixes = Collections.emptyList();
                  suffixTypeArguments = Collections.emptyList();
              }
              parser.expect(';');
              return new ClassRefTypeSignature(className, typeArguments, suffixes, suffixTypeArguments);
          } else {
              return null;
          }
      }