From 9e12271bd3b6d7eaa6b51152c38717e6dabf2f54 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 26 Jun 2017 17:04:14 +0300 Subject: [PATCH] invert if: fix psi replacement (IDEA-174966) --- .../intention/impl/InvertIfConditionAction.java | 11 ++++++----- .../invertIfCondition/afterNestedIf4.java | 3 +-- .../invertIfCondition/afterNestedIf5.java | 14 ++++++++++++++ .../invertIfCondition/beforeNestedIf5.java | 12 ++++++++++++ 4 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/invertIfCondition/afterNestedIf5.java create mode 100644 java/java-tests/testData/codeInsight/invertIfCondition/beforeNestedIf5.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 87ac4653c2aa..e8a878bf8f19 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 @@ -320,11 +320,12 @@ public class InvertIfConditionAction extends PsiElementBaseIntentionAction { final Project project = statement.getProject(); final PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory(); final CodeStyleManager codeStyle = CodeStyleManager.getInstance(project); - PsiCodeBlock codeBlock = factory.createCodeBlockFromText("{}", statement); - codeBlock = (PsiCodeBlock)codeStyle.reformat(codeBlock); - codeBlock.add(statement); - codeBlock = (PsiCodeBlock)statement.replace(codeBlock); - return codeBlock.getStatements()[0]; + PsiIfStatement ifStatement = (PsiIfStatement)factory.createStatementFromText("if (true) {}", statement); + ifStatement = (PsiIfStatement)codeStyle.reformat(ifStatement); + PsiStatement thenBranch = ifStatement.getThenBranch(); + ((PsiBlockStatement)thenBranch).getCodeBlock().add(statement); + PsiCodeBlock stmt = ((PsiBlockStatement)statement.replace(thenBranch)).getCodeBlock(); + return stmt.getStatements()[0]; } private static PsiIfStatement addAfterWithinCodeBlock(@NotNull PsiIfStatement ifStatement, @NotNull PsiStatement branch) { diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterNestedIf4.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterNestedIf4.java index 66f3bcd0613f..5c81bdf47230 100644 --- a/java/java-tests/testData/codeInsight/invertIfCondition/afterNestedIf4.java +++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterNestedIf4.java @@ -1,8 +1,7 @@ // "Invert 'if' condition" "true" class Main { boolean method(boolean a, boolean b) { - for (int i = 1; i < 10; i++) - { + for (int i = 1; i < 10; i++) { if (b) { continue; } diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/afterNestedIf5.java b/java/java-tests/testData/codeInsight/invertIfCondition/afterNestedIf5.java new file mode 100644 index 000000000000..6249a7642d03 --- /dev/null +++ b/java/java-tests/testData/codeInsight/invertIfCondition/afterNestedIf5.java @@ -0,0 +1,14 @@ +// "Invert 'if' condition" "true" +class Main { + Object foo(boolean b1, boolean b2) { + if (b1) { + return null; + } else { + if (b2) { + return null; + } + return "a"; + } + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/invertIfCondition/beforeNestedIf5.java b/java/java-tests/testData/codeInsight/invertIfCondition/beforeNestedIf5.java new file mode 100644 index 000000000000..8d1ae385f72b --- /dev/null +++ b/java/java-tests/testData/codeInsight/invertIfCondition/beforeNestedIf5.java @@ -0,0 +1,12 @@ +// "Invert 'if' condition" "true" +class Main { + Object foo(boolean b1, boolean b2) { + if (b1) { + return null; + } else if (!b2) { + return "a"; + } + + return null; + } +} \ No newline at end of file