correctly resolve components of import element (PY-676)

This commit is contained in:
Dmitry Jemerov
2010-03-12 19:49:09 +03:00
parent 2c099c9e49
commit 8bb69371a8
9 changed files with 29 additions and 5 deletions

View File

@@ -212,15 +212,15 @@ public class PyImportElementImpl extends PyBaseElementImpl<PyImportElementStub>
String asName = getAsName();
if (asName != null) {
if (!Comparing.equal(the_name, asName)) return null;
return ResolveImportUtil.resolveImportElement(this);
}
else {
final PyQualifiedName qName = getImportedQName();
if (qName == null || !qName.matches(the_name)) {
if (qName == null || qName.getComponentCount() == 0 || !qName.getComponents().get(0).equals(the_name)) {
return null;
}
return ResolveImportUtil.resolveImportElement(this, PyQualifiedName.fromComponents(the_name));
}
return ResolveImportUtil.resolveImportElement(this);
}
public boolean mustResolveOutside() {

View File

@@ -87,7 +87,11 @@ public class ResolveImportUtil {
@Nullable
public static PsiElement resolveImportElement(PyImportElement import_element) {
final PyQualifiedName qName = import_element.getImportedQName();
return resolveImportElement(import_element, import_element.getImportedQName());
}
@Nullable
public static PsiElement resolveImportElement(PyImportElement import_element, final PyQualifiedName qName) {
if (qName == null) {
return null;
}
@@ -138,7 +142,7 @@ public class ResolveImportUtil {
final PsiElement parent = PsiTreeUtil.getParentOfType(importRef, PyImportElement.class, PyFromImportStatement.class); //importRef.getParent();
if (parent instanceof PyImportElement) {
PyImportElement import_element = (PyImportElement)parent;
final PsiElement result = resolveImportElement(import_element);
final PsiElement result = resolveImportElement(import_element, importRef.asQualifiedName());
if (result != null) {
return result;
}

View File

@@ -0,0 +1,3 @@
import foo.bar
# <ref>

View File

@@ -0,0 +1,4 @@
import foo.bar
foo.bar.baz()
#<ref>

View File

@@ -0,0 +1 @@
def baz(): pass

View File

@@ -160,6 +160,18 @@ public class PyMultiFileResolveTest extends PyLightFixtureTestCase {
assertEquals("copy", ((PyFunction) element).getName());
}
public void testNestedPackage() throws Exception {
PsiElement element = doResolve();
assertTrue(element instanceof PyFile);
assertEquals("__init__.py", ((PyFile) element).getName());
}
public void testNestedPackageElement() throws Exception {
PsiElement element = doResolve();
assertTrue(element instanceof PyFile);
assertEquals("__init__.py", ((PyFile) element).getName());
}
private PsiFile prepareFile() throws Exception {
String testName = getTestName(true);
String fileName = getTestName(false) + ".py";