in analysis/heap-dump/impl/src/main/java/org/eclipse/jifa/hda/impl/HeapDumpAnalyzerImpl.java [410:464]
public PageView<Model.FieldView> getFields(int objectId, int page, int pageSize) {
return $(() -> {
ISnapshot snapshot = context.snapshot;
IObject object = snapshot.getObject(objectId);
PagingRequest pagingRequest = new PagingRequest(page, pageSize);
if (object instanceof IPrimitiveArray) {
List<Model.FieldView> fvs = new ArrayList<>();
IPrimitiveArray pa = (IPrimitiveArray) object;
int firstIndex = (pagingRequest.getPage() - 1) * pagingRequest.getPageSize();
int lastIndex = Math.min(firstIndex + pagingRequest.getPageSize(), pa.getLength());
for (int i = firstIndex; i < lastIndex; i++) {
fvs.add(new Model.FieldView(pa.getType(), "[" + i + "]", pa.getValueAt(i).toString()));
}
return new PageView<>(pagingRequest, pa.getLength(), fvs);
} else if (object instanceof IObjectArray) {
List<Model.FieldView> fvs = new ArrayList<>();
IObjectArray oa = (IObjectArray) object;
int firstIndex = (pagingRequest.getPage() - 1) * pagingRequest.getPageSize();
int lastIndex = Math.min(firstIndex + pagingRequest.getPageSize(), oa.getLength());
for (int i = firstIndex; i < lastIndex; i++) {
long[] refs = oa.getReferenceArray(i, 1);
int refObjectId = 0;
if (refs[0] != 0) {
refObjectId = snapshot.mapAddressToId(refs[0]);
}
String value = null;
if (refObjectId != 0) {
value = getObjectValue(snapshot.getObject(refObjectId));
}
fvs.add(new Model.FieldView(IObject.Type.OBJECT, "[" + i + "]", value, refObjectId));
}
return new PageView<>(pagingRequest, oa.getLength(), fvs);
}
List<Field> fields = new ArrayList<>();
boolean isClass = object instanceof IClass;
IClass clazz = isClass ? (IClass) object : object.getClazz();
if (object instanceof IInstance) {
fields.addAll(((IInstance) object).getFields());
} else if (object instanceof IClass) {
do {
List<Field> staticFields = clazz.getStaticFields();
for (Field staticField : staticFields) {
if (staticField.getName().startsWith("<")) {
fields.add(staticField);
}
}
} while ((clazz = clazz.getSuperClass()) != null);
}
return buildPageViewOfFields(fields, page, pageSize);
});
}