From b54dd41ed05b337096665f701ca8d6d4eff5b379 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 6 Feb 2012 21:58:37 +0100 Subject: [PATCH] IDEA-78597 Refactoring introduce field introduce silly assignment --- .../introduceField/BaseExpressionToFieldHandler.java | 4 ++-- .../afterUnresolvedReferenceToLocalVar.java | 12 ++++++++++++ .../beforeUnresolvedReferenceToLocalVar.java | 10 ++++++++++ .../refactoring/IntroduceFieldInSameClassTest.java | 6 ++++++ 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/refactoring/introduceField/afterUnresolvedReferenceToLocalVar.java create mode 100644 java/java-tests/testData/refactoring/introduceField/beforeUnresolvedReferenceToLocalVar.java diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java index c628f9454cc5..56a465861857 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java @@ -689,11 +689,11 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase InitializationPlace initializerPlace = mySettings.getInitializerPlace(); final PsiLocalVariable localVariable = mySettings.getLocalVariable(); final boolean deleteLocalVariable = mySettings.isDeleteLocalVariable(); - @Nullable PsiExpression initializer; + @Nullable PsiExpression initializer = null; if (localVariable != null) { initializer = localVariable.getInitializer(); } - else { + else if (!(mySelectedExpr instanceof PsiReferenceExpression && ((PsiReferenceExpression)mySelectedExpr).resolve() == null)){ initializer = mySelectedExpr; } diff --git a/java/java-tests/testData/refactoring/introduceField/afterUnresolvedReferenceToLocalVar.java b/java/java-tests/testData/refactoring/introduceField/afterUnresolvedReferenceToLocalVar.java new file mode 100644 index 000000000000..5dc141e72462 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceField/afterUnresolvedReferenceToLocalVar.java @@ -0,0 +1,12 @@ +import java.util.ArrayList; + +public class Test +{ + public final ArrayList arrayList; + + public Test() + { + arrayList = new ArrayList(); + } + +} diff --git a/java/java-tests/testData/refactoring/introduceField/beforeUnresolvedReferenceToLocalVar.java b/java/java-tests/testData/refactoring/introduceField/beforeUnresolvedReferenceToLocalVar.java new file mode 100644 index 000000000000..bd34a5d54bd2 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceField/beforeUnresolvedReferenceToLocalVar.java @@ -0,0 +1,10 @@ +import java.util.ArrayList; + +public class Test +{ + public Test() + { + arrayList = new ArrayList(); + } + +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceFieldInSameClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceFieldInSameClassTest.java index dd6e9734be1c..28a6c6ce2c83 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceFieldInSameClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceFieldInSameClassTest.java @@ -71,6 +71,12 @@ public class IntroduceFieldInSameClassTest extends LightCodeInsightTestCase { } //------------------------------------------------------------------------------------------------- + public void testUnresolvedReferenceToLocalVar() throws Exception { + configureByFile("/refactoring/introduceField/beforeUnresolvedReferenceToLocalVar.java"); + performRefactoring(BaseExpressionToFieldHandler.InitializationPlace.IN_CURRENT_METHOD, false); + checkResultByFile("/refactoring/introduceField/afterUnresolvedReferenceToLocalVar.java"); + } + private static void performRefactoring(final BaseExpressionToFieldHandler.InitializationPlace initializationPlace, final boolean declareStatic) { new MockIntroduceFieldHandler(initializationPlace, declareStatic).invoke(getProject(), myEditor, myFile, null); }