mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
correctly resolve components of import element (PY-676)
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
import foo.bar
|
||||
# <ref>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
import foo.bar
|
||||
foo.bar.baz()
|
||||
#<ref>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
def baz(): pass
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user