push down: decode references once with respect to other moved members (IDEA-149639)

This commit is contained in:
Anna Kozlova
2015-12-28 18:16:08 +01:00
parent adaa0f09b7
commit 2a1cdfff85
4 changed files with 34 additions and 8 deletions

View File

@@ -17,7 +17,6 @@ package com.intellij.refactoring.memberPushDown;
import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.ChangeContextUtil;
import com.intellij.codeInsight.generation.OverrideImplementExploreUtil;
import com.intellij.codeInsight.generation.OverrideImplementUtil;
import com.intellij.codeInsight.intention.impl.CreateClassDialog;
import com.intellij.codeInsight.intention.impl.CreateSubclassAction;
@@ -319,13 +318,6 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
}
private void decodeRefs(final PsiMember member, final PsiClass targetClass) {
try {
ChangeContextUtil.decodeContextInfo(member, null, null);
}
catch (IncorrectOperationException e) {
LOG.error(e);
}
final PsiElementFactory factory = JavaPsiFacade.getInstance(myProject).getElementFactory();
member.accept(new JavaRecursiveElementWalkingVisitor() {
@Override public void visitReferenceExpression(PsiReferenceExpression expression) {

View File

@@ -0,0 +1,12 @@
import static InlineIssue.ClassToMove.F1;
abstract class InlineIssue {
public enum ClassToMove { F1 }
public InlineIssue cre<caret>ate(ClassToMove e) {
F1.notify();
return null;
}
}
class Desc extends InlineIssue {
}

View File

@@ -0,0 +1,13 @@
import static Desc.ClassToMove.F1;
abstract class InlineIssue {
}
class Desc extends InlineIssue {
public InlineIssue create(ClassToMove e) {
F1.notify();
return null;
}
public enum ClassToMove { F1 }
}

View File

@@ -63,6 +63,8 @@ public class PushDownTest extends LightRefactoringTestCase {
public void testInterfaceConstants() { doTest();}
public void testReferenceForMovedInnerClass() { doTest();}
public void testInsertOverrideWhenKeepAbstract() throws Exception {
doTestImplements(true);
}
@@ -92,6 +94,13 @@ public class PushDownTest extends LightRefactoringTestCase {
membersToMove.add(memberInfo);
}
final PsiClass classByName = currentClass.findInnerClassByName("ClassToMove", false);
if (classByName != null) {
final MemberInfo memberInfo = new MemberInfo(classByName);
memberInfo.setChecked(true);
membersToMove.add(memberInfo);
}
final MemberInfo memberInfo = new MemberInfo(psiMember);
memberInfo.setChecked(true);
membersToMove.add(memberInfo);