in oap-server/server-library/library-async-profiler-jfr-parser/src/main/java/one/jfr/JFRConverter.java [156:199]
protected String toJavaClassName(byte[] symbol, int start) {
int end = symbol.length;
if (start > 0) {
switch (symbol[start]) {
case 'B':
return "byte";
case 'C':
return "char";
case 'S':
return "short";
case 'I':
return "int";
case 'J':
return "long";
case 'Z':
return "boolean";
case 'F':
return "float";
case 'D':
return "double";
case 'L':
start++;
end--;
}
}
// make signature normal
for (int i = end - 2; i > start; i--) {
if (symbol[i] == '/' || symbol[i] == '.') {
if (symbol[i + 1] >= '0' && symbol[i + 1] <= '9') {
end = i;
if (i > start + 19 && symbol[i - 19] == '+' && symbol[i - 18] == '0') {
// Original JFR transforms lambda names to something like
// pkg.ClassName$$Lambda+0x00007f8177090218/543846639
end = i - 19;
}
}
break;
}
}
String s = new String(symbol, start, end - start, StandardCharsets.UTF_8);
return s.replace('/', '.');
}