From ccba3bf443fc8e8c9020db80cf5d26815c74dc33 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 14 May 2012 19:50:53 +0400 Subject: [PATCH] inplace introduce parameter: from field with the same name (IDEA-85750) --- .../AbstractJavaInplaceIntroducer.java | 11 +++++++---- .../inplaceIntroduceParameter/replaceAll2.java | 13 +++++++++++++ .../replaceAll2_after.java | 13 +++++++++++++ .../refactoring/InplaceIntroduceParameterTest.java | 9 +++++++++ 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2.java create mode 100644 java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java index 30bfd9c48055..546c24722493 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java @@ -125,10 +125,13 @@ public abstract class AbstractJavaInplaceIntroducer extends AbstractInplaceIntro if (psiVariable == null || !psiVariable.isValid()) return null; final PsiElement refVariableElement = containingFile.findElementAt(marker.getStartOffset()); PsiExpression expression = PsiTreeUtil.getParentOfType(refVariableElement, PsiReferenceExpression.class); - if (expression instanceof PsiReferenceExpression && (((PsiReferenceExpression)expression).resolve() == psiVariable || - Comparing.strEqual(psiVariable.getName(), - ((PsiReferenceExpression)expression).getReferenceName()))) { - return (PsiExpression)expression.replace(elementFactory.createExpressionFromText(exprText, psiVariable)); + if (expression instanceof PsiReferenceExpression) { + final String referenceName = ((PsiReferenceExpression)expression).getReferenceName(); + if (((PsiReferenceExpression)expression).resolve() == psiVariable || + Comparing.strEqual(psiVariable.getName(), referenceName) || + Comparing.strEqual(exprText, referenceName)) { + return (PsiExpression)expression.replace(elementFactory.createExpressionFromText(exprText, psiVariable)); + } } if (expression == null) { expression = PsiTreeUtil.getParentOfType(refVariableElement, PsiExpression.class); diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2.java new file mode 100644 index 000000000000..6233f721169e --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2.java @@ -0,0 +1,13 @@ +public class ATest { + public static final String FOO = "foo"; + public static final String FOO1 = "foo1"; + + String m_interval = ""; + void foo() { + if (FOO.equals(m_interval.substring(1))) { + System.out.println(FOO); + } else if (FOO1.equals(m_interval.substring(1))) { + System.out.println(); + } + } +} diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2_after.java new file mode 100644 index 000000000000..ecd91369aead --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAll2_after.java @@ -0,0 +1,13 @@ +public class ATest { + public static final String FOO = "foo"; + public static final String FOO1 = "foo1"; + + String m_interval = ""; + void foo(String m_interval1) { + if (FOO.equals(m_interval1.substring(1))) { + System.out.println(FOO); + } else if (FOO1.equals(m_interval1.substring(1))) { + System.out.println(); + } + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java index 4ee036833c0c..97c475910e9e 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java @@ -50,6 +50,15 @@ public class InplaceIntroduceParameterTest extends AbstractJavaInplaceIntroduceT }); } + public void testReplaceAll2() throws Exception { + doTest(new Pass() { + @Override + public void pass(AbstractInplaceIntroducer inplaceIntroduceFieldPopup) { + inplaceIntroduceFieldPopup.setReplaceAllOccurrences(true); + } + }); + } + public void testReplaceAllMethodCalls() throws Exception { doTest(new Pass() { @Override