package com.intellij.openapi.roots.ui.configuration;
+import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.roots.*;
+import com.intellij.openapi.roots.impl.DirectoryIndexExcludePolicy;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.EventDispatcher;
+import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.JpsElement;
}
public boolean isExcludedOrUnderExcludedDirectory(@NotNull final VirtualFile file) {
+ Project project = getModel().getProject();
final ContentEntry contentEntry = getContentEntry();
if (contentEntry == null) {
return false;
}
- for (VirtualFile excludedDir : contentEntry.getExcludeFolderFiles()) {
- if (VfsUtilCore.isAncestor(excludedDir, file, false)) {
+ return isExcludedOrUnderExcludedDirectory(project, contentEntry, file);
+ }
+
+ public static boolean isExcludedOrUnderExcludedDirectory(@NotNull Project project,
+ @NotNull ContentEntry entry,
+ @NotNull VirtualFile file) {
+ List<VirtualFile> excludedFiles = ContainerUtil.newArrayList(entry.getExcludeFolderFiles());
+ for (DirectoryIndexExcludePolicy policy : DirectoryIndexExcludePolicy.getExtensions(project)) {
+ ContainerUtil.addAllNotNull(excludedFiles, policy.getExcludeRootsForProject());
+ }
+ for (VirtualFile excludedFile : excludedFiles) {
+ if (VfsUtilCore.isAncestor(excludedFile, file, false)) {
return true;
}
}
}
protected Icon updateIcon(final ContentEntry entry, final VirtualFile file, Icon originalIcon) {
- for (VirtualFile excludePath : entry.getExcludeFolderFiles()) {
- if (VfsUtilCore.isAncestor(excludePath, file, false)) {
- return AllIcons.Modules.ExcludeRoot;
- }
+ if (ContentEntryEditor.isExcludedOrUnderExcludedDirectory(myTreeEditor.getProject(), entry, file)) {
+ return AllIcons.Modules.ExcludeRoot;
}
final SourceFolder[] sourceFolders = entry.getSourceFolders();
import com.intellij.ide.util.treeView.AbstractTreeStructure;
import com.intellij.ide.util.treeView.NodeDescriptor;
import com.intellij.idea.ActionsBundle;
-import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.actionSystem.CustomShortcutSet;
+import com.intellij.openapi.actionSystem.DataProvider;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
+import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.actionSystem.ex.CustomComponentAction;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
return myContentEntryEditor;
}
+ @NotNull
+ public Project getProject() {
+ return myProject;
+ }
+
public JComponent createComponent() {
createEditingActions();
return myTreePanel;
package com.intellij.openapi.roots.impl;
+import com.intellij.openapi.extensions.AreaInstance;
import com.intellij.openapi.extensions.ExtensionPointName;
+import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.roots.ModuleRootModel;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.pointers.VirtualFilePointer;
@NotNull
VirtualFilePointer[] getExcludeRootsForModule(@NotNull ModuleRootModel rootModel);
+
+ @NotNull
+ static DirectoryIndexExcludePolicy[] getExtensions(@NotNull AreaInstance areaInstance) {
+ return Extensions.getExtensions(EP_NAME, areaInstance);
+ }
}