From 338f87ab95f586a2f073aa1a0f321f9a823be1c9 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 9 Nov 2018 11:58:17 +0100 Subject: [PATCH] invert if: don't include single rBrace in block found by property testing --- .../impl/InvertIfConditionAction.java | 11 +++++++--- .../invertIfCondition/afterUnreachable.java | 20 +++++++++++++++++++ .../invertIfCondition/beforeUnreachable.java | 18 +++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/invertIfCondition/afterUnreachable.java create mode 100644 java/java-tests/testData/codeInsight/invertIfCondition/beforeUnreachable.java diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/InvertIfConditionAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/InvertIfConditionAction.java index ff2c85192e67..017c7cfe5dc7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/InvertIfConditionAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/InvertIfConditionAction.java @@ -287,9 +287,14 @@ public class InvertIfConditionAction extends PsiElementBaseIntentionAction { PsiBlockStatement codeBlock = (PsiBlockStatement) factory.createStatementFromText("{}", ifStatement); - codeBlock.getCodeBlock().addRange(first, last); - ct.replaceAndRestoreComments(ifStatement.getThenBranch(), codeBlock); - first.getParent().deleteChildRange(first, last); + if (first == last && PsiUtil.isJavaToken(last, JavaTokenType.RBRACE)) { + ct.replaceAndRestoreComments(ifStatement.getThenBranch(), codeBlock); + } + else { + codeBlock.getCodeBlock().addRange(first, last); + ct.replaceAndRestoreComments(ifStatement.getThenBranch(), codeBlock); + first.getParent().deleteChildRange(first, last); + } } codeStyle.reformat(ifStatement); return ifStatement; diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterUnreachable.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterUnreachable.java new file mode 100644 index 000000000000..bb72a3020d57 --- /dev/null +++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterUnreachable.java @@ -0,0 +1,20 @@ +// "Invert 'if' condition" "true" +class A { + void foo(boolean b, String[] entries) { + { + try { + String filePath = ""; + for (String entry : entries) { + final String rootPath = ""; + if (!b) { + } + else { + break; + } + } + } + finally { + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeUnreachable.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeUnreachable.java new file mode 100644 index 000000000000..b47529cd8bc6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeUnreachable.java @@ -0,0 +1,18 @@ +// "Invert 'if' condition" "true" +class A { + void foo(boolean b, String[] entries) { + { + try { + String filePath = ""; + for (String entry : entries) { + final String rootPath = ""; + if (b) { + break; + } + } + } + finally { + } + } + } +} \ No newline at end of file