diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitConditionUtil.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitConditionUtil.java index 8994c18a1c0c..5fc15e242175 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitConditionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitConditionUtil.java @@ -120,6 +120,7 @@ public class SplitConditionUtil { CommentTracker tracker) { List elseChain = new ArrayList<>(); boolean chainFinished = false; + loop: while (!chainFinished) { PsiIfStatement nextIf = tryCast(ControlFlowUtils.stripBraces(elseBranch), PsiIfStatement.class); if (nextIf == null) break; @@ -144,7 +145,7 @@ public class SplitConditionUtil { } if (nextOperands.length <= operands.length) break; for (int i = 0; i < operands.length; i++) { - if (!PsiEquivalenceUtil.areElementsEquivalent(nextOperands[i], operands[i])) break; + if (!PsiEquivalenceUtil.areElementsEquivalent(nextOperands[i], operands[i])) break loop; } PsiExpression nextExtracted = getROperands(nextPolyadic, nextPolyadic.getTokenBeforeOperand(nextOperands[operands.length]), tracker); diff --git a/java/java-tests/testData/codeInsight/splitIfAction/afterChain4.java b/java/java-tests/testData/codeInsight/splitIfAction/afterChain4.java new file mode 100644 index 000000000000..316e4b60aa30 --- /dev/null +++ b/java/java-tests/testData/codeInsight/splitIfAction/afterChain4.java @@ -0,0 +1,13 @@ +class C { + void foo(boolean a, boolean b, boolean c, boolean d, boolean e, boolean f) { + if (a && b) { + if (c) { + System.out.println("1"); + } else if (d && e && f) { + System.out.println("2"); + } + } else if (d && e && f) { + System.out.println("2"); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/splitIfAction/beforeChain4.java b/java/java-tests/testData/codeInsight/splitIfAction/beforeChain4.java new file mode 100644 index 000000000000..38d62c0998af --- /dev/null +++ b/java/java-tests/testData/codeInsight/splitIfAction/beforeChain4.java @@ -0,0 +1,10 @@ +class C { + void foo(boolean a, boolean b, boolean c, boolean d, boolean e, boolean f) { + if (a && b && c) { + System.out.println("1"); + } + else if (d && e && f) { + System.out.println("2"); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/SplitIfActionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/SplitIfActionTest.java index a857ab82bdcf..dddd64c0ae94 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/SplitIfActionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/SplitIfActionTest.java @@ -71,6 +71,8 @@ public class SplitIfActionTest extends LightCodeInsightTestCase { public void testChain3() { doTest(); } + public void testChain4() { doTest(); } + public void testWithoutSpaces() { doTest(); }