in core/src/main/java/com/jetbrains/sa/jdi/ObjectReferenceImpl.java [149:189]
public List<ObjectReferenceImpl> referringObjects(long maxReferrers) {
if (!vm().canGetInstanceInfo()) {
throw new UnsupportedOperationException("target does not support getting instances");
}
if (maxReferrers < 0) {
throw new IllegalArgumentException("maxReferrers is less than zero: " + maxReferrers);
}
final OopHandle thisHandle = saObject.getHandle();
final List<ObjectReferenceImpl> objects = new ArrayList<ObjectReferenceImpl>(0);
final long max = maxReferrers;
vm().saObjectHeap().iterate(new DefaultHeapVisitor() {
private long refCount = 0;
public boolean doObj(Oop oop) {
try {
final ObjectReferenceImpl objref = vm().objectMirror(oop);
objref.visitReferences(new HandleVisitor() {
@Override
public boolean visit(OopHandle handle) {
if (thisHandle.equals(handle)) {
objects.add(objref);
refCount++;
return true;
}
return false;
}
});
if (max > 0 && refCount >= max) {
return true;
}
} catch (RuntimeException x) {
// Ignore RuntimeException thrown from vm().objectMirror(oop)
// for bad oop. It is possible to see some bad oop
// because heap might be iterating at no safepoint.
}
return false;
}
});
return objects;
}