in compatibility-8/src/com/jetbrains/sa/jdi/CompatibilityHelper8.java [122:148]
public List<ReferenceTypeImpl> visibleClasses(final Oop ref, final VirtualMachineImpl vm) {
final List<ReferenceTypeImpl> res = new ArrayList<>();
// 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((k, 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((k, 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(k -> res.add(vm.referenceType(k)));
return res;
}