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