diff --git a/python/src/com/jetbrains/python/psi/impl/PyImportedModule.java b/python/src/com/jetbrains/python/psi/impl/PyImportedModule.java index e64cae41f9c3..6805f7403f27 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyImportedModule.java +++ b/python/src/com/jetbrains/python/psi/impl/PyImportedModule.java @@ -163,4 +163,8 @@ public class PyImportedModule extends LightElement implements NameDefiner { private PsiElement resolve(PyImportElement importElement, final PyQualifiedName prefix) { return PyUtil.turnDirIntoInit(ResolveImportUtil.resolveImportElement(importElement, prefix)); } + + public boolean isAncestorOf(PyImportedModule other) { + return PsiTreeUtil.isAncestor(myContainer, other.myContainer, true); + } } diff --git a/python/src/com/jetbrains/python/psi/resolve/ResolveProcessor.java b/python/src/com/jetbrains/python/psi/resolve/ResolveProcessor.java index 37ad76073779..96b1ba5942df 100644 --- a/python/src/com/jetbrains/python/psi/resolve/ResolveProcessor.java +++ b/python/src/com/jetbrains/python/psi/resolve/ResolveProcessor.java @@ -78,6 +78,12 @@ public class ResolveProcessor implements PyAsScopeProcessor { final NameDefiner definer = (NameDefiner)element; PsiElement by_name = definer.getElementNamed(myName); if (by_name != null) { + // prefer more specific imported modules to less specific ones + if (by_name instanceof PyImportedModule && myResult instanceof PyImportedModule && + ((PyImportedModule)by_name).isAncestorOf((PyImportedModule)myResult)) { + return false; + } + setResult(by_name); if (!PsiTreeUtil.isAncestor(element, by_name, true)) { addNameDefiner(definer); diff --git a/python/testData/resolve/multiFile/localImport/LocalImport.py b/python/testData/resolve/multiFile/localImport/LocalImport.py index 9852379debeb..cadaa6836b27 100644 --- a/python/testData/resolve/multiFile/localImport/LocalImport.py +++ b/python/testData/resolve/multiFile/localImport/LocalImport.py @@ -1,3 +1,5 @@ +import mypackage.goo + def foo(): import mypackage.bar mypackage.bar.dostuff() diff --git a/python/testData/resolve/multiFile/localImport/mypackage/goo.py b/python/testData/resolve/multiFile/localImport/mypackage/goo.py new file mode 100644 index 000000000000..e69de29bb2d1