public PageView getFields()

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);

        });
    }