From 0c8e941d65725b5da89af70bbe1b6aeec40b2769 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 11 Oct 2010 20:25:59 +0400 Subject: [PATCH] we don't need to have any specific file to check if Django is importable, and also don't need to cache the availability --- .../python/psi/resolve/ResolveImportUtil.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java b/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java index a6bca3ecc8f1..1bcca02b1e97 100644 --- a/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java +++ b/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java @@ -299,6 +299,19 @@ public class ResolveImportUtil { return visitor.results; } + @NotNull + public static List resolveModulesInRoots(@NotNull Module module, @NotNull PyQualifiedName moduleQualifiedName) { + PythonPathCache cache = PythonModulePathCache.getInstance(module); + final List cachedResults = cache.get(moduleQualifiedName); + if (cachedResults != null) { + return cachedResults; + } + ResolveInRootVisitor visitor = new ResolveInRootVisitor(moduleQualifiedName, PsiManager.getInstance(module.getProject()), null); + visitRoots(module, visitor); + cache.put(moduleQualifiedName, visitor.results); + return visitor.results; + } + // TODO: rewrite using resolveImportReference /** @@ -478,22 +491,22 @@ public class ResolveImportUtil { } static class ResolveInRootVisitor implements RootVisitor { - final PsiFile foothold_file; + final PsiFile myFootholdFile; final @NotNull PyQualifiedName qualifiedName; final @NotNull PsiManager psiManager; final List results = new ArrayList(); - public ResolveInRootVisitor(@NotNull PyQualifiedName qName, @NotNull PsiManager psiManager, PsiFile foothold_file) { + public ResolveInRootVisitor(@NotNull PyQualifiedName qName, @NotNull PsiManager psiManager, @Nullable PsiFile foothold_file) { this.qualifiedName = qName; this.psiManager = psiManager; - this.foothold_file = foothold_file; + myFootholdFile = foothold_file; } public boolean visitRoot(final VirtualFile root) { if (!root.isValid()) { return true; } - PsiElement module = resolveInRoot(root, qualifiedName, psiManager, foothold_file); + PsiElement module = resolveInRoot(root, qualifiedName, psiManager, myFootholdFile); if (module != null) { results.add(module); } @@ -502,7 +515,7 @@ public class ResolveImportUtil { } @Nullable - private static PsiElement resolveInRoot(VirtualFile root, PyQualifiedName qualifiedName, PsiManager psiManager, PsiFile foothold_file) { + private static PsiElement resolveInRoot(VirtualFile root, PyQualifiedName qualifiedName, PsiManager psiManager, @Nullable PsiFile foothold_file) { PsiElement module = root.isDirectory() ? psiManager.findDirectory(root) : psiManager.findFile(root); for (String component : qualifiedName.getComponents()) { if (component == null) { @@ -530,7 +543,7 @@ public class ResolveImportUtil { */ @Nullable public static PsiElement resolveChild(@Nullable final PsiElement parent, @NotNull final String referencedName, - final PsiFile containingFile, @Nullable VirtualFile root, boolean fileOnly) { + @Nullable final PsiFile containingFile, @Nullable VirtualFile root, boolean fileOnly) { PsiDirectory dir = null; PsiElement ret = null; PsiElement possible_ret = null; @@ -569,7 +582,7 @@ public class ResolveImportUtil { } @Nullable - private static PsiElement resolveInDirectory(final String referencedName, final PsiFile containingFile, + private static PsiElement resolveInDirectory(final String referencedName, @Nullable final PsiFile containingFile, final PsiDirectory dir, @Nullable VirtualFile root, boolean isFileOnly) { if (referencedName == null) return null; final PsiElement module = findModuleInDir(dir, referencedName);