From 4b1d5629ec6d37ef31548b0ae7536657d947b599 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 13 Jan 2016 19:17:39 +0100 Subject: [PATCH] copy classes: retarget refs in extends lists (IDEA-150234) --- .../refactoring/copy/CopyClassesHandler.java | 24 +++---------------- .../packageLocalAndExtends/after/p1/X.java | 4 ++++ .../packageLocalAndExtends/after/p2/X.java | 4 ++++ .../packageLocalAndExtends/after/p2/empty.txt | 0 .../packageLocalAndExtends/before/p1/X.java | 4 ++++ .../before/p2/empty.txt | 0 .../intellij/refactoring/CopyClassTest.java | 4 ++++ 7 files changed, 19 insertions(+), 21 deletions(-) create mode 100644 java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p1/X.java create mode 100644 java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p2/X.java create mode 100644 java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p2/empty.txt create mode 100644 java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/before/p1/X.java create mode 100644 java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/before/p2/empty.txt diff --git a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java index 43706636aa86..1743d08030f4 100644 --- a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java @@ -493,27 +493,9 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase { final Map rebindMap = new LinkedHashMap(); element.accept(new JavaRecursiveElementVisitor(){ @Override - public void visitReferenceExpression(PsiReferenceExpression expression) { - decodeRef(expression, oldToNewMap, rebindMap); - super.visitReferenceExpression(expression); - } - - @Override - public void visitNewExpression(PsiNewExpression expression) { - super.visitNewExpression(expression); - final PsiJavaCodeReferenceElement referenceElement = expression.getClassReference(); - if (referenceElement != null) { - decodeRef(referenceElement, oldToNewMap, rebindMap); - } - } - - @Override - public void visitTypeElement(PsiTypeElement type) { - super.visitTypeElement(type); - final PsiJavaCodeReferenceElement referenceElement = type.getInnermostComponentReferenceElement(); - if (referenceElement != null) { - decodeRef(referenceElement, oldToNewMap, rebindMap); - } + public void visitReferenceElement(PsiJavaCodeReferenceElement reference) { + super.visitReferenceElement(reference); + decodeRef(reference, oldToNewMap, rebindMap); } }); for (Map.Entry entry : rebindMap.entrySet()) { diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p1/X.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p1/X.java new file mode 100644 index 000000000000..373c8a91481a --- /dev/null +++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p1/X.java @@ -0,0 +1,4 @@ +package p1; +class X { + class Y extends X {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p2/X.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p2/X.java new file mode 100644 index 000000000000..efd4aa02914a --- /dev/null +++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p2/X.java @@ -0,0 +1,4 @@ +package p2; +class X { + class Y extends X {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p2/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/after/p2/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/before/p1/X.java b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/before/p1/X.java new file mode 100644 index 000000000000..373c8a91481a --- /dev/null +++ b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/before/p1/X.java @@ -0,0 +1,4 @@ +package p1; +class X { + class Y extends X {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/before/p2/empty.txt b/java/java-tests/testData/refactoring/copyClass/multifile/packageLocalAndExtends/before/p2/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testSrc/com/intellij/refactoring/CopyClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/CopyClassTest.java index 04237cfa2843..8b2aa98a9b4a 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/CopyClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/CopyClassTest.java @@ -98,6 +98,10 @@ public class CopyClassTest extends CodeInsightTestCase { doMultifileTest(); } + public void testPackageLocalAndExtends() throws Exception { + doMultifileTest(); + } + //copy all classes from p1 -> p2 private void doMultifileTest() throws Exception { String root = JavaTestUtil.getJavaTestDataPath() + "/refactoring/copyClass/multifile/" + getTestName(true);