public List referringObjects()

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