mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
correct import priority for files under virtualenv lib root (PY-8231)
This commit is contained in:
@@ -8,12 +8,14 @@ import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.FileIndexFacade;
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.search.*;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -135,6 +137,27 @@ public class PyProjectScopeBuilder extends ProjectScopeBuilderImpl {
|
||||
return findLibDir(sdk.getRootProvider().getFiles(OrderRootType.CLASSES));
|
||||
}
|
||||
|
||||
public static VirtualFile findVirtualEnvLibDir(Sdk sdk) {
|
||||
VirtualFile[] classVFiles = sdk.getRootProvider().getFiles(OrderRootType.CLASSES);
|
||||
String homePath = sdk.getHomePath();
|
||||
if (homePath != null) {
|
||||
File root = PythonSdkType.getVirtualEnvRoot(homePath);
|
||||
if (root != null) {
|
||||
File libRoot = new File(root, "lib");
|
||||
File[] versionRoots = libRoot.listFiles();
|
||||
if (versionRoots != null && versionRoots.length == 1) {
|
||||
libRoot = versionRoots[0];
|
||||
}
|
||||
for (VirtualFile file : classVFiles) {
|
||||
if (FileUtil.pathsEqual(file.getPath(), libRoot.getPath())) {
|
||||
return file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static VirtualFile findLibDir(VirtualFile[] files) {
|
||||
for (VirtualFile file : files) {
|
||||
|
||||
@@ -774,11 +774,11 @@ public class PythonSdkType extends SdkType {
|
||||
if (pythonSdk != null) {
|
||||
final VirtualFile libDir = PyProjectScopeBuilder.findLibDir(pythonSdk);
|
||||
if (libDir != null && VfsUtilCore.isAncestor(libDir, vFile, false)) {
|
||||
final VirtualFile sitePackages = libDir.findChild(PyNames.SITE_PACKAGES);
|
||||
if (sitePackages != null && VfsUtilCore.isAncestor(sitePackages, vFile, false)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return isNotSitePackages(vFile, libDir);
|
||||
}
|
||||
final VirtualFile venvLibDir = PyProjectScopeBuilder.findVirtualEnvLibDir(pythonSdk);
|
||||
if (venvLibDir != null && VfsUtilCore.isAncestor(venvLibDir, vFile, false)) {
|
||||
return isNotSitePackages(vFile, venvLibDir);
|
||||
}
|
||||
final VirtualFile skeletonsDir = findSkeletonsDir(pythonSdk);
|
||||
if (skeletonsDir != null &&
|
||||
@@ -789,6 +789,14 @@ public class PythonSdkType extends SdkType {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isNotSitePackages(VirtualFile vFile, VirtualFile libDir) {
|
||||
final VirtualFile sitePackages = libDir.findChild(PyNames.SITE_PACKAGES);
|
||||
if (sitePackages != null && VfsUtilCore.isAncestor(sitePackages, vFile, false)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Sdk findPython2Sdk(@Nullable Module module) {
|
||||
Sdk moduleSDK = findPythonSdk(module);
|
||||
|
||||
Reference in New Issue
Block a user