From efbc5c7b4e94e2622d2cd13a66cc00082edfef95 Mon Sep 17 00:00:00 2001 From: Dmitry Cheryasov Date: Fri, 23 May 2008 17:03:18 +0400 Subject: [PATCH] Resolve in files that have no directly associated module (e.g. in stdlib) --- .../python/psi/impl/ResolveImportUtil.java | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/python/src/com/jetbrains/python/psi/impl/ResolveImportUtil.java b/python/src/com/jetbrains/python/psi/impl/ResolveImportUtil.java index 8b0ca20637bd..c514231b92fa 100644 --- a/python/src/com/jetbrains/python/psi/impl/ResolveImportUtil.java +++ b/python/src/com/jetbrains/python/psi/impl/ResolveImportUtil.java @@ -63,20 +63,35 @@ public class ResolveImportUtil { } final Module module = ModuleUtil.findModuleForPsiElement(importRef); - if (module == null) return null; + if (module != null) { + RootPolicy resolvePolicy = new RootPolicy() { + public PsiElement visitModuleSourceOrderEntry(final ModuleSourceOrderEntry moduleOrderEntry, final PsiElement value) { + if (value != null) return value; + return resolveInRoots(moduleOrderEntry.getRootModel().getContentRoots(), referencedName, importRef); + } - RootPolicy resolvePolicy = new RootPolicy() { - public PsiElement visitModuleSourceOrderEntry(final ModuleSourceOrderEntry moduleOrderEntry, final PsiElement value) { - if (value != null) return value; - return resolveInRoots(moduleOrderEntry.getRootModel().getContentRoots(), referencedName, importRef); + public PsiElement visitJdkOrderEntry(final JdkOrderEntry jdkOrderEntry, final PsiElement value) { + if (value != null) return value; + return resolveInRoots(jdkOrderEntry.getRootFiles(OrderRootType.SOURCES), referencedName, importRef); + } + }; + return ModuleRootManager.getInstance(module).processOrder(resolvePolicy, null); + } + else { + try { + for (OrderEntry entry: ProjectRootManager.getInstance(importRef.getProject()).getFileIndex().getOrderEntriesForFile( + importRef.getContainingFile().getVirtualFile() + ) + ) { + PsiElement elt = resolveInRoots(entry.getFiles(OrderRootType.CLASSES), referencedName, importRef); + if (elt != null) return elt; + } } - - public PsiElement visitJdkOrderEntry(final JdkOrderEntry jdkOrderEntry, final PsiElement value) { - if (value != null) return value; - return resolveInRoots(jdkOrderEntry.getRootFiles(OrderRootType.SOURCES), referencedName, importRef); + catch (NullPointerException ex) { + return null; } - }; - return ModuleRootManager.getInstance(module).processOrder(resolvePolicy, null); + } + return null; // normally unreachable } @Nullable