From f496c7f0f5f3fc72466b5561e067e0428b672d01 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 3 Jun 2016 18:14:07 +0300 Subject: [PATCH] move: ensure encoding is done before any change so mutual references are processed correctly (IDEA-157066) --- .../MoveClassesOrPackagesProcessor.java | 8 +++++++- .../moveClass/conflictingNames/after/p1/empty.txt | 0 .../moveClass/conflictingNames/after/p2/First.java | 2 ++ .../moveClass/conflictingNames/after/p2/Test.java | 4 ++++ .../moveClass/conflictingNames/after/p3/First.java | 2 ++ .../moveClass/conflictingNames/after/p3/Second.java | 10 ++++++++++ .../moveClass/conflictingNames/after/p3/empty.txt | 0 .../moveClass/conflictingNames/before/p1/First.java | 2 ++ .../moveClass/conflictingNames/before/p1/Second.java | 10 ++++++++++ .../moveClass/conflictingNames/before/p1/empty.txt | 0 .../moveClass/conflictingNames/before/p2/First.java | 2 ++ .../moveClass/conflictingNames/before/p2/Test.java | 4 ++++ .../moveClass/conflictingNames/before/p3/empty.txt | 0 .../com/intellij/refactoring/MoveClassTest.java | 4 ++++ 14 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p1/empty.txt create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p2/First.java create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p2/Test.java create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/First.java create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/Second.java create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/empty.txt create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/First.java create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/Second.java create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/empty.txt create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p2/First.java create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p2/Test.java create mode 100644 java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p3/empty.txt diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java index eeb7acb48cf6..af89fa0f65b4 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java @@ -499,6 +499,13 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor { } } } + + for (PsiElement element : myElementsToMove) { + if (element instanceof PsiClass) { + MoveClassesOrPackagesUtil.prepareMoveClass((PsiClass)element); + } + } + final Map oldToNewElementsMapping = new HashMap(); for (int idx = 0; idx < myElementsToMove.length; idx++) { PsiElement element = myElementsToMove[idx]; @@ -528,7 +535,6 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor { } else if (element instanceof PsiClass) { final PsiClass psiClass = (PsiClass)element; - MoveClassesOrPackagesUtil.prepareMoveClass(psiClass); final PsiClass newElement = MoveClassesOrPackagesUtil.doMoveClass(psiClass, myMoveDestination.getTargetDirectory(element.getContainingFile()), allClasses.get(psiClass)); oldToNewElementsMapping.put(element, newElement); element = newElement; diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p1/empty.txt b/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p1/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p2/First.java b/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p2/First.java new file mode 100644 index 000000000000..3caf28f29574 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p2/First.java @@ -0,0 +1,2 @@ +package p2; +public class First {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p2/Test.java b/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p2/Test.java new file mode 100644 index 000000000000..378e819e4ad0 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p2/Test.java @@ -0,0 +1,4 @@ +package p2; +public class Test { + public static void f() {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/First.java b/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/First.java new file mode 100644 index 000000000000..db291b05477c --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/First.java @@ -0,0 +1,2 @@ +package p3; +public class First extends p2.First {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/Second.java b/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/Second.java new file mode 100644 index 000000000000..aca27357a6e7 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/Second.java @@ -0,0 +1,10 @@ +package p3; + +import p2.*; + +class Second { + { + new First(); + Test.f(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/empty.txt b/java/java-tests/testData/refactoring/moveClass/conflictingNames/after/p3/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/First.java b/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/First.java new file mode 100644 index 000000000000..f718a8d53d35 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/First.java @@ -0,0 +1,2 @@ +package p1; +public class First extends p2.First {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/Second.java b/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/Second.java new file mode 100644 index 000000000000..d299fb47a5b1 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/Second.java @@ -0,0 +1,10 @@ +package p1; + +import p2.*; + +class Second { + { + new First(); + Test.f(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/empty.txt b/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p1/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p2/First.java b/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p2/First.java new file mode 100644 index 000000000000..3caf28f29574 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p2/First.java @@ -0,0 +1,2 @@ +package p2; +public class First {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p2/Test.java b/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p2/Test.java new file mode 100644 index 000000000000..378e819e4ad0 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p2/Test.java @@ -0,0 +1,4 @@ +package p2; +public class Test { + public static void f() {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p3/empty.txt b/java/java-tests/testData/refactoring/moveClass/conflictingNames/before/p3/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MoveClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MoveClassTest.java index 98c749655c2d..c3baf432496b 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/MoveClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/MoveClassTest.java @@ -94,6 +94,10 @@ public class MoveClassTest extends RefactoringTestCase { doTest("qualifiedRef", new String[]{"p1.Test"}, "p2"); } + public void testConflictingClassNames() throws Exception { + doTest("conflictingNames", new String[] {"p1.First", "p1.Second"}, "p3"); + } + private void doTest(@NonNls String testName, @NonNls String[] classNames, @NonNls String newPackageName) throws Exception{ String root = JavaTestUtil.getJavaTestDataPath() + "/refactoring/moveClass/" + testName;