From c090f15509402ba01a232bd578e2449e3cda9ffa Mon Sep 17 00:00:00 2001 From: Dmitry Cheryasov Date: Wed, 12 Nov 2008 23:07:42 +0300 Subject: [PATCH] Added a fallback: use project root as source root if no source root entries found (related to PY-98). --- .../python/psi/impl/ResolveImportUtil.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/python/src/com/jetbrains/python/psi/impl/ResolveImportUtil.java b/python/src/com/jetbrains/python/psi/impl/ResolveImportUtil.java index 25c513d8428d..2b12c43f3e40 100644 --- a/python/src/com/jetbrains/python/psi/impl/ResolveImportUtil.java +++ b/python/src/com/jetbrains/python/psi/impl/ResolveImportUtil.java @@ -80,7 +80,7 @@ public class ResolveImportUtil { VirtualFile child_file = root_file.findChild(name); if (child_file != null) { if (name.equals(child_file.getName())) { - VirtualFile initpy = root_file.findChild(INIT_PY); + VirtualFile initpy = child_file.findChild(INIT_PY); if (initpy != null) { PsiFile initfile = importRef.getManager().findFile(initpy); if (initfile != null) { @@ -158,16 +158,24 @@ public class ResolveImportUtil { // Current approach works only for IDEA plugin. ModuleRootManager rootManager = ModuleRootManager.getInstance(module); // look in module sources + boolean source_entries_missing = true; for (ContentEntry entry: rootManager.getContentEntries()) { VirtualFile root_file = entry.getFile(); PsiElement ret = matchToFile(the_name, importRef, root_file); if (ret != null) return ret; for (VirtualFile folder : entry.getSourceFolderFiles()) { + source_entries_missing = false; ret = matchToFile(the_name, importRef, folder); if (ret != null) return ret; } } + if (source_entries_missing) { + // fallback for a case without any source entries: use project root + VirtualFile project_root = module.getProject().getBaseDir(); + PsiElement ret = matchToFile(the_name, importRef, project_root); + if (ret != null) return ret; + } // else look in SDK roots RootPolicy resolvePolicy = new RootPolicy() { @Nullable @@ -340,16 +348,6 @@ public class ResolveImportUtil { PsiDirectory dir = null; PsiElement ret = null; PyResolveUtil.ResolveProcessor processor = null; - /*if (parent instanceof PsiPackage) { - final PsiPackage pkg = (PsiPackage)parent; - for (PsiPackage subpkg : pkg.getSubPackages()) { - if (referencedName.equals(subpkg.getName())) { - return subpkg.getContainingFile(); - // XXX break; - } - } - } - else*/ if (parent instanceof PyFile) { boolean is_dir = (parent.getCopyableUserData(PyFile.KEY_IS_DIRECTORY) == Boolean.TRUE); PyFile pfparent = (PyFile)parent; @@ -389,7 +387,7 @@ public class ResolveImportUtil { if (file != null) return file; final PsiDirectory subdir = dir.findSubdirectory(referencedName); if (subdir != null) return subdir; - else { // XXX faulty? not a subdir, not a file; could be a name in parent/__init__.py + else { // not a subdir, not a file; could be a name in parent/__init__.py final PsiFile initPy = dir.findFile(INIT_PY); if (initPy == containingFile) return null; // don't dive into the file we're in if (initPy != null) {