mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't replace a more specific imported module with a more broad one
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import mypackage.goo
|
||||
|
||||
def foo():
|
||||
import mypackage.bar
|
||||
mypackage.bar.dostuff()
|
||||
|
||||
Reference in New Issue
Block a user