From f8e52b991532ac6896cf9eebe5b59e511902f485 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 9 Dec 2011 18:38:27 +0100 Subject: [PATCH] making it clearer what actually happens --- .../python/psi/resolve/ResolveImportUtil.java | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java b/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java index 2b0f68d0f0ae..fac37d090f75 100644 --- a/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java +++ b/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java @@ -355,7 +355,7 @@ public class ResolveImportUtil { return visitor.resultsAsList(); } else if (foothold != null) { - visitRoots(foothold, visitor); + visitSdkRoots(foothold, visitor); return visitor.resultsAsList(); } else { @@ -463,7 +463,7 @@ public class ResolveImportUtil { // out-of-project file or non-file(e.g. console) - use roots of SDK assigned to project if (orderEntries == null) { - final Sdk sdk = PyBuiltinCache.findSdkForFile(elt_psifile); + final Sdk sdk = ProjectRootManager.getInstance(elt.getProject()).getProjectSdk(); if (sdk != null) { visitSdkRoots(visitor, sdk); } @@ -728,8 +728,9 @@ public class ResolveImportUtil { final PsiElement module = findPyFileInDir(dir, referencedName); if (module != null) return module; - if (isInSdk(dir)) { - PsiDirectory skeletonDir = findSkeletonDir(dir, root); + final Sdk sdk = sdkForDir(dir); + if (sdk != null) { + PsiDirectory skeletonDir = findSkeletonDir(dir, root, sdk); if (skeletonDir != null) { final PsiFile skeletonFile = findPyFileInDir(skeletonDir, referencedName); if (skeletonFile != null) { @@ -759,19 +760,20 @@ public class ResolveImportUtil { return null; } - private static boolean isInSdk(PsiDirectory dir) { + @Nullable + private static Sdk sdkForDir(PsiDirectory dir) { final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(dir.getProject()).getFileIndex(); final List entries = fileIndex.getOrderEntriesForFile(dir.getVirtualFile()); for (OrderEntry entry : entries) { if (entry instanceof JdkOrderEntry) { - return true; + return ((JdkOrderEntry) entry).getJdk(); } } - return false; + return null; } @Nullable - private static PsiDirectory findSkeletonDir(PsiDirectory dir, @Nullable VirtualFile root) { + private static PsiDirectory findSkeletonDir(PsiDirectory dir, @Nullable VirtualFile root, Sdk sdk) { String relativeName = null; if (root != null) { relativeName = VfsUtilCore.getRelativePath(dir.getVirtualFile(), root, '/'); @@ -782,7 +784,7 @@ public class ResolveImportUtil { relativeName = relativeQName.join("/"); } } - VirtualFile skeletonsRoot = findSkeletonsRoot(dir); + VirtualFile skeletonsRoot = PythonSdkType.findSkeletonsDir(sdk); if (skeletonsRoot != null && relativeName != null) { VirtualFile skeletonsVFile = relativeName.length() == 0 ? skeletonsRoot : skeletonsRoot.findFileByRelativePath(relativeName.replace(".", "/")); @@ -793,15 +795,6 @@ public class ResolveImportUtil { return null; } - @Nullable - private static VirtualFile findSkeletonsRoot(PsiFileSystemItem fsItem) { - Sdk sdk = PyBuiltinCache.findSdkForFile(fsItem); - if (sdk != null) { - return PythonSdkType.findSkeletonsDir(sdk); - } - return null; - } - /** * Tries to find roots that contain given vfile, and among them the root that contains at the smallest depth. */