IDEA-216381 exclude non-comparable collection elements (IDEA-CR-48589)

GitOrigin-RevId: 58ab178f4b0c6662a08949c5adbc95fe64b3e770
This commit is contained in:
Tagir Valeev
2019-07-02 06:52:16 +03:00
committed by intellij-monorepo-bot
parent 6cc1a148ac
commit 77e2d54bb0
3 changed files with 9 additions and 0 deletions
@@ -8,6 +8,8 @@ class Test {
list.stream().max(String.CASE_INSENSITIVE_ORDER);
list.stream().min(String.CASE_INSENSITIVE_ORDER);
list.stream().max(Comparator.naturalOrder());
List<Object> list2 = Arrays.asList("a", "b", "c");
list2.stream().min(Collections.reverseOrder());
Collector<String, ?, Optional<String>> c = Collectors.minBy(Comparator.comparing(String::length));
}
}
@@ -8,6 +8,8 @@ class Test {
list.stream().min(String.CASE_INSENSITIVE_ORDER.reversed());
list.stream().max(Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));
list.stream().min(Collections.reverseOrder());
List<Object> list2 = Arrays.asList("a", "b", "c");
list2.stream().min(Collections.reverseOrder());
Collector<String, ?, Optional<String>> c = Collectors.maxBy(Comparator.comparing(String::length, Comparator.reverseOrder()));
}
}
@@ -3,6 +3,7 @@ package com.intellij.codeInspection;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ArrayUtil;
@@ -116,6 +117,10 @@ public class RedundantComparatorComparingInspection extends AbstractBaseJavaLoca
}
}
if (REVERSE_ORDER_FOR_NATURAL.test(call)) {
if (!InheritanceUtil.isInheritor(PsiUtil.substituteTypeParameter(call.getType(), JAVA_UTIL_COMPARATOR, 0, false),
JAVA_LANG_COMPARABLE)) {
return null;
}
PsiReferenceParameterList parameterList = call.getMethodExpression().getParameterList();
return JAVA_UTIL_COMPARATOR + "."+(parameterList == null ? "" : ct.text(parameterList))+"naturalOrder()";
}