From f15f17c7b72553fab41ec9212aaf7a8635f50b57 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 15 Dec 2016 19:47:43 +0100 Subject: [PATCH] don't touch static imports in moved directories (IDEA-165125) --- .../JavaMoveDirectoryWithClassesHelper.java | 8 ++++---- .../after/src1/pack0/pack2/pack3/S1.java | 13 +++++++++++++ .../after/src1/pack0/pack2/pack4/S1.java | 13 +++++++++++++ .../after/src1/pack1/empty.txt | 0 .../before/src1/pack1/empty.txt | 0 .../before/src1/pack1/pack2/pack3/S1.java | 13 +++++++++++++ .../before/src1/pack1/pack2/pack4/S1.java | 13 +++++++++++++ .../refactoring/MovePackageAsDirectoryTest.java | 12 ++++++++++++ 8 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack0/pack2/pack3/S1.java create mode 100644 java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack0/pack2/pack4/S1.java create mode 100644 java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack1/empty.txt create mode 100644 java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/empty.txt create mode 100644 java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/pack2/pack3/S1.java create mode 100644 java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/pack2/pack4/S1.java diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java index 2583d27f7db5..fcf6f86204ae 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java @@ -5,13 +5,13 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; +import com.intellij.psi.util.FileTypeUtils; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.refactoring.util.RefactoringConflictsUtil; import com.intellij.usageView.UsageInfo; import com.intellij.util.Function; import com.intellij.util.containers.MultiMap; -import com.intellij.psi.util.FileTypeUtils; import java.util.*; @@ -51,7 +51,7 @@ public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClasses for (PsiReference reference : ReferencesSearch.search(aPackage, GlobalSearchScope.projectScope(project))) { final PsiElement element = reference.getElement(); final PsiImportStatementBase statementBase = PsiTreeUtil.getParentOfType(element, PsiImportStatementBase.class); - if (statementBase != null && statementBase.isOnDemand()) { + if (statementBase != null && statementBase.isOnDemand() && !isUnderRefactoring(statementBase, directoriesToMove)) { usages.add(new RemoveOnDemandImportStatementsUsageInfo(statementBase)); } } @@ -60,9 +60,9 @@ public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClasses } } - private static boolean isUnderRefactoring(PsiDirectory packageDirectory, PsiDirectory[] directoriesToMove) { + private static boolean isUnderRefactoring(PsiElement psiElement, PsiDirectory[] directoriesToMove) { for (PsiDirectory directory : directoriesToMove) { - if (PsiTreeUtil.isAncestor(directory, packageDirectory, true)) { + if (PsiTreeUtil.isAncestor(directory, psiElement, true)) { return true; } } diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack0/pack2/pack3/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack0/pack2/pack3/S1.java new file mode 100644 index 000000000000..53967e522276 --- /dev/null +++ b/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack0/pack2/pack3/S1.java @@ -0,0 +1,13 @@ +package pack0.pack2.pack3; +import static pack0.pack2.pack3.S1.TestEnum.*; + +public class S1 { + + public void test() { + System.out.println(TEST_STRING_1); + } + + public enum TestEnum { + TEST_STRING_1(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack0/pack2/pack4/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack0/pack2/pack4/S1.java new file mode 100644 index 000000000000..b0490b5fc4e2 --- /dev/null +++ b/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack0/pack2/pack4/S1.java @@ -0,0 +1,13 @@ +package pack0.pack2.pack4; +import static pack0.pack2.pack4.S1.TestEnum.*; + +public class S1 { + + public void test() { + System.out.println(TEST_STRING_1); + } + + public enum TestEnum { + TEST_STRING_1(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack1/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/after/src1/pack1/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/pack2/pack3/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/pack2/pack3/S1.java new file mode 100644 index 000000000000..b8eeadf5c0b2 --- /dev/null +++ b/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/pack2/pack3/S1.java @@ -0,0 +1,13 @@ +package pack1.pack2.pack3; +import static pack1.pack2.pack3.S1.TestEnum.*; + +public class S1 { + + public void test() { + System.out.println(TEST_STRING_1); + } + + public enum TestEnum { + TEST_STRING_1(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/pack2/pack4/S1.java b/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/pack2/pack4/S1.java new file mode 100644 index 000000000000..75cfd7e5fd30 --- /dev/null +++ b/java/java-tests/testData/refactoring/movePackageAsDir/renamePackageStaticImportsToNestedClasses/before/src1/pack1/pack2/pack4/S1.java @@ -0,0 +1,13 @@ +package pack1.pack2.pack4; +import static pack1.pack2.pack4.S1.TestEnum.*; + +public class S1 { + + public void test() { + System.out.println(TEST_STRING_1); + } + + public enum TestEnum { + TEST_STRING_1(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MovePackageAsDirectoryTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MovePackageAsDirectoryTest.java index 3e611124a549..1900861a93d4 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/MovePackageAsDirectoryTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/MovePackageAsDirectoryTest.java @@ -63,6 +63,18 @@ public class MovePackageAsDirectoryTest extends MultiFileTestCase { doTest(action); } + public void testRenamePackageStaticImportsToNestedClasses() throws Exception { + final PerformAction action = (rootDir, rootAfter) -> { + final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(myProject); + final PsiPackage sourcePackage = psiFacade.findPackage("pack1.pack2"); + assertNotNull(sourcePackage); + + RenamePsiPackageProcessor.createRenameMoveProcessor("pack0.pack2", sourcePackage, false, false).run(); + FileDocumentManager.getInstance().saveAllDocuments(); + }; + doTest(action); + } + public void testMovePackageWithTxtFilesInside() throws Exception { doTest(createAction("pack1", "target")); }