diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/UseCompareMethodInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/UseCompareMethodInspection.java index 4fa393c8b415..316c1c778575 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/UseCompareMethodInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/UseCompareMethodInspection.java @@ -13,6 +13,7 @@ import com.siyeh.ig.psiutils.CommentTracker; import com.siyeh.ig.psiutils.ControlFlowUtils; import com.siyeh.ig.psiutils.ExpressionUtils; import com.siyeh.ig.psiutils.ParenthesesUtils; +import com.siyeh.ig.style.SimplifiableIfStatementInspection; import one.util.streamex.StreamEx; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.Nls; @@ -102,7 +103,7 @@ public class UseCompareMethodInspection extends AbstractBaseJavaLocalInspectionT if (!storeCondition(result, firstCondition, firstExpression)) return null; if (!storeCondition(result, secondCondition, ExpressionUtils.getAssignmentTo(secondStatement, variable))) return null; if (!storeCondition(result, null, ExpressionUtils.getAssignmentTo(thirdStatement, variable))) return null; - return fromMap(result, firstExpression, assignment); + return fromMap(result, firstExpression, firstStatement); } private static PsiStatement getElse(PsiIfStatement ifStatement) { @@ -299,7 +300,7 @@ public class UseCompareMethodInspection extends AbstractBaseJavaLocalInspectionT myClass = aClass; } - private void replace(PsiElement toReplace, CommentTracker ct) { + private @NotNull PsiElement replace(PsiElement toReplace, CommentTracker ct) { String replacement; if (this.myLeft.getType() instanceof PsiClassType) { replacement = ct.text(this.myLeft, ParenthesesUtils.METHOD_CALL_PRECEDENCE) + ".compareTo(" + ct.text(this.myRight) + ")"; @@ -307,10 +308,10 @@ public class UseCompareMethodInspection extends AbstractBaseJavaLocalInspectionT replacement = this.myClass.getCanonicalText() + ".compare(" + ct.text(this.myLeft) + "," + ct.text(this.myRight) + ")"; } if(toReplace == myTemplate) { - ct.replaceAndRestoreComments(myToReplace, replacement); + return ct.replaceAndRestoreComments(myToReplace, replacement); } else { ct.replace(myToReplace, replacement); - ct.replaceAndRestoreComments(toReplace, myTemplate); + return ct.replaceAndRestoreComments(toReplace, myTemplate); } } @@ -369,8 +370,9 @@ public class UseCompareMethodInspection extends AbstractBaseJavaLocalInspectionT } if (info == null) return; CommentTracker ct = new CommentTracker(); - info.replace(toReplace, ct); + PsiElement result = info.replace(toReplace, ct); StreamEx.of(toDelete).nonNull().filter(PsiElement::isValid).forEach(e -> new CommentTracker().deleteAndRestoreComments(e)); + SimplifiableIfStatementInspection.tryJoinDeclaration(result); } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/useCompareMethod/afterIfAssign.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/useCompareMethod/afterIfAssign.java index 4e7f3f6d3893..61a93077483f 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/useCompareMethod/afterIfAssign.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/useCompareMethod/afterIfAssign.java @@ -1,9 +1,8 @@ // "Fix all ''compare()' method can be used to compare numbers' problems in file" "true" class Test { public void test(String s1, String s2) { - int res; - res = Integer.compare(s2.length(), s1.length()) - System.out.println(res); + int res = Integer.compare(s2.length(), s1.length()); + System.out.println(res); } public void testMissingElse(String s1, String s2) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/useCompareMethod/afterWithVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/useCompareMethod/afterWithVariable.java new file mode 100644 index 000000000000..d4c9bd4107ee --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/useCompareMethod/afterWithVariable.java @@ -0,0 +1,7 @@ +// "Fix all ''compare()' method can be used to compare numbers' problems in file" "true" +class Test { + public static int _compare(int mask1, int mask2) { + int compareResult = Integer.compare(mask1, mask2); + return compareResult; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/useCompareMethod/beforeWithVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/useCompareMethod/beforeWithVariable.java new file mode 100644 index 000000000000..7234cae5e13a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/useCompareMethod/beforeWithVariable.java @@ -0,0 +1,14 @@ +// "Fix all ''compare()' method can be used to compare numbers' problems in file" "true" +class Test { + public static int _compare(int mask1, int mask2) { + int compareResult; + if (mask1 > mask2) { + compareResult = 1; + } else if (mask1 == mask2) { + compareResult = 0; + } else { + compareResult = -1; + } + return compareResult; + } +} \ No newline at end of file