in analysis/jfr/src/main/java/org/eclipse/jifa/jfr/model/jfr/RecordedEvent.java [64:171]
private void init(SymbolTable<SymbolBase> symbols) {
IMCThread imcThread = getValue("eventThread");
if (imcThread == null) {
imcThread = getValue("sampledThread");
}
if (imcThread != null) {
thread = new RecordedThread(imcThread);
}
Object value = getValue("startTime");
if (value instanceof IQuantity) {
IQuantity v = (IQuantity) value;
startTime = toNanos(v, UnitLookup.EPOCH_NS);
}
IType<IItem> itemType = ItemToolkit.getItemType(item);
String itemTypeId = itemType.getIdentifier();
// fix for JDK Mission Control lib
if ((itemTypeId.startsWith(EventConstant.EXECUTION_SAMPLE) && !itemTypeId.equals(EventConstant.EXECUTION_SAMPLE))) {
itemTypeId = EventConstant.EXECUTION_SAMPLE;
} else if (itemTypeId.startsWith(EventConstant.OBJECT_ALLOCATION_OUTSIDE_TLAB)
&& !itemTypeId.equals(EventConstant.OBJECT_ALLOCATION_OUTSIDE_TLAB)) {
itemTypeId = EventConstant.OBJECT_ALLOCATION_OUTSIDE_TLAB;
} else if (itemTypeId.startsWith(EventConstant.OBJECT_ALLOCATION_IN_NEW_TLAB)
&& !itemTypeId.equals(EventConstant.OBJECT_ALLOCATION_IN_NEW_TLAB)) {
itemTypeId = EventConstant.OBJECT_ALLOCATION_IN_NEW_TLAB;
}
this.eventType = new EventType(itemTypeId);
IMCStackTrace s = getValue("stackTrace");
if (s != null) {
List<? extends IMCFrame> frames = s.getFrames();
RecordedStackTrace st = new RecordedStackTrace();
List<RecordedFrame> list = new ArrayList<>();
frames.forEach(frame -> {
IMCMethod method = frame.getMethod();
RecordedMethod m = new RecordedMethod();
m.setDescriptor(method.getFormalDescriptor());
m.setModifiers(method.getModifier() == null ? 0 : method.getModifier());
IMCType type = method.getType();
RecordedClass c = new RecordedClass();
c.setName(type.getTypeName());
c.setPackageName(type.getPackage().getName());
if (symbols.isContains(c)) {
c = (RecordedClass) symbols.get(c);
} else {
symbols.put(c);
}
m.setType(c);
m.setName(method.getMethodName());
if (symbols.isContains(m)) {
m = (RecordedMethod) symbols.get(m);
} else {
symbols.put(m);
}
RecordedFrame f = new RecordedFrame();
f.setMethod(m);
f.setBytecodeIndex(frame.getBCI());
f.setType(frame.getType().getName());
if (symbols.isContains(f)) {
f = (RecordedFrame) symbols.get(f);
} else {
symbols.put(f);
}
list.add(f);
});
st.setFrames(list);
if (symbols.isContains(st)) {
st = (RecordedStackTrace) symbols.get(st);
} else {
symbols.put(st);
}
stackTrace = st;
}
if (ACTIVE_SETTING.equals(itemType.getIdentifier())) {
String eventName = null;
long eventId = -1;
String settingName = null;
for (Map.Entry<IAccessorKey<?>, ? extends IDescribable> entry : itemType.getAccessorKeys().entrySet()) {
if (entry.getKey().getIdentifier().equals("settingFor")) {
IMemberAccessor<?, IItem> accessor = itemType.getAccessor(entry.getKey());
LabeledIdentifier id = (LabeledIdentifier) accessor.getMember(item);
eventName = id.getInterfaceId();
eventId = id.getImplementationId();
continue;
}
if (entry.getKey().getIdentifier().equals("name")) {
IMemberAccessor<?, IItem> accessor = itemType.getAccessor(entry.getKey());
settingName = (String) accessor.getMember(item);
}
if (eventName != null && settingName != null && eventId >= 0) {
break;
}
}
if (eventName != null && settingName != null && eventId >= 0) {
this.activeSetting = new ActiveSetting(eventName, eventId, settingName);
}
}
}