mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Provide a way to exclude directories under project sdk roots
This commit is contained in:
+5
@@ -33,6 +33,11 @@ public interface DirectoryIndexExcludePolicy {
|
||||
@NotNull
|
||||
VirtualFile[] getExcludeRootsForProject();
|
||||
|
||||
@NotNull
|
||||
default VirtualFile[] getExcludeRootsForProjectSdk() {
|
||||
return VirtualFile.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
VirtualFilePointer[] getExcludeRootsForModule(@NotNull ModuleRootModel rootModel);
|
||||
|
||||
|
||||
@@ -204,6 +204,7 @@ public class RootIndex {
|
||||
}
|
||||
for (DirectoryIndexExcludePolicy policy : Extensions.getExtensions(DirectoryIndexExcludePolicy.EP_NAME, project)) {
|
||||
info.excludedFromProject.addAll(ContainerUtil.filter(policy.getExcludeRootsForProject(), file -> ensureValid(file, policy)));
|
||||
info.excludedFromProjectSdk.addAll(ContainerUtil.filter(policy.getExcludeRootsForProjectSdk(), file -> ensureValid(file, policy)));
|
||||
}
|
||||
for (UnloadedModuleDescription description : moduleManager.getUnloadedModuleDescriptions()) {
|
||||
for (VirtualFilePointer pointer : description.getContentRoots()) {
|
||||
@@ -641,6 +642,7 @@ public class RootIndex {
|
||||
@NotNull final MultiMap<VirtualFile, Library> classOfLibraries = MultiMap.createSmart();
|
||||
@NotNull final MultiMap<VirtualFile, /*Library|SyntheticLibrary*/ Object> sourceOfLibraries = MultiMap.createSmart();
|
||||
@NotNull final Set<VirtualFile> excludedFromProject = ContainerUtil.newHashSet();
|
||||
@NotNull final Set<VirtualFile> excludedFromProjectSdk = ContainerUtil.newHashSet();
|
||||
@NotNull final Map<VirtualFile, Module> excludedFromModule = ContainerUtil.newHashMap();
|
||||
@NotNull final Map<VirtualFile, FileTypeAssocTable<Boolean>> excludeFromContentRootTables = ContainerUtil.newHashMap();
|
||||
@NotNull final Map<VirtualFile, String> packagePrefix = ContainerUtil.newHashMap();
|
||||
@@ -654,6 +656,7 @@ public class RootIndex {
|
||||
result.addAll(excludedFromLibraries.keySet());
|
||||
result.addAll(excludedFromModule.keySet());
|
||||
result.addAll(excludedFromProject);
|
||||
result.addAll(excludedFromProjectSdk);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -862,7 +865,9 @@ public class RootIndex {
|
||||
Pair<VirtualFile, Collection<Object>> libraryClassRootInfo = info.findLibraryRootInfo(hierarchy, false);
|
||||
VirtualFile libraryClassRoot = libraryClassRootInfo != null ? libraryClassRootInfo.first : null;
|
||||
|
||||
boolean inProject = moduleContentRoot != null || libraryClassRoot != null || librarySourceRoot != null;
|
||||
boolean inProject = moduleContentRoot != null ||
|
||||
( (libraryClassRoot != null || librarySourceRoot != null) && !info.excludedFromProjectSdk.contains(root));
|
||||
|
||||
VirtualFile nearestContentRoot;
|
||||
if (inProject) {
|
||||
nearestContentRoot = moduleContentRoot;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.jetbrains.python;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -30,11 +31,13 @@ import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author traff
|
||||
*/
|
||||
public class PyDirectoryIndexExcludePolicy implements DirectoryIndexExcludePolicy {
|
||||
private final static String[] SITE_PACKAGES = new String[]{"site-packages", "dist-packages"};
|
||||
|
||||
private final Project myProject;
|
||||
|
||||
@@ -53,13 +56,24 @@ public class PyDirectoryIndexExcludePolicy implements DirectoryIndexExcludePolic
|
||||
}
|
||||
}
|
||||
|
||||
return result.toArray(new VirtualFile[result.size()]);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public VirtualFile[] getExcludeRootsForProjectSdk() {
|
||||
List<VirtualFile> result = Lists.newArrayList();
|
||||
|
||||
for (Module m : ModuleManager.getInstance(myProject).getModules()) {
|
||||
Sdk sdk = PythonSdkType.findPythonSdk(m);
|
||||
if (sdk != null) {
|
||||
Set<VirtualFile> roots = Sets.newHashSet(sdk.getRootProvider().getFiles(OrderRootType.CLASSES));
|
||||
for (VirtualFile dir : sdk.getRootProvider().getFiles(OrderRootType.CLASSES)) {
|
||||
VirtualFile sitePackages = dir.findChild("site-packages");
|
||||
if (sitePackages != null) {
|
||||
result.add(sitePackages);
|
||||
for (String name : SITE_PACKAGES) {
|
||||
VirtualFile sitePackages = dir.findChild(name);
|
||||
if (sitePackages != null && !roots.contains(sitePackages)) {
|
||||
result.add(sitePackages);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -71,8 +85,8 @@ public class PyDirectoryIndexExcludePolicy implements DirectoryIndexExcludePolic
|
||||
@NotNull
|
||||
@Override
|
||||
public VirtualFilePointer[] getExcludeRootsForModule(@NotNull ModuleRootModel rootModel) {
|
||||
|
||||
|
||||
|
||||
|
||||
return VirtualFilePointer.EMPTY_ARRAY;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user