From 2234db8098b3d436a5ae3b249ae46fc96d653110 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Wed, 19 Nov 2014 13:39:45 +0300 Subject: [PATCH] Check for both imported and 'as' names in insertImport(), return false if no new import statements were inserted (PY-14439) --- .../python/codeInsight/imports/AddImportHelper.java | 6 ++++-- .../conditionalImportFromPackageToPackage/after/src/mod1.py | 6 ++++++ .../after/src/pkg2/__init__.py | 0 .../after/src/pkg2/pkg1/__init__.py | 0 .../after/src/pkg2/pkg1/mod2.py | 0 .../before/src/mod1.py | 6 ++++++ .../before/src/pkg1/__init__.py | 0 .../before/src/pkg1/mod2.py | 0 .../before/src/pkg2/__init__.py | 0 .../com/jetbrains/python/refactoring/PyMoveTest.java | 5 +++++ 10 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/mod1.py create mode 100644 python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/pkg2/__init__.py create mode 100644 python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/pkg2/pkg1/__init__.py create mode 100644 python/testData/refactoring/move/conditionalImportFromPackageToPackage/after/src/pkg2/pkg1/mod2.py create mode 100644 python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/mod1.py create mode 100644 python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/pkg1/__init__.py create mode 100644 python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/pkg1/mod2.py create mode 100644 python/testData/refactoring/move/conditionalImportFromPackageToPackage/before/src/pkg2/__init__.py 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() {