From 5fa5c0f5985bfc34e167a5d3c5827a8dd035e8c2 Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 1 Mar 2012 20:19:32 +0100 Subject: [PATCH] correct field's class instance when move instance method (IDEA-82103) --- .../MoveInstanceMethodProcessor.java | 9 ++++++++- .../moveInstanceMethod/QualifyField.java | 13 +++++++++++++ .../moveInstanceMethod/QualifyField.java.after | 12 ++++++++++++ .../moveMethod/MoveInstanceMethodTest.java | 2 ++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java create mode 100644 java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java.after 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 8e03e5b5976c..8fe8c788731f 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 @@ -259,7 +259,14 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{ } else { VisibilityUtil.escalateVisibility((PsiField)myTargetVariable, expression); - newQualifier = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createExpressionFromText(myTargetVariable.getName(), null); + String newQualifierName = myTargetVariable.getName(); + if (myTargetVariable instanceof PsiField) { + final PsiClass aClass = PsiUtil.resolveClassInClassTypeOnly(oldQualifier.getType()); + if (aClass == ((PsiField)myTargetVariable).getContainingClass()) { + newQualifierName = oldQualifier.getText() + "." + newQualifierName; + } + } + newQualifier = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createExpressionFromText(newQualifierName, null); } PsiExpression newArgument = null; diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java new file mode 100644 index 000000000000..f3972737f127 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java @@ -0,0 +1,13 @@ +class Flim { + Flam flam = new Flam(); + + void beep() {} + + public static void main(String[] args) { + Flim flim = new Flim(); + flim.beep(); + } +} + +class Flam { +} diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java.after new file mode 100644 index 000000000000..5aa0095da634 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveInstanceMethod/QualifyField.java.after @@ -0,0 +1,12 @@ +class Flim { + Flam flam = new Flam(); + + public static void main(String[] args) { + Flim flim = new Flim(); + flim.flam.beep(); + } +} + +class Flam { + void beep() {} +} 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 b30e8798151f..70c369cdb3e8 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/moveMethod/MoveInstanceMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/moveMethod/MoveInstanceMethodTest.java @@ -33,6 +33,8 @@ public class MoveInstanceMethodTest extends LightRefactoringTestCase { public void testQualifyThisHierarchy() throws Exception {doTest(true, 0);} + public void testQualifyField() throws Exception {doTest(false, 0);} + public void testAnonymousHierarchy() throws Exception {doTest(true, 0);} public void testTwoParams() throws Exception { doTest(true, 0); }