code: private Parser<Class<?>> arrayClass() {
      Parser<Class<?>> arrayType = FQN.next(name -> {
          // Only invoked when we already see a "[" at the beginning.
          Class<?> primitiveArray = PRIMITIVE_ARRAY_TYPES.get("[" + name);
          if (primitiveArray != null) return Parsers.constant(primitiveArray);
          if (name.startsWith("L") && name.endsWith(";")) {
            String className = name.substring(1, name.length() - 1);
            return Parsers.constant(Types.newArrayType(loadClass(className)));
          } else {
            return Parsers.expect("array class internal name");
          }
        });
      return TERMS.token("[") // must be an array internal format from this point on.
          .next(arrayType.prefix(TERMS.token("[").retn(Types::newArrayType)));
    }
docs: Parser for internal array class names such as {@code [Z}, {@code [[[Ljava.lang.String;} etc.
  
  <p>.java files can only use {@code int[]} format, not the internal format. But we have to
  be able to parse from internal format because {@link Type#toString} can produce it.