From 178130c3c16811fbbb16ec2474c1d89684867cc0 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 15 Dec 2011 17:40:07 +0100 Subject: [PATCH] ResolveImportUtil.resolveFromImportStatementSource() -> PyFromImportStatement.resolveImportSource() --- .../python/codeInsight/imports/AddImportHelper.java | 2 +- .../PyUnresolvedReferencesInspection.java | 2 +- .../jetbrains/python/psi/PyFromImportStatement.java | 9 +++++++++ .../com/jetbrains/python/psi/impl/PyFileImpl.java | 4 ++-- .../python/psi/impl/PyFromImportStatementImpl.java | 10 ++++++++++ .../python/psi/resolve/ResolveImportUtil.java | 12 +----------- .../python/psi/resolve/ResolveProcessor.java | 2 +- 7 files changed, 25 insertions(+), 16 deletions(-) diff --git a/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java b/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java index fb58a4eb7be5..65286718d0bc 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java @@ -85,7 +85,7 @@ public class AddImportHelper { if (relativeTo instanceof PyFromImportStatement) { final PyFromImportStatement fromImportStatement = (PyFromImportStatement)relativeTo; relativeToName = fromImportStatement.getImportSourceQName(); - source = ResolveImportUtil.resolveFromImportStatementSource(fromImportStatement); + source = fromImportStatement.resolveImportSource(); } else { final PyImportElement[] importElements = relativeTo.getImportElements(); diff --git a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java index 1044bcda2e61..91a292832780 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java @@ -650,7 +650,7 @@ public class PyUnresolvedReferencesInspection extends PyInspection { } else { assert importStatement instanceof PyFromImportStatement; - if (ResolveImportUtil.resolveFromImportStatementSource((PyFromImportStatement)importStatement) == null) { + if (((PyFromImportStatement)importStatement).resolveImportSource() == null) { continue; } } diff --git a/python/src/com/jetbrains/python/psi/PyFromImportStatement.java b/python/src/com/jetbrains/python/psi/PyFromImportStatement.java index 127090654016..4bcf392baf34 100644 --- a/python/src/com/jetbrains/python/psi/PyFromImportStatement.java +++ b/python/src/com/jetbrains/python/psi/PyFromImportStatement.java @@ -51,4 +51,13 @@ public interface PyFromImportStatement extends PyImportStatementBase, StubBasedP */ @Nullable PsiElement getRightParen(); + + /** + * Resolves the import source qualified name to a file or directory. Note: performs a Python only resolve, + * doesn't handle extension points such as import from Java classes. + * + * @return the resolved import source, or null if the import is unresolved. + */ + @Nullable + PsiElement resolveImportSource(); } diff --git a/python/src/com/jetbrains/python/psi/impl/PyFileImpl.java b/python/src/com/jetbrains/python/psi/impl/PyFileImpl.java index 37b163533252..5d4f06387d48 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyFileImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyFileImpl.java @@ -252,7 +252,7 @@ public class PyFileImpl extends PsiFileBase implements PyFile, PyExpression { if (PyUtil.isClassPrivateName(name)) { return null; } - PsiElement starImportSource = ResolveImportUtil.resolveFromImportStatementSource(statement); + PsiElement starImportSource = statement.resolveImportSource(); if (starImportSource != null) { starImportSource = PyUtil.turnDirIntoInit(starImportSource); if (starImportSource instanceof PyFileImpl) { @@ -277,7 +277,7 @@ public class PyFileImpl extends PsiFileBase implements PyFile, PyExpression { if (PyNames.INIT_DOT_PY.equals(getName())) { final PyQualifiedName qName = statement.getImportSourceQName(); if (qName != null && qName.endsWith(name)) { - final PsiElement element = PyUtil.turnInitIntoDir(ResolveImportUtil.resolveFromImportStatementSource(statement)); + final PsiElement element = PyUtil.turnInitIntoDir(statement.resolveImportSource()); if (element != null && element.getParent() == getContainingDirectory()) { return element; } diff --git a/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java index 05b5e11807ac..bea9b6184cb1 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java @@ -189,4 +189,14 @@ public class PyFromImportStatementImpl extends PyBaseElementImpl source = ResolveImportUtil.resolveFromImportStatementSource(this, qName); + return source.isEmpty() ? null : source.get(0); + } } diff --git a/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java b/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java index f2764f9fb9a5..d3169b2a79dc 100644 --- a/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java +++ b/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java @@ -167,18 +167,8 @@ public class ResolveImportUtil { return results; } - @Nullable - public static PsiElement resolveFromImportStatementSource(PyFromImportStatement from_import_statement) { - final PyQualifiedName qName = from_import_statement.getImportSourceQName(); - if (qName == null) { - return null; - } - final List source = resolveFromImportStatementSource(from_import_statement, qName); - return source.isEmpty() ? null : source.get(0); - } - @NotNull - private static List resolveFromImportStatementSource(PyFromImportStatement from_import_statement, PyQualifiedName qName) { + public static List resolveFromImportStatementSource(PyFromImportStatement from_import_statement, PyQualifiedName qName) { boolean absolute_import_enabled = isAbsoluteImportEnabledFor(from_import_statement); PsiFile file = from_import_statement.getContainingFile(); return resolveModule(qName, file, absolute_import_enabled, from_import_statement.getRelativeLevel()); diff --git a/python/src/com/jetbrains/python/psi/resolve/ResolveProcessor.java b/python/src/com/jetbrains/python/psi/resolve/ResolveProcessor.java index 982ae92fbc41..3fd013b8d33a 100644 --- a/python/src/com/jetbrains/python/psi/resolve/ResolveProcessor.java +++ b/python/src/com/jetbrains/python/psi/resolve/ResolveProcessor.java @@ -126,7 +126,7 @@ public class ResolveProcessor implements PsiScopeProcessor { final PyFromImportStatement fromImportStatement = (PyFromImportStatement)element; final PyQualifiedName qName = fromImportStatement.getImportSourceQName(); if (qName != null && qName.endsWith(myName)) { - final PsiElement source = PyUtil.turnInitIntoDir(ResolveImportUtil.resolveFromImportStatementSource(fromImportStatement)); + final PsiElement source = PyUtil.turnInitIntoDir(fromImportStatement.resolveImportSource()); if (source != null && source.getParent() == element.getContainingFile().getContainingDirectory()) { myResult = source; addNameDefiner(fromImportStatement);