public List visibleClasses()

in core/src/main/java/com/jetbrains/sa/jdi/CompatibilityHelper6.java [125:165]


    public List<ReferenceTypeImpl> visibleClasses(final Oop ref, final VirtualMachineImpl vm) {
        final List<ReferenceTypeImpl> res = new ArrayList<ReferenceTypeImpl>();

        // refer to getClassLoaderClasses in jvmtiGetLoadedClasses.cpp
        //  a. SystemDictionary::classes_do doesn't include arrays of primitive types (any dimensions)
        SystemDictionary sysDict = vm.saSystemDictionary();
        sysDict.classesDo(
                new SystemDictionary.ClassAndLoaderVisitor() {
                    public void visit(Klass k, Oop loader) {
                        if (ref.equals(loader)) {
                            for (Klass l = k; l != null; l = l.arrayKlassOrNull()) {
                                res.add(vm.referenceType(l));
                            }
                        }
                    }
                }
        );

        // b. multi dimensional arrays of primitive types
        sysDict.primArrayClassesDo(
                new SystemDictionary.ClassAndLoaderVisitor() {
                    public void visit(Klass k, Oop loader) {
                        if (ref.equals(loader)) {
                            res.add(vm.referenceType(k));
                        }
                    }
                }
        );

        // c. single dimensional primitive array klasses from Universe
        // these are not added to SystemDictionary
        vm.saUniverse().basicTypeClassesDo(
                new SystemDictionary.ClassVisitor() {
                    public void visit(Klass k) {
                        res.add(vm.referenceType(k));
                    }
                }
        );

        return res;
    }