PY-14432 Handle relative imports of modules, not only packages

This commit is contained in:
Mikhail Golubev
2014-11-27 16:14:42 +03:00
parent e3fc0ee66a
commit 38ee0bd960
14 changed files with 13 additions and 6 deletions
@@ -88,9 +88,14 @@ public class PyMoveFileHandler extends MoveFileHandler {
if (!relativeImportBasePath.isEmpty()) {
//noinspection ConstantConditions
final String relativeImportBaseUrl = constructUrl(extractProtocol(originalLocation), relativeImportBasePath);
VirtualFile sourceFile = getInstance().findFileByUrl(relativeImportBaseUrl);
if (sourceFile != null && sourceFile.exists() && statement.getImportSource() != null) {
sourceFile = sourceFile.findFileByRelativePath(statement.getImportSource().getText().replace('.', '/'));
final VirtualFile relativeImportBaseDir = getInstance().findFileByUrl(relativeImportBaseUrl);
VirtualFile sourceFile = relativeImportBaseDir;
if (relativeImportBaseDir != null && relativeImportBaseDir.exists() && statement.getImportSource() != null) {
final String relativePath = statement.getImportSource().getText().replace('.', '/');
sourceFile = relativeImportBaseDir.findFileByRelativePath(relativePath);
if (sourceFile == null) {
sourceFile = relativeImportBaseDir.findFileByRelativePath(relativePath + PyNames.DOT_PY);
}
}
if (sourceFile != null) {
final PsiManager psiManager = file.getManager();
@@ -1,5 +1,6 @@
from pkg1 import subpkg2
from pkg1.subpkg2 import mod2
from pkg1.subpkg2.mod2 import VAR
# malformed imports
from
@@ -11,4 +12,4 @@ import pkg1.subpkg2 as foo
from pkg1 import subpkg2 as bar
from subpkg1 import mod3
print(subpkg2, mod3, mod2, foo, bar)
print(subpkg2, mod3, mod2, foo, bar, VAR)
@@ -1,5 +1,6 @@
from .. import subpkg2
from ..subpkg2 import mod2
from ..subpkg2.mod2 import VAR
from . import mod3
# malformed imports
@@ -11,4 +12,4 @@ from ..subpkg2 import
import pkg1.subpkg2 as foo
from pkg1 import subpkg2 as bar
print(subpkg2, mod3, mod2, foo, bar)
print(subpkg2, mod3, mod2, foo, bar, VAR)
@@ -195,7 +195,7 @@ public class PyMoveTest extends PyTestCase {
}
// PY-14432
public void testRelativeImportInsideMovedModule() {
public void testRelativeImportsInsideMovedModule() {
doMoveFileTest("pkg1/subpkg1", "");
}