From efad1cbeebf56b7734c3e55ae770f63b92899133 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 1 Feb 2010 16:14:25 +0300 Subject: [PATCH] move to inner: rebind imports first in order to prevent fqns (IDEA-39290) --- .../moveClassesOrPackages/MoveClassToInnerProcessor.java | 7 +++++++ .../insertInnerClassImport/after/pack1/empty.txt | 0 .../insertInnerClassImport/after/pack2/A.java | 6 ++++++ .../insertInnerClassImport/after/pack2/empty.txt | 0 .../insertInnerClassImport/after/packUser/Class2.java | 7 +++++++ .../insertInnerClassImport/before/pack1/Class1.java | 4 ++++ .../insertInnerClassImport/before/pack1/empty.txt | 0 .../insertInnerClassImport/before/pack2/A.java | 4 ++++ .../insertInnerClassImport/before/pack2/empty.txt | 0 .../insertInnerClassImport/before/packUser/Class2.java | 7 +++++++ .../com/intellij/refactoring/MoveClassToInnerTest.java | 12 ++++++++++++ 11 files changed, 47 insertions(+) create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack1/empty.txt create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/A.java create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/empty.txt create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/packUser/Class2.java create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/Class1.java create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/empty.txt create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/A.java create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/empty.txt create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/packUser/Class2.java diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java index 7ab8824f8e..eb7d8e2779 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java @@ -128,6 +128,13 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor { final List importStatements = new ArrayList(); if (!CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS) { usages = filterUsagesInImportStatements(usages, importStatements); + } else { + //rebind imports first + Arrays.sort(usages, new Comparator() { + public int compare(UsageInfo o1, UsageInfo o2) { + return PsiUtil.BY_POSITION.compare(o1.getElement(), o2.getElement()); + } + }); } saveNonCodeUsages(usages); final Map oldToNewElementsMapping = new HashMap(); diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack1/empty.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/A.java new file mode 100644 index 0000000000..c8900d94f3 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/A.java @@ -0,0 +1,6 @@ +package pack2; + +public class A { + public static class Class1 { + } +} diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/pack2/empty.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/packUser/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/packUser/Class2.java new file mode 100644 index 0000000000..db5d64dd23 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/after/packUser/Class2.java @@ -0,0 +1,7 @@ +package packUser; + +import pack2.A.Class1; + +public class Class2 { + Class1 myClass1; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/Class1.java new file mode 100644 index 0000000000..231fe0676a --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/Class1.java @@ -0,0 +1,4 @@ +package pack1; + +public class Class1 { +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack1/empty.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/A.java new file mode 100644 index 0000000000..e1886e55ac --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/A.java @@ -0,0 +1,4 @@ +package pack2; + +public class A { +} diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/pack2/empty.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/packUser/Class2.java b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/packUser/Class2.java new file mode 100644 index 0000000000..155cfe03f2 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClassToInner/insertInnerClassImport/before/packUser/Class2.java @@ -0,0 +1,7 @@ +package packUser; + +import pack1.Class1; + +public class Class2 { + Class1 myClass1; +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MoveClassToInnerTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MoveClassToInnerTest.java index e4dc438ee2..4ff7434780 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/MoveClassToInnerTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/MoveClassToInnerTest.java @@ -9,6 +9,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; +import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.psi.impl.source.PostprocessReformattingAspect; import com.intellij.psi.search.ProjectScope; import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassToInnerProcessor; @@ -35,6 +36,17 @@ public class MoveClassToInnerTest extends CodeInsightTestCase { doTest(new String[] { "pack1.Class1" }, "pack2.A"); } + public void testInsertInnerClassImport() throws Exception { + final boolean imports = CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS; + try { + CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS = true; + doTest(new String[] { "pack1.Class1" }, "pack2.A"); + } + finally { + CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS = imports; + } + } + public void testSimultaneousMove() throws Exception { doTest(new String[] { "pack1.Class1", "pack0.Class0" }, "pack2.A"); } -- 2.11.4.GIT