diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentEntryEditor.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentEntryEditor.java index 00e499a60699..fc44c49de1fa 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentEntryEditor.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentEntryEditor.java @@ -39,6 +39,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.EventListener; import java.util.List; +import java.util.Set; /** * @author Eugene Zhuravlev @@ -303,16 +304,18 @@ public abstract class ContentEntryEditor implements ContentRootPanel.ActionCallb public static boolean isExcludedOrUnderExcludedDirectory(@Nullable Project project, @NotNull ContentEntry entry, @NotNull VirtualFile file) { - List excludedFiles = ContainerUtil.newArrayList(entry.getExcludeFolderFiles()); + Set excludedFiles = ContainerUtil.newHashSet(entry.getExcludeFolderFiles()); if (project != null) { for (DirectoryIndexExcludePolicy policy : DirectoryIndexExcludePolicy.getExtensions(project)) { ContainerUtil.addAllNotNull(excludedFiles, policy.getExcludeRootsForProject()); } } - for (VirtualFile excludedFile : excludedFiles) { - if (VfsUtilCore.isAncestor(excludedFile, file, false)) { - return true; - } + Set sourceRoots = ContainerUtil.set(entry.getSourceFolderFiles()); + VirtualFile parent = file; + while (parent != null) { + if (excludedFiles.contains(parent)) return true; + if (sourceRoots.contains(parent)) return false; + parent = parent.getParent(); } return false; } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentRootPanel.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentRootPanel.java index 3028906a9df6..bcc687b28b98 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentRootPanel.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentRootPanel.java @@ -36,7 +36,6 @@ import com.intellij.ui.roots.IconActionComponent; import com.intellij.ui.roots.ResizingWrapper; import com.intellij.uiDesigner.core.GridConstraints; import com.intellij.uiDesigner.core.GridLayoutManager; -import com.intellij.util.NotNullProducer; import com.intellij.util.containers.MultiMap; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -108,14 +107,9 @@ public abstract class ContentRootPanel extends JPanel { final SourceFolder[] sourceFolders = getContentEntry().getSourceFolders(); MultiMap, SourceFolder> folderByType = new MultiMap<>(); for (SourceFolder folder : sourceFolders) { - if (folder.isSynthetic()) { - continue; + if (!folder.isSynthetic()) { + folderByType.putValue(folder.getRootType(), folder); } - final VirtualFile folderFile = folder.getFile(); - if (folderFile != null && isExcludedOrUnderExcludedDirectory(folderFile)) { - continue; - } - folderByType.putValue(folder.getRootType(), folder); } Insets insets = new Insets(0, 0, 10, 0);