diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java b/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java index ceae8aed2e44..98645dca001e 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java @@ -135,7 +135,7 @@ public class InplaceIntroduceConstantPopup extends AbstractInplaceIntroduceField public PsiField compute() { PsiField field = elementFactory.createFieldFromText( - psiType.getCanonicalText() + " " + (getInputName() != null ? getInputName() : names[0]) + " = " + myInitializerText + ";", + psiType.getCanonicalText() + " " + (chooseName(names, myParentClass.getLanguage())) + " = " + myInitializerText + ";", myParentClass); PsiUtil.setModifierProperty(field, PsiModifier.FINAL, true); PsiUtil.setModifierProperty(field, PsiModifier.STATIC, true); diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceFieldPopup.java b/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceFieldPopup.java index 3998a93d1b54..11f2d4a64079 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceFieldPopup.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceFieldPopup.java @@ -86,7 +86,7 @@ public class InplaceIntroduceFieldPopup extends AbstractInplaceIntroduceFieldPop return ApplicationManager.getApplication().runWriteAction(new Computable() { @Override public PsiField compute() { - PsiField field = elementFactory.createField(getInputName() != null ? getInputName() : names[0], defaultType); + PsiField field = elementFactory.createField(chooseName(names, myParentClass.getLanguage()), defaultType); field = (PsiField)myParentClass.add(field); if (myExprText != null) { updateInitializer(elementFactory, field); 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 a22a0987bdbb..76ac3fd7e55f 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java @@ -6,6 +6,7 @@ import com.intellij.codeInsight.template.Expression; import com.intellij.codeInsight.template.ExpressionContext; import com.intellij.codeInsight.template.Result; import com.intellij.codeInsight.template.TextResult; +import com.intellij.lang.Language; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.RangeMarker; @@ -49,7 +50,6 @@ public abstract class AbstractJavaInplaceIntroducer extends AbstractInplaceIntro @Override protected String[] suggestNames(boolean replaceAll, PsiVariable variable) { - myTypeSelectorManager.setAllOccurrences(replaceAll); final PsiType defaultType = myTypeSelectorManager.getTypeSelector().getSelectedType(); final String propertyName = variable != null ? JavaCodeStyleManager.getInstance(myProject).variableNameToPropertyName(variable.getName(), VariableKind.LOCAL_VARIABLE) @@ -204,4 +204,11 @@ public abstract class AbstractJavaInplaceIntroducer extends AbstractInplaceIntro }; } + protected String chooseName(String[] names, Language language) { + String inputName = getInputName(); + if (inputName != null && !isIdentifier(inputName, language)) { + inputName = null; + } + return inputName != null ? inputName : names[0]; + } } diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java index 99e5dcdb6130..44b0d09dac09 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java @@ -116,10 +116,9 @@ public class InplaceIntroduceParameterPopup extends AbstractJavaInplaceIntroduce return ApplicationManager.getApplication().runWriteAction(new Computable() { @Override public PsiParameter compute() { - final String name = getInputName() != null ? getInputName() : names[0]; final PsiParameter anchor = JavaIntroduceParameterMethodUsagesProcessor.getAnchorParameter(myMethod); final PsiParameter psiParameter = (PsiParameter)myMethod.getParameterList() - .addAfter(elementFactory.createParameter(name, defaultType), anchor); + .addAfter(elementFactory.createParameter(chooseName(names, myMethod.getLanguage()), defaultType), anchor); PsiUtil.setModifierProperty(psiParameter, PsiModifier.FINAL, myPanel.hasFinalModifier()); myParameterIndex = myMethod.getParameterList().getParameterIndex(psiParameter); return psiParameter; diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterSettingsUI.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterSettingsUI.java index cec4a3c317e4..3454bba9e012 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterSettingsUI.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterSettingsUI.java @@ -185,7 +185,6 @@ public abstract class IntroduceParameterSettingsUI { box.setSelected(myCbReplaceAllOccurences.isSelected()); } } - getTypeSelectionManager().setAllOccurrences(myCbReplaceAllOccurences.isSelected()); if (myCbReplaceAllOccurences.isSelected()) { if (myCbDeleteLocalVariable != null) { myCbDeleteLocalVariable.makeSelectable(); @@ -197,9 +196,6 @@ public abstract class IntroduceParameterSettingsUI { } } } - else { - getTypeSelectionManager().setAllOccurrences(myIsInvokedOnDeclaration); - } } protected abstract TypeSelectorManager getTypeSelectionManager(); diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithBrokenIdentifier.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithBrokenIdentifier.java new file mode 100644 index 000000000000..8307bd7c0642 --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithBrokenIdentifier.java @@ -0,0 +1,10 @@ +public class Derr { + + public static void main(String[] args) { + String value; + + value = "1"; + value = "1"; + value = "1"; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithBrokenIdentifier_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithBrokenIdentifier_after.java new file mode 100644 index 000000000000..4ceda4fd2812 --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/replaceAllWithBrokenIdentifier_after.java @@ -0,0 +1,12 @@ +public class Derr { + + public static final String STRING = "1"; + + public static void main(String[] args) { + String value; + + value = STRING; + value = STRING; + value = STRING; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllBrokenIdentifier.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllBrokenIdentifier.java new file mode 100644 index 000000000000..3b9e175cb1ad --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllBrokenIdentifier.java @@ -0,0 +1,9 @@ +public class Derr { + + public static void main(String[] args) { + long value; + + value = new Long(1); + value = new Long(1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllBrokenIdentifier_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllBrokenIdentifier_after.java new file mode 100644 index 000000000000..202168418345 --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/replaceAllBrokenIdentifier_after.java @@ -0,0 +1,9 @@ +public class Derr { + + public static void main(String[] args, Long aLong) { + long value; + + value = aLong; + value = aLong; + } +} \ 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 2eefaa1364b1..5bf89a205d42 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceConstantTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceConstantTest.java @@ -78,6 +78,16 @@ public class InplaceIntroduceConstantTest extends AbstractJavaInplaceIntroduceTe } }); } + + public void testReplaceAllWithBrokenIdentifier() throws Exception { + doTest(new Pass() { + @Override + public void pass(AbstractInplaceIntroducer inplaceIntroduceFieldPopup) { + type("A B"); + inplaceIntroduceFieldPopup.setReplaceAllOccurrences(true); + } + }); + } public void testReplaceAllFromSecondOccurrence() throws Exception { diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java index d4bda12f1bb9..b0749bf56f72 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java @@ -60,6 +60,16 @@ public class InplaceIntroduceParameterTest extends AbstractJavaInplaceIntroduceT }); } + public void testReplaceAllBrokenIdentifier() throws Exception { + doTest(new Pass() { + @Override + public void pass(AbstractInplaceIntroducer inplaceIntroduceFieldPopup) { + type("ONE TWO"); + inplaceIntroduceFieldPopup.setReplaceAllOccurrences(true); + } + }); + } + public void testReplaceAll2() throws Exception { doTest(new Pass() { @Override diff --git a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java index 81a2885c2022..1ea47e4150e3 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java +++ b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java @@ -318,14 +318,19 @@ public abstract class AbstractInplaceIntroducer