VirtualFile (@NotNull List<? extends VirtualFile> hierarchy) { Collection<Module> sourceRootOwners = null; boolean underExcludedSourceRoot = false; for (VirtualFile root : hierarchy) { Module module = contentRootOf.get(root); Module excludedFrom = excludedFromModule.get(root); if (module != null) { FileTypeAssocTable<Boolean> table = excludeFromContentRootTables.get(root); if (table != null && isExcludedByPattern(root, hierarchy, table)) { excludedFrom = module; } } if (module != null && (excludedFrom != module || underExcludedSourceRoot && sourceRootOwners.contains(module))) { return root; } if (excludedFrom != null || excludedFromProject.contains(root) || contentRootOfUnloaded.containsKey(root)) { if (sourceRootOwners == null) { return null; } underExcludedSourceRoot = true; } if (!underExcludedSourceRoot && sourceRootOf.containsKey(root)) { Collection<Module> modulesForSourceRoot = sourceRootOf.get(root); if (!modulesForSourceRoot.isEmpty()) { sourceRootOwners = sourceRootOwners == null ? modulesForSourceRoot : ContainerUtil.union(sourceRootOwners, modulesForSourceRoot); } } } return null; }