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