in core/src/main/java/org/adoptopenjdk/jitwatch/util/ParseUtil.java [686:774]
public static List<String> parseTypeString(final String typesString)
{
List<String> result = new ArrayList<>();
String toParse = typesString.replace(C_SLASH, C_DOT);
int pos = 0;
StringBuilder builder = new StringBuilder();
final int stringLen = toParse.length();
while (pos < stringLen)
{
char c = toParse.charAt(pos);
switch (c)
{
case C_OPEN_SQUARE_BRACKET:
// Could be
// [Ljava.lang.String; Object array
// [I primitive array
// [..[I multidimensional primitive array
// [..[Ljava.lang.String multidimensional Object array
builder.delete(0, builder.length());
builder.append(c);
pos++;
c = toParse.charAt(pos);
while (c == C_OPEN_SQUARE_BRACKET)
{
builder.append(c);
pos++;
c = toParse.charAt(pos);
}
if (c == C_OBJECT_REF)
{
// array of ref type
while (pos < stringLen)
{
c = toParse.charAt(pos++);
builder.append(c);
if (c == C_SEMICOLON)
{
break;
}
}
}
else
{
// array of primitive
builder.append(c);
pos++;
}
result.add(builder.toString());
builder.delete(0, builder.length());
break;
case C_OBJECT_REF:
// ref type
while (pos < stringLen - 1)
{
pos++;
c = toParse.charAt(pos);
if (c == C_SEMICOLON)
{
pos++;
break;
}
builder.append(c);
}
result.add(builder.toString());
builder.delete(0, builder.length());
break;
default:
// primitive
result.add(Character.toString(c));
pos++;
} // end switch
} // end while
return result;
}