From f19d9e91d80a1ecbbbc3f25809aacff36a069369 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 2 Dec 2024 14:32:14 +0100 Subject: [PATCH] [java-intentions] Reenable side-effect extraction for bare loop and if bodies (follow-up to IDEA-356722) GitOrigin-RevId: 8fe8b5b70f19cf1cb3b268edbacc07abcb155f3d --- .../daemon/impl/analysis/HighlightUtil.java | 5 ++++- .../deleteSideEffectsAware/afterIfBody.java | 14 ++++++++++++++ .../deleteSideEffectsAware/afterLoopBody.java | 14 ++++++++++++++ .../deleteSideEffectsAware/beforeIfBody.java | 8 ++++++++ .../deleteSideEffectsAware/beforeLoopBody.java | 8 ++++++++ 5 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/afterIfBody.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/afterLoopBody.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/beforeIfBody.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/beforeLoopBody.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 3e489606f93a..eac6afb153b9 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -1867,7 +1867,10 @@ public final class HighlightUtil { List registrar = new ArrayList<>(); HighlightFixUtil.registerFixesForExpressionStatement(statement, registrar); QuickFixAction.registerQuickFixActions(error, null, registrar); - if (expressionStatement.getParent() instanceof PsiCodeBlock) { + PsiElement parent = expressionStatement.getParent(); + if (parent instanceof PsiCodeBlock || + parent instanceof PsiIfStatement || + parent instanceof PsiLoopStatement loop && loop.getBody() == expressionStatement) { IntentionAction action = PriorityIntentionActionWrapper .lowPriority(getFixFactory().createDeleteSideEffectAwareFix(expressionStatement)); error.registerFix(action, null, null, null, null); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/afterIfBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/afterIfBody.java new file mode 100644 index 000000000000..ea848e427dcd --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/afterIfBody.java @@ -0,0 +1,14 @@ +// "Extract side effects as an 'if' statement" "true-preview" +class Z { + + void z() { + int i = 0; + if (true) { + if ((i < 100)) { + i++; + } else { + i--; + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/afterLoopBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/afterLoopBody.java new file mode 100644 index 000000000000..dff69802c31b --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/afterLoopBody.java @@ -0,0 +1,14 @@ +// "Extract side effects as an 'if' statement" "true-preview" +class Z { + + void z() { + int i = 0; + for(int j=0;j<100;j++) { + if ((i < 100)) { + i++; + } else { + i--; + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/beforeIfBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/beforeIfBody.java new file mode 100644 index 000000000000..a94ddf9d2472 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/beforeIfBody.java @@ -0,0 +1,8 @@ +// "Extract side effects as an 'if' statement" "true-preview" +class Z { + + void z() { + int i = 0; + if (true) (i < 100) ? i++ : i-- + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/beforeLoopBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/beforeLoopBody.java new file mode 100644 index 000000000000..0f2937b234be --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware/beforeLoopBody.java @@ -0,0 +1,8 @@ +// "Extract side effects as an 'if' statement" "true-preview" +class Z { + + void z() { + int i = 0; + for(int j=0;j<100;j++) (i < 100) ? i++ : i-- + } +} \ No newline at end of file