in analysis/jfr/src/main/java/org/eclipse/jifa/jfr/util/StackTraceUtil.java [33:86]
public static StackTrace build(RecordedStackTrace stackTrace, SymbolTable<SymbolBase> symbols) {
StackTrace result = new StackTrace();
result.setTruncated(stackTrace.isTruncated());
DescriptorUtil util = new DescriptorUtil();
List<RecordedFrame> srcFrames = stackTrace.getFrames();
Frame[] dstFrames = new Frame[srcFrames.size()];
for (int i = 0; i < srcFrames.size(); i++) {
RecordedFrame frame = srcFrames.get(i);
Frame dstFrame;
if (frame.isJavaFrame()) {
dstFrame = new JavaFrame();
((JavaFrame) dstFrame).setJavaFrame(frame.isJavaFrame());
((JavaFrame) dstFrame).setType(JavaFrame.Type.typeOf(frame.getType()));
((JavaFrame) dstFrame).setBci(frame.getBytecodeIndex());
} else {
dstFrame = new Frame();
}
RecordedMethod method = frame.getMethod();
JavaMethod dstMethod = new JavaMethod();
dstMethod.setPackageName(method.getType().getPackageName());
dstMethod.setType(method.getType().getName());
dstMethod.setName(method.getName());
dstMethod.setDescriptor(util.decodeMethodArgs(method.getDescriptor()));
dstMethod.setModifiers(method.getModifiers());
dstMethod.setHidden(method.isHidden());
if (symbols.isContains(dstMethod)) {
dstMethod = (JavaMethod) symbols.get(dstMethod);
} else {
symbols.put(dstMethod);
}
dstFrame.setMethod(dstMethod);
dstFrame.setLine(frame.getLineNumber());
if (symbols.isContains(dstFrame)) {
dstFrame = (Frame) symbols.get(dstFrame);
} else {
symbols.put(dstFrame);
}
dstFrames[i] = dstFrame;
}
result.setFrames(dstFrames);
if (symbols.isContains(result)) {
result = (StackTrace) symbols.get(result);
} else {
symbols.put(result);
}
return result;
}