From 1ead3523c0890733168a005f0c12717ea357e0da Mon Sep 17 00:00:00 2001 From: Eugene Vigdorchik Date: Wed, 2 Feb 2005 21:22:42 +0300 Subject: [PATCH] (no message) --- .../MoveInstanceMethodProcessor.java | 31 +++++++++---------- .../moveInstanceMethod/Recursive.java | 5 +++ .../moveInstanceMethod/Recursive.java.after | 6 ++++ .../moveMethod/MoveInstanceMethodTest.java | 14 +++++---- 4 files changed, 33 insertions(+), 23 deletions(-) create mode 100644 testData/refactoring/moveInstanceMethod/Recursive.java create mode 100644 testData/refactoring/moveInstanceMethod/Recursive.java.after diff --git a/source/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java b/source/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java index 80dd7c6b3e0e..f3e32c9b1291 100644 --- a/source/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java +++ b/source/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java @@ -277,29 +277,26 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{ if (body != null) { body.accept(new PsiRecursiveElementVisitor() { public void visitReferenceExpression(PsiReferenceExpression expression) { - final PsiExpression qualifier = expression.getQualifierExpression(); - if (qualifier == null || qualifier instanceof PsiThisExpression) { - final PsiElement resolved = expression.resolve(); - if (resolved instanceof PsiMember && - ((PsiMember)resolved).getContainingClass().equals(methodCopy.getContainingClass())) { - try { + try { + final PsiExpression qualifier = expression.getQualifierExpression(); + if (qualifier == null || qualifier instanceof PsiThisExpression) { + final PsiElement resolved = expression.resolve(); + if (resolved instanceof PsiMember && ((PsiMember)resolved).getContainingClass().equals(methodCopy.getContainingClass())) { PsiReferenceExpression qualified = (PsiReferenceExpression)factory.createExpressionFromText(myOldClassParameterName + ".f", null); qualified.getReferenceNameElement().replace(expression.getReferenceNameElement()); expression.replace(qualified); } - catch (IncorrectOperationException e) { - LOG.error(e); + else if (variableCopy.equals(resolved)) { + PsiThisExpression thisExpression = (PsiThisExpression)factory.createExpressionFromText("this", null); + expression.replace(thisExpression); } - } - } else if (qualifier instanceof PsiReferenceExpression && ((PsiReferenceExpression)qualifier).isReferenceTo(variableCopy)) { - try { - qualifier.delete(); - } - catch (IncorrectOperationException e) { - LOG.error(e); - } + } else if (qualifier instanceof PsiReferenceExpression && ((PsiReferenceExpression)qualifier).isReferenceTo(variableCopy)) { + qualifier.delete(); } + super.visitReferenceExpression(expression); + } + catch (IncorrectOperationException e) { + LOG.error(e); } - super.visitReferenceExpression(expression); } diff --git a/testData/refactoring/moveInstanceMethod/Recursive.java b/testData/refactoring/moveInstanceMethod/Recursive.java new file mode 100644 index 000000000000..b6a09371e9ea --- /dev/null +++ b/testData/refactoring/moveInstanceMethod/Recursive.java @@ -0,0 +1,5 @@ +public class MoveMethodTest { + void foo (MoveMethodTest f) { + f.foo(f); + } +} \ No newline at end of file diff --git a/testData/refactoring/moveInstanceMethod/Recursive.java.after b/testData/refactoring/moveInstanceMethod/Recursive.java.after new file mode 100644 index 000000000000..e815af618e7e --- /dev/null +++ b/testData/refactoring/moveInstanceMethod/Recursive.java.after @@ -0,0 +1,6 @@ +public class MoveMethodTest { + + void foo(MoveMethodTest moveMethodTest) { + foo(this); + } +} \ No newline at end of file diff --git a/testSource/com/intellij/refactoring/moveMethod/MoveInstanceMethodTest.java b/testSource/com/intellij/refactoring/moveMethod/MoveInstanceMethodTest.java index 30e492e4ddbd..0c002fc5dd9d 100644 --- a/testSource/com/intellij/refactoring/moveMethod/MoveInstanceMethodTest.java +++ b/testSource/com/intellij/refactoring/moveMethod/MoveInstanceMethodTest.java @@ -13,19 +13,21 @@ import com.intellij.testFramework.LightCodeInsightTestCase; */ public class MoveInstanceMethodTest extends LightCodeInsightTestCase { - public void testSimple() throws Exception { doTestForTargetParameter(true, 0); } + public void testSimple() throws Exception { doTest(true, 0); } - public void testSimpleWithTargetField() throws Exception { doTestForTargetParameter(false, 1); } + public void testSimpleWithTargetField() throws Exception { doTest(false, 1); } - public void testInterface() throws Exception { doTestForTargetParameter(true, 0); } + public void testInterface() throws Exception { doTest(true, 0); } - public void testWithInner() throws Exception { doTestForTargetParameter(true, 0); } + public void testWithInner() throws Exception { doTest(true, 0); } - public void testJavadoc() throws Exception { doTestForTargetParameter(true, 0); } + public void testJavadoc() throws Exception { doTest(true, 0); } + + public void testRecursive() throws Exception { doTest(true, 0); } - private void doTestForTargetParameter(boolean isTargetParameter, final int targetIndex) throws Exception { + private void doTest(boolean isTargetParameter, final int targetIndex) throws Exception { final String filePath = "/refactoring/moveInstanceMethod/" + getTestName(false) + ".java"; configureByFile(filePath); final PsiElement targetElement = TargetElementUtil.findTargetElement(getEditor(), TargetElementUtil.ELEMENT_NAME_ACCEPTED);