void (@NotNull ProgressIndicator indicator) { try { for (VirtualFile rootCandidate : rootCandidates) { final Collection<DetectedLibraryRoot> roots = detector.detectRoots(rootCandidate, indicator); if (!roots.isEmpty() && allRootsHaveOneTypeAndEqualToOrAreDirectParentOf(roots, rootCandidate)) { for (DetectedLibraryRoot root : roots) { final LibraryRootType libraryRootType = root.getTypes().get(0); result.add(new OrderRoot(root.getFile(), libraryRootType.getType(), libraryRootType.isJarDirectory())); } } else { for (DetectedLibraryRoot root : roots) { final HashMap<LibraryRootType, String> names = new HashMap<>(); for (LibraryRootType type : root.getTypes()) { final String typeName = detector.getRootTypeName(type); LOG.assertTrue(typeName != null, "Unexpected root type " + type.getType().name() + (type.isJarDirectory() ? " (JAR directory)" : "") + ", detectors: " + detector); names.put(type, typeName); } suggestedRoots.add(new SuggestedChildRootInfo(rootCandidate, root, names)); } } } } catch (ProcessCanceledException ignored) { } }