From 5c3b5e06faea044a157e945546e2e57bc3ae65f8 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Sat, 19 Nov 2016 18:29:47 +0300 Subject: [PATCH] PY-21292 Properly delete obsolete imports of moved symbols Some of them might have been left if the corresponding symbols were used and imported via "from" imports in the same module or new imports of them were combined with some exiting "from" imports in a dependent module. --- .../python/codeInsight/imports/AddImportHelper.java | 2 +- .../after/src/a.py | 1 + .../after/src/b.py | 6 ++++++ .../after/src/importing.py | 3 +++ .../before/src/a.py | 2 ++ .../before/src/b.py | 2 ++ .../before/src/importing.py | 4 ++++ .../after/src/a.py | 3 +++ .../after/src/b.py | 6 ++++++ .../after/src/importing.py | 3 +++ .../before/src/a.py | 6 ++++++ .../before/src/importing.py | 3 +++ .../com/jetbrains/python/refactoring/PyMoveTest.java | 10 ++++++++++ 13 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/a.py create mode 100644 python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/b.py create mode 100644 python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/importing.py create mode 100644 python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/a.py create mode 100644 python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/b.py create mode 100644 python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/importing.py create mode 100644 python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/a.py create mode 100644 python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/b.py create mode 100644 python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/importing.py create mode 100644 python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/before/src/a.py create mode 100644 python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/before/src/importing.py diff --git a/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java b/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java index c58972997246..f77c9ecea105 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java @@ -464,7 +464,7 @@ public class AddImportHelper { final PyElementGenerator generator = PyElementGenerator.getInstance(file.getProject()); final PyImportElement importElement = generator.createImportElement(LanguageLevel.forElement(file), name, asName); existingImport.add(importElement); - return false; + return true; } } addFromImportStatement(file, from, name, asName, priority, anchor); diff --git a/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/a.py b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/a.py new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/a.py @@ -0,0 +1 @@ + diff --git a/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/b.py b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/b.py new file mode 100644 index 000000000000..aff66937a907 --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/b.py @@ -0,0 +1,6 @@ +class B: + pass + + +class A: + pass \ No newline at end of file diff --git a/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/importing.py b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/importing.py new file mode 100644 index 000000000000..1274b2423e53 --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/after/src/importing.py @@ -0,0 +1,3 @@ +from b import B, A + +print(A(), B()) diff --git a/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/a.py b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/a.py new file mode 100644 index 000000000000..79a7eda2cd59 --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/a.py @@ -0,0 +1,2 @@ +class A: + pass diff --git a/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/b.py b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/b.py new file mode 100644 index 000000000000..51a2e57f9490 --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/b.py @@ -0,0 +1,2 @@ +class B: + pass diff --git a/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/importing.py b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/importing.py new file mode 100644 index 000000000000..2b4abacad1e5 --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportRemovedWhenNewImportCombinedWithExistingImport/before/src/importing.py @@ -0,0 +1,4 @@ +from a import A +from b import B + +print(A(), B()) diff --git a/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/a.py b/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/a.py new file mode 100644 index 000000000000..b28b04f64312 --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/a.py @@ -0,0 +1,3 @@ + + + diff --git a/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/b.py b/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/b.py new file mode 100644 index 000000000000..e4b5216fdb04 --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/b.py @@ -0,0 +1,6 @@ +class A: + pass + + +class B: + pass \ No newline at end of file diff --git a/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/importing.py b/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/importing.py new file mode 100644 index 000000000000..3708825b4ad3 --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/after/src/importing.py @@ -0,0 +1,3 @@ +from b import A, B + +print(A(), B()) diff --git a/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/before/src/a.py b/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/before/src/a.py new file mode 100644 index 000000000000..e4b5216fdb04 --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/before/src/a.py @@ -0,0 +1,6 @@ +class A: + pass + + +class B: + pass \ No newline at end of file diff --git a/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/before/src/importing.py b/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/before/src/importing.py new file mode 100644 index 000000000000..e16029695f46 --- /dev/null +++ b/python/testData/refactoring/move/staleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule/before/src/importing.py @@ -0,0 +1,3 @@ +from a import A, B + +print(A(), B()) diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java index 21a0c0de7aed..f4997f0a84ce 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java @@ -361,6 +361,16 @@ public class PyMoveTest extends PyTestCase { doMoveSymbolTest("func", "b.py"); } + // PY-21292 + public void testStaleFromImportsRemovedWhenSeveralMovedSymbolsUsedInSameModule() { + doMoveSymbolsTest("b.py", "A", "B"); + } + + // PY-21292 + public void testStaleFromImportRemovedWhenNewImportCombinedWithExistingImport() { + doMoveSymbolTest("A", "b.py"); + } + private void doMoveFileTest(String fileName, String toDirName) { Project project = myFixture.getProject(); PsiManager manager = PsiManager.getInstance(project);