From 178aaf4a9a9c98c6638090e2eb6fd487091f43cd Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 8 May 2013 18:32:12 +0200 Subject: [PATCH] inplace introduce constant: restore expression from literal (IDEA-106893) --- .../AbstractJavaInplaceIntroducer.java | 10 +++++++++- .../replaceAllFromLiteral.java | 6 ++++++ .../replaceAllFromLiteral_after.java | 9 +++++++++ .../refactoring/InplaceIntroduceConstantTest.java | 11 +++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromLiteral.java create mode 100644 java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromLiteral_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 3a02fbba5bc3..223a180a7914 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java @@ -162,7 +162,15 @@ public abstract class AbstractJavaInplaceIntroducer extends AbstractInplaceIntro return null; } } - return expression != null && expression.isValid() && expression.getText().equals(exprText) ? expression : null; + if (expression != null && expression.isValid() && expression.getText().equals(exprText)) { + return expression; + } + + if (refVariableElementParent instanceof PsiExpression && refVariableElementParent.getText().equals(exprText)) { + return (PsiExpression)refVariableElementParent; + } + + return null; } public static Expression createExpression(final TypeExpression expression, final String defaultType) { diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromLiteral.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromLiteral.java new file mode 100644 index 000000000000..1516ee3b8a6e --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromLiteral.java @@ -0,0 +1,6 @@ +class B { + public static void foo(boolean f) { + Object[] objs = new Object[0]; + System.out.println(objs[9] != null ? Integer.valueOf(objs[9].toString()) : null); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromLiteral_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromLiteral_after.java new file mode 100644 index 000000000000..0694e9bca315 --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllFromLiteral_after.java @@ -0,0 +1,9 @@ +class B { + + public static final int NINE = 9; + + public static void foo(boolean f) { + Object[] objs = new Object[0]; + System.out.println(objs[NINE] != null ? Integer.valueOf(objs[NINE].toString()) : null); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceConstantTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceConstantTest.java index 958df7ad4a45..14a53f40cb3e 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceConstantTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceConstantTest.java @@ -65,6 +65,17 @@ public class InplaceIntroduceConstantTest extends AbstractJavaInplaceIntroduceTe }); } + public void testReplaceAllFromLiteral() throws Exception { + + doTest(new Pass() { + @Override + public void pass(AbstractInplaceIntroducer inplaceIntroduceFieldPopup) { + type("NINE"); + inplaceIntroduceFieldPopup.setReplaceAllOccurrences(true); + } + }); + } + public void testConflictingConstantName() throws Exception { doTest(new Pass() {