mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-11 10:09:19 +07:00
move instance method: do not break visitor - postpone whole expr replacement (IDEA-84207)
This commit is contained in:
+8
-3
@@ -376,6 +376,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
//correct internal references
|
||||
final PsiCodeBlock body = myMethod.getBody();
|
||||
if (body != null) {
|
||||
final Map<PsiElement, PsiElement> replaceMap = new HashMap<PsiElement, PsiElement>();
|
||||
body.accept(new JavaRecursiveElementVisitor() {
|
||||
@Override public void visitThisExpression(PsiThisExpression expression) {
|
||||
final PsiClass classReferencedByThis = MoveInstanceMembersUtil.getClassReferencedByThis(expression);
|
||||
@@ -384,7 +385,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
String paramName = getParameterNameToCreate(classReferencedByThis);
|
||||
try {
|
||||
final PsiExpression refExpression = factory.createExpressionFromText(paramName, null);
|
||||
expression.replace(refExpression);
|
||||
replaceMap.put(expression, refExpression);
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
@@ -411,7 +412,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
}
|
||||
if (myTargetVariable.equals(resolved)) {
|
||||
PsiThisExpression thisExpression = (PsiThisExpression)factory.createExpressionFromText("this", null);
|
||||
expression.replace(thisExpression);
|
||||
replaceMap.put(expression, thisExpression);
|
||||
return;
|
||||
}
|
||||
else if (myMethod.equals(resolved)) {
|
||||
@@ -446,7 +447,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
if (qualifier != null) qualifier.delete();
|
||||
final String paramName = getParameterNameToCreate(classReferencedByThis);
|
||||
final PsiExpression newExpression = factory.createExpressionFromText(paramName + "." + expression.getText(), null);
|
||||
expression = (PsiNewExpression)expression.replace(newExpression);
|
||||
replaceMap.put(expression, newExpression);
|
||||
}
|
||||
}
|
||||
super.visitNewExpression(expression);
|
||||
@@ -461,6 +462,10 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
super.visitMethodCallExpression(expression);
|
||||
}
|
||||
});
|
||||
for (PsiElement element : replaceMap.keySet()) {
|
||||
final PsiElement replacement = replaceMap.get(element);
|
||||
element.replace(replacement);
|
||||
}
|
||||
}
|
||||
|
||||
final PsiMethod methodCopy = getPatternMethod();
|
||||
|
||||
Reference in New Issue
Block a user