ResolveImportUtil.resolveFromImportStatementSource() -> PyFromImportStatement.resolveImportSource()

This commit is contained in:
Dmitry Jemerov
2011-12-15 17:40:07 +01:00
parent 40cf4c7c34
commit 178130c3c1
7 changed files with 25 additions and 16 deletions
@@ -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();
@@ -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;
}
}
@@ -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();
}
@@ -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;
}
@@ -189,4 +189,14 @@ public class PyFromImportStatementImpl extends PyBaseElementImpl<PyFromImportSta
PyPsiUtils.deleteAdjacentComma(this, child, getImportElements());
super.deleteChildInternal(child);
}
@Nullable
public PsiElement resolveImportSource() {
final PyQualifiedName qName = getImportSourceQName();
if (qName == null) {
return null;
}
final List<PsiElement> source = ResolveImportUtil.resolveFromImportStatementSource(this, qName);
return source.isEmpty() ? null : source.get(0);
}
}
@@ -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<PsiElement> source = resolveFromImportStatementSource(from_import_statement, qName);
return source.isEmpty() ? null : source.get(0);
}
@NotNull
private static List<PsiElement> resolveFromImportStatementSource(PyFromImportStatement from_import_statement, PyQualifiedName qName) {
public static List<PsiElement> 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());
@@ -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);