diff --git a/java/java-impl/src/com/intellij/codeInspection/streamToLoop/TerminalOperation.java b/java/java-impl/src/com/intellij/codeInspection/streamToLoop/TerminalOperation.java index 679b8dbb4bd8..09bce16d8bbe 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamToLoop/TerminalOperation.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamToLoop/TerminalOperation.java @@ -709,7 +709,8 @@ abstract class TerminalOperation extends Operation { if(myComparator != null) { myComparator.transform(context, inVar.getName(), best); PsiExpression expression = myComparator.getExpression(); - String text = ParenthesesUtils.areParenthesesNeeded(JavaTokenType.GT, expression) ? "("+expression.getText()+")" : expression.getText(); + int expressionPrecedence = ParenthesesUtils.getPrecedence(expression); + String text = expressionPrecedence >= ParenthesesUtils.EQUALITY_PRECEDENCE ? "("+expression.getText()+")" : expression.getText(); comparePredicate = myTemplate.replace("{comparator}", text); } else { comparePredicate = myTemplate.replace("{best}", best).replace("{item}", inVar.getName()); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/afterMaxLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/afterMaxLambda.java index 104a93c4a8c1..0ba2e1bcc026 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/afterMaxLambda.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/afterMaxLambda.java @@ -3,11 +3,11 @@ import java.util.*; public class Main { - private static Optional max(Map> dependencies, String fruits, Map weights) { + private static Optional max(Map> dependencies, String fruits, Map weights) { boolean seen = false; String best = null; for (String s : dependencies.get(fruits)) { - if (!seen || weights.get(s).compareTo(weights.get(best)) > 0) { + if (!seen || weights.get(s) - weights.get(best) > 0) { seen = true; best = s; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/beforeMaxLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/beforeMaxLambda.java index 5fe009e4e49a..9e6a0dab7574 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/beforeMaxLambda.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamToLoop/beforeMaxLambda.java @@ -3,7 +3,7 @@ import java.util.*; public class Main { - private static Optional max(Map> dependencies, String fruits, Map weights) { - return dependencies.get(fruits).stream().max((o1, o2) -> weights.get(o1).compareTo(weights.get(o2))); + private static Optional max(Map> dependencies, String fruits, Map weights) { + return dependencies.get(fruits).stream().max((o1, o2) -> weights.get(o1)-weights.get(o2)); } } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ParenthesesUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ParenthesesUtils.java index a69ca8c5d875..89412e503bcf 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ParenthesesUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ParenthesesUtils.java @@ -18,7 +18,6 @@ package com.siyeh.ig.psiutils; import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; -import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -67,7 +66,7 @@ public class ParenthesesUtils { tokenMap.put(JavaTokenType.GTGTEQ, JavaTokenType.GTGT); tokenMap.put(JavaTokenType.GTGTGTEQ, JavaTokenType.GTGTGT); } - + static { s_binaryOperatorPrecedence.put(JavaTokenType.PLUS, ADDITIVE_PRECEDENCE); s_binaryOperatorPrecedence.put(JavaTokenType.MINUS, ADDITIVE_PRECEDENCE); @@ -555,16 +554,11 @@ public class ParenthesesUtils { return parentPrecedence < childPrecedence; } - @Contract("_, null -> false") public static boolean areParenthesesNeeded(PsiJavaToken sign, PsiExpression rhs) { - return areParenthesesNeeded(sign.getTokenType(), rhs); - } - - @Contract("_, null -> false") - public static boolean areParenthesesNeeded(IElementType signTokenType, PsiExpression rhs) { if (rhs instanceof PsiPolyadicExpression) { final PsiPolyadicExpression binaryExpression = (PsiPolyadicExpression)rhs; final int precedence1 = getPrecedenceForOperator(binaryExpression.getOperationTokenType()); + final IElementType signTokenType = sign.getTokenType(); final IElementType newOperatorToken = tokenMap.get(signTokenType); final int precedence2 = getPrecedenceForOperator(newOperatorToken); return precedence1 >= precedence2 || !isCommutativeOperator(newOperatorToken);