move instance method: correct this refs inside local classes

This commit is contained in:
anna
2012-09-20 17:47:01 +02:00
parent c975db62a9
commit 8460c087ba
4 changed files with 33 additions and 2 deletions
@@ -415,7 +415,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
return;
}
if (myTargetVariable.equals(resolved)) {
PsiThisExpression thisExpression = (PsiThisExpression)factory.createExpressionFromText("this", null);
PsiThisExpression thisExpression = RefactoringUtil.createThisExpression(manager, PsiTreeUtil.isAncestor(myMethod, PsiTreeUtil.getParentOfType(expression, PsiClass.class), true) ? myTargetClass : null);
replaceMap.put(expression, thisExpression);
return;
}
@@ -0,0 +1,14 @@
class A {
void ba<caret>r(B b) {
new Runnable() {
@Override
public void run() {
System.out.println(b);
}
}.run();
}
}
class B {
}
@@ -0,0 +1,14 @@
class A {
}
class B {
void bar() {
new Runnable() {
@Override
public void run() {
System.out.println(B.this);
}
}.run();
}
}
@@ -65,7 +65,10 @@ public class MoveInstanceMethodTest extends LightRefactoringTestCase {
public void testSameNames() throws Exception {
doTest(true, 0);
}
public void testCorrectThisRefs() throws Exception {
doTest(true, 0);
}
public void testSameNamesRecursion() throws Exception {
doTest(true, 0);
}