copy classes: retarget refs in extends lists (IDEA-150234)

This commit is contained in:
Anna Kozlova
2016-01-13 20:22:33 +01:00
parent f6fc7322c1
commit 4b1d5629ec
7 changed files with 19 additions and 21 deletions
@@ -493,27 +493,9 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase {
final Map<PsiJavaCodeReferenceElement, PsiElement> rebindMap = new LinkedHashMap<PsiJavaCodeReferenceElement, PsiElement>();
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<PsiJavaCodeReferenceElement, PsiElement> entry : rebindMap.entrySet()) {
@@ -0,0 +1,4 @@
package p1;
class X {
class Y extends X {}
}
@@ -0,0 +1,4 @@
package p2;
class X {
class Y extends X {}
}
@@ -0,0 +1,4 @@
package p1;
class X {
class Y extends X {}
}
@@ -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);