List<DetectedRootData> () { Map<ProjectStructureDetector, List<DetectedProjectRoot>> roots = runDetectors(); if (myProgressIndicator != null) { myProgressIndicator.setText2(JavaUiBundle.message("progress.text.processing.0.project.roots", roots.values().size())); } Map<File, DetectedRootData> rootData = new LinkedHashMap<>(); for (ProjectStructureDetector detector : roots.keySet()) { for (DetectedProjectRoot detectedRoot : roots.get(detector)) { if (isUnderIncompatibleRoot(detectedRoot, rootData)) { continue; } final DetectedRootData data = rootData.get(detectedRoot.getDirectory()); if (data == null) { rootData.put(detectedRoot.getDirectory(), new DetectedRootData(detector, detectedRoot)); } else { detectedRoot = data.addRoot(detector, detectedRoot); } removeIncompatibleRoots(detectedRoot, rootData); } } List<DetectedRootData> dataCollection = mergeContentRoots(rootData); if (myProgressIndicator != null) { myProgressIndicator.setText2(""); } return dataCollection; }