diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/ManualMinMaxCalculationInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/ManualMinMaxCalculationInspection.java index 1db0ca172242..f46af47b75b4 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/ManualMinMaxCalculationInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/ManualMinMaxCalculationInspection.java @@ -136,17 +136,28 @@ public class ManualMinMaxCalculationInspection extends AbstractBaseJavaLocalInsp if (model == null) return; String replacement = createReplacement(model.getCondition()); if (replacement == null) return; - PsiExpression toReplace = model.getThenExpression(); + PsiStatement elseBranch = model.getElseBranch(); + final PsiElement result; + if (elseBranch instanceof PsiDeclarationStatement) { + result = replace(ifStatement, elseBranch, model.getElseExpression(), replacement); + elseBranch.delete(); + } + else { + result = replace(ifStatement, model.getThenBranch(), model.getThenExpression(), replacement); + if (!PsiTreeUtil.isAncestor(ifStatement, elseBranch, true)) { + new CommentTracker().deleteAndRestoreComments(elseBranch); + } + } + SimplifiableIfStatementInspection.tryJoinDeclaration(result); + } + + private static @NotNull PsiElement replace(@NotNull PsiIfStatement ifStatement, + @NotNull PsiStatement branch, @NotNull PsiExpression toReplace, + @NotNull String replacement) { PsiReplacementUtil.replaceExpression(toReplace, replacement, new CommentTracker()); CommentTracker tracker = new CommentTracker(); - PsiStatement thenBranch = model.getThenBranch(); - tracker.text(thenBranch); - PsiStatement elseBranch = model.getElseBranch(); - if (!PsiTreeUtil.isAncestor(ifStatement, elseBranch, true)) { - new CommentTracker().deleteAndRestoreComments(elseBranch); - } - PsiElement result = PsiReplacementUtil.replaceStatement(ifStatement, thenBranch.getText(), tracker); - SimplifiableIfStatementInspection.tryJoinDeclaration(result); + tracker.text(branch); + return PsiReplacementUtil.replaceStatement(ifStatement, branch.getText(), tracker); } @Nullable diff --git a/java/java-tests/testData/inspection/manualMinMaxCalculation/afterDeclarationBeforeIf.java b/java/java-tests/testData/inspection/manualMinMaxCalculation/afterDeclarationBeforeIf.java new file mode 100644 index 000000000000..807c9b08bf79 --- /dev/null +++ b/java/java-tests/testData/inspection/manualMinMaxCalculation/afterDeclarationBeforeIf.java @@ -0,0 +1,12 @@ +// "Replace with 'Math.min'" "true" +class Test { + + void test(int maxDrain) { + /*2*/ + /*3*/ + /*4*/ + /*5*/ + /*6*/ + int /*0*/drained = /*1*/Math.min(10, maxDrain); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/manualMinMaxCalculation/beforeDeclarationBeforeIf.java b/java/java-tests/testData/inspection/manualMinMaxCalculation/beforeDeclarationBeforeIf.java new file mode 100644 index 000000000000..10a0c867c7c0 --- /dev/null +++ b/java/java-tests/testData/inspection/manualMinMaxCalculation/beforeDeclarationBeforeIf.java @@ -0,0 +1,10 @@ +// "Replace with 'Math.min'" "true" +class Test { + + void test(int maxDrain) { + int /*0*/drained = /*1*/maxDrain; + if /*2*/(10/*3*/ < maxDrain) { + drained/*4*/ = 10/*5*/; + }/*6*/ + } +} \ No newline at end of file