Fixed resolving nested namespace packages

This commit is contained in:
Andrey Vlasovskikh
2014-11-12 16:42:52 +03:00
parent b14b62e4b4
commit 71f55b4760
5 changed files with 19 additions and 17 deletions
@@ -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);
}
}
}
@@ -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");
}
});
}
}