diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java index a015294af527..c1ffcdc1cc27 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java @@ -273,7 +273,7 @@ public class InlineLocalHandler extends JavaInlineActionHandler { if (inlineAll.get()) { if (!isInliningVariableInitializer(defToInline)) { - defToInline.getParent().delete(); + deleteInitializer(defToInline); } else { defToInline.delete(); } @@ -306,6 +306,19 @@ public class InlineLocalHandler extends JavaInlineActionHandler { CommandProcessor.getInstance().executeCommand(project, () -> PostprocessReformattingAspect.getInstance(project).postponeFormattingInside(runnable), RefactoringBundle.message("inline.command", localName), null); } + private static void deleteInitializer(@NotNull PsiExpression defToInline) { + PsiElement parent = defToInline.getParent(); + if (parent instanceof PsiAssignmentExpression) { + PsiElement gParent = PsiUtil.skipParenthesizedExprUp(parent.getParent()); + if (!(gParent instanceof PsiExpressionStatement)) { + parent.replace(defToInline); + return; + } + } + + parent.delete(); + } + @Nullable public static PsiElement checkRefsInAugmentedAssignmentOrUnaryModified(final PsiElement[] refsToInline, PsiElement defToInline) { for (PsiElement element : refsToInline) { diff --git a/java/java-tests/testData/refactoring/inlineLocal/DefInMultiAssignmentStatement.java b/java/java-tests/testData/refactoring/inlineLocal/DefInMultiAssignmentStatement.java new file mode 100644 index 000000000000..2368ae172840 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/DefInMultiAssignmentStatement.java @@ -0,0 +1,8 @@ +class Test { + { + int i, j; + i = j = 0; + System.out.println(j); + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineLocal/DefInMultiAssignmentStatement.java.after b/java/java-tests/testData/refactoring/inlineLocal/DefInMultiAssignmentStatement.java.after new file mode 100644 index 000000000000..44682c5de6d1 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/DefInMultiAssignmentStatement.java.after @@ -0,0 +1,8 @@ +class Test { + { + int i; + i = 0; + System.out.println(0); + + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java index 6e6abbb4f128..a4e8216bcc7a 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java @@ -301,9 +301,8 @@ public class InlineLocalTest extends LightCodeInsightTestCase { doTest(false); } - public void testLocalInsideLambdaWithNestedLambda() { - doTest(true); - } + public void testLocalInsideLambdaWithNestedLambda() { doTest(true); } + public void testDefInMultiAssignmentStatement() { doTest(true); } private void doTest(final boolean inlineDef, String conflictMessage) { try {