diff --git a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java index 2c0915ce1e3b..90664d2d5986 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java @@ -1050,7 +1050,8 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase { final boolean replaceAll = replaceChoice.isMultiple(); final SuggestedNameInfo suggestedName = getSuggestedName(typeSelectorManager.getDefaultType(), expr, anchor); final String variableName = suggestedName.names.length > 0 ? suggestedName.names[0] : ""; - final boolean declareFinal = replaceAll && declareFinalIfAll || !anyAssignmentLHS && createFinals(anchor.getContainingFile()); + final boolean declareFinal = replaceAll && declareFinalIfAll || !anyAssignmentLHS && createFinals(anchor.getContainingFile()) || + anchor instanceof PsiSwitchLabelStatementBase; final boolean declareVarType = canBeExtractedWithoutExplicitType(expr) && createVarType(); final boolean replaceWrite = anyAssignmentLHS && replaceChoice.isAll(); return new IntroduceVariableSettings() { diff --git a/java/java-tests/testData/refactoring/introduceVariable/CaseLabelSingle.after.java b/java/java-tests/testData/refactoring/introduceVariable/CaseLabelSingle.after.java new file mode 100644 index 000000000000..7f601a411d53 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/CaseLabelSingle.after.java @@ -0,0 +1,14 @@ +class A { + private void A() { + final int i = 2; + switch (1) { + case 1: + System.out.println(1); + break; + case i: + System.out.println(3); + break; + } + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceVariable/CaseLabelSingle.java b/java/java-tests/testData/refactoring/introduceVariable/CaseLabelSingle.java new file mode 100644 index 000000000000..c5bac2f97a1b --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/CaseLabelSingle.java @@ -0,0 +1,13 @@ +class A { + private void A() { + switch (1) { + case 1: + System.out.println(1); + break; + case 2: + System.out.println(3); + break; + } + + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceVariableTest.java index a15f1e2770de..42d435e5df4e 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceVariableTest.java @@ -12,6 +12,7 @@ import com.intellij.psi.PsiType; import com.intellij.refactoring.JavaRefactoringSettings; import com.intellij.refactoring.introduceVariable.InputValidator; import com.intellij.refactoring.introduceVariable.IntroduceVariableBase; +import com.intellij.refactoring.introduceVariable.IntroduceVariableHandler; import com.intellij.refactoring.introduceVariable.IntroduceVariableSettings; import com.intellij.refactoring.ui.TypeSelectorManagerImpl; import com.intellij.testFramework.LightCodeInsightTestCase; @@ -221,6 +222,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { doTest(new MockIntroduceVariableHandler("temp", true, false, false, "int")); } + public void testCaseLabelSingle() { + doTest(new IntroduceVariableHandler()); + } + public void testCaseLabelEnum() { try { doTest(new MockIntroduceVariableHandler("temp", true, false, false, ""));