mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fixed resolving nested namespace packages
This commit is contained in:
@@ -147,7 +147,7 @@ public class PyImportedModule extends LightElement implements NameDefiner {
|
||||
element = ResolveImportUtil.resolveImportElement(myImportElement, myImportedPrefix);
|
||||
}
|
||||
else {
|
||||
element = ResolveImportUtil.resolveModuleInRoots(getImportedPrefix(), getContainingFile());
|
||||
element = ResolveImportUtil.resolveModuleInRoots(myImportedPrefix, myContainingFile);
|
||||
}
|
||||
if (element instanceof PsiDirectory) {
|
||||
return PyUtil.getPackageElement((PsiDirectory)element, this);
|
||||
|
||||
@@ -36,10 +36,7 @@ import com.jetbrains.python.psi.*;
|
||||
import com.jetbrains.python.psi.impl.references.PyImportReference;
|
||||
import com.jetbrains.python.psi.impl.references.PyQualifiedReference;
|
||||
import com.jetbrains.python.psi.impl.references.PyReferenceImpl;
|
||||
import com.jetbrains.python.psi.resolve.ImplicitResolveResult;
|
||||
import com.jetbrains.python.psi.resolve.PyResolveContext;
|
||||
import com.jetbrains.python.psi.resolve.QualifiedResolveResult;
|
||||
import com.jetbrains.python.psi.resolve.RatedResolveResult;
|
||||
import com.jetbrains.python.psi.resolve.*;
|
||||
import com.jetbrains.python.psi.types.*;
|
||||
import com.jetbrains.python.refactoring.PyDefUseUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -385,19 +382,11 @@ public class PyReferenceExpressionImpl extends PyElementImpl implements PyRefere
|
||||
if (PyUtil.isPackage(dir, anchor)) {
|
||||
final PsiFile containingFile = anchor.getContainingFile();
|
||||
if (containingFile instanceof PyFile) {
|
||||
final PyImportElement importElement = PsiTreeUtil.getParentOfType(anchor, PyImportElement.class);
|
||||
final QualifiedName qualifiedName;
|
||||
if (importElement != null) {
|
||||
qualifiedName = anchor.asQualifiedName();
|
||||
final QualifiedName qualifiedName = QualifiedNameFinder.findShortestImportableQName(dir);
|
||||
if (qualifiedName != null) {
|
||||
final PyImportedModule module = new PyImportedModule(null, (PyFile)containingFile, qualifiedName);
|
||||
return new PyImportedModuleType(module);
|
||||
}
|
||||
else {
|
||||
qualifiedName = QualifiedName.fromComponents(dir.getName());
|
||||
}
|
||||
if (qualifiedName == null) {
|
||||
return null;
|
||||
}
|
||||
final PyImportedModule module = new PyImportedModule(importElement, (PyFile)containingFile, qualifiedName);
|
||||
return new PyImportedModuleType(module);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
import pkg1.pkg2.m1
|
||||
|
||||
pkg1.pkg2.m1
|
||||
<ref>
|
||||
@@ -373,4 +373,13 @@ public class PyMultiFileResolveTest extends PyMultiFileResolveTestCase {
|
||||
public void testModulePrivateNameInDunderAll() {
|
||||
assertResolvesTo(PyTargetExpression.class, "_private_name");
|
||||
}
|
||||
|
||||
public void testModuleInDeeplyNestedNamespacePackage() {
|
||||
runWithLanguageLevel(LanguageLevel.PYTHON33, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
assertResolvesTo(PyFile.class, "m1.py");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user