// TODO Decide if it's worth going through the result to remove class names that don't actually
// exist in their notes. This happens when a Java class is renamed - Domino retains the old name
// in $ClassIndexItem for some reason
SortedSet<String> result = new TreeSet<String>();
NoteCollection notes = getNoteCollection(" @Contains($Flags; 'g') & @Contains($Flags; '[') ", EnumSet.of(SelectOption.MISC_FORMAT));
for (String noteId : notes) {
Document doc = getAncestorDatabase().getDocumentByID(noteId);
for (Object pathName : doc.getItemValue("$ClassIndexItem")) {
if (pathName != null && String.valueOf(pathName).startsWith("WEB-INF/classes/")) {
result.add(DominoUtils.filePathToJavaBinaryName(((String) pathName).substring(16), "/"));