diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java index c53726c071df..531b12d7522c 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java @@ -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; } diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java b/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java new file mode 100644 index 000000000000..7d2a75f70975 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java @@ -0,0 +1,14 @@ +class A { + void bar(B b) { + new Runnable() { + @Override + public void run() { + System.out.println(b); + } + }.run(); + } +} + +class B { + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java.after new file mode 100644 index 000000000000..98d9b8f3686b --- /dev/null +++ b/java/java-tests/testData/refactoring/moveInstanceMethod/CorrectThisRefs.java.after @@ -0,0 +1,14 @@ +class A { +} + +class B { + + void bar() { + new Runnable() { + @Override + public void run() { + System.out.println(B.this); + } + }.run(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/moveMethod/MoveInstanceMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/moveMethod/MoveInstanceMethodTest.java index 6d4e960e7565..3d3e3912dbcc 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/moveMethod/MoveInstanceMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/moveMethod/MoveInstanceMethodTest.java @@ -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); }