diff --git a/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java b/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java index 5ad10678d068..916f58c65654 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java @@ -21,6 +21,7 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; @@ -265,14 +266,15 @@ public class AddImportHelper { final QualifiedName qName = existingImport.getImportSourceQName(); if (qName != null && qName.toString().equals(path) && existingImport.getRelativeLevel() == 0) { for (PyImportElement el : existingImport.getImportElements()) { - if (name.equals(el.getVisibleName())) { + final QualifiedName importedQName = el.getImportedQName(); + if (importedQName != null && StringUtil.equals(name, importedQName.toString()) && StringUtil.equals(asName, el.getAsName())) { return false; } } final PyElementGenerator generator = PyElementGenerator.getInstance(file.getProject()); final PyImportElement importElement = generator.createImportElement(LanguageLevel.forElement(file), name); existingImport.add(importElement); - return true; + return false; } } addImportFromStatement(file, path, name, asName, priority, anchor); diff --git a/python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/mod1.py b/python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/mod1.py new file mode 100644 index 000000000000..8adcdba1d84f --- /dev/null +++ b/python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/mod1.py @@ -0,0 +1,6 @@ +if True: + import pkgutil +else: + from pkg2.pkg1 import mod2 as pkgutil + +print(pkgutil) diff --git a/python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/pkg2/__init__.py b/python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/pkg2/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/pkg2/pkg1/__init__.py b/python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/pkg2/pkg1/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/pkg2/pkg1/mod2.py b/python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/pkg2/pkg1/mod2.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/mod1.py b/python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/mod1.py new file mode 100644 index 000000000000..16b31152f96e --- /dev/null +++ b/python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/mod1.py @@ -0,0 +1,6 @@ +if True: + import pkgutil +else: + from pkg1 import mod2 as pkgutil + +print(pkgutil) diff --git a/python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/pkg1/__init__.py b/python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/pkg1/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/pkg1/mod2.py b/python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/pkg1/mod2.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/pkg2/__init__.py b/python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/pkg2/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java index 2622ccf8c6e8..6ac6a9ff54b3 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java @@ -144,6 +144,11 @@ public class PyMoveTest extends PyTestCase { doMoveFileTest("pkg1/mod2.py", ""); } + // PY-14439 + public void testConditionalImportFromPackageToPackage() { + doMoveFileTest("pkg1", "pkg2"); + } + // PY-7378 public void testMoveNamespacePackage1() { runWithLanguageLevel(LanguageLevel.PYTHON33, new Runnable() {