From 9aea03d01b7389ed92069c8d256268c0fbf23fc0 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 2 Feb 2011 17:36:07 +0100 Subject: [PATCH] split if: actually forbid splitting when different operations are on the left of binary expr (IDEA-64877) --- .../intellij/codeInsight/intention/impl/SplitIfAction.java | 2 +- .../codeInsight/splitIfAction/beforeOrAndMixed.java | 7 +++++++ .../intellij/codeInsight/intention/SplitIfActionTest.java | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/splitIfAction/beforeOrAndMixed.java diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java index 4564664d18db..2b2cd55374d8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java @@ -49,9 +49,9 @@ public class SplitIfAction extends PsiElementBaseIntentionAction { if (!isAndExpression && !isOrExpression) return false; while (expression.getParent() instanceof PsiBinaryExpression) { + expression = (PsiBinaryExpression)expression.getParent(); if (isAndExpression && expression.getOperationSign().getTokenType() != JavaTokenType.ANDAND) return false; if (isOrExpression && expression.getOperationSign().getTokenType() != JavaTokenType.OROR) return false; - expression = (PsiBinaryExpression)expression.getParent(); } if (!(expression.getParent() instanceof PsiIfStatement)) return false; diff --git a/java/java-tests/testData/codeInsight/splitIfAction/beforeOrAndMixed.java b/java/java-tests/testData/codeInsight/splitIfAction/beforeOrAndMixed.java new file mode 100644 index 000000000000..c8a7d088f3c8 --- /dev/null +++ b/java/java-tests/testData/codeInsight/splitIfAction/beforeOrAndMixed.java @@ -0,0 +1,7 @@ +class C { + void foo() { + if (a || b && c) { + call(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/intention/SplitIfActionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/intention/SplitIfActionTest.java index ba7002cdc621..f48054ce6a06 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/intention/SplitIfActionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/intention/SplitIfActionTest.java @@ -51,6 +51,12 @@ public class SplitIfActionTest extends LightCodeInsightTestCase { checkResultByFile("/codeInsight/splitIfAction/afterOrParenthesis.java"); } + public void test8() throws Exception { + configureByFile("/codeInsight/splitIfAction/beforeOrAndMixed.java"); + SplitIfAction action = new SplitIfAction(); + assertFalse(action.isAvailable(getProject(), getEditor(), getFile())); + } + private void perform() throws Exception {