From 9853fb62e797c7a4dc1f71d1ae3757d3d9a8148b Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 9 Jun 2014 12:30:20 +0400 Subject: [PATCH] suspicious removeAll: compare type arguments, not qualifiers --- .../miscGenerics/SuspiciousMethodCallUtil.java | 11 +++++++---- .../testData/inspection/suspiciousCalls/SetList.java | 8 ++++++++ .../SuspiciousCollectionMethodCallsTest.java | 1 + 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/inspection/suspiciousCalls/SetList.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java index 41111cba76fe..ecf21db51d47 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousMethodCallUtil.java @@ -158,11 +158,14 @@ public class SuspiciousMethodCallUtil { PsiType paramType = parameters[0].getType(); if (InheritanceUtil.isInheritor(paramType, CommonClassNames.JAVA_UTIL_COLLECTION)) { PsiType qualifierType = qualifier.getType(); - if (qualifierType != null && !qualifierType.isAssignableFrom(argType)) { + if (qualifierType != null) { final PsiType itemType = JavaGenericsUtil.getCollectionItemType(argType, calleeMethod.getResolveScope()); - return InspectionsBundle.message("inspection.suspicious.collections.method.calls.problem.descriptor", - PsiFormatUtil.formatType(qualifierType, 0, PsiSubstitutor.EMPTY), - PsiFormatUtil.formatType(itemType, 0, PsiSubstitutor.EMPTY)); + final PsiType qualifierItemType = JavaGenericsUtil.getCollectionItemType(qualifierType, calleeMethod.getResolveScope()); + if (qualifierItemType != null && itemType != null && !qualifierItemType.isAssignableFrom(itemType)) { + return InspectionsBundle.message("inspection.suspicious.collections.method.calls.problem.descriptor", + PsiFormatUtil.formatType(qualifierType, 0, PsiSubstitutor.EMPTY), + PsiFormatUtil.formatType(itemType, 0, PsiSubstitutor.EMPTY)); + } } return null; } diff --git a/java/java-tests/testData/inspection/suspiciousCalls/SetList.java b/java/java-tests/testData/inspection/suspiciousCalls/SetList.java new file mode 100644 index 000000000000..19f0b0f60732 --- /dev/null +++ b/java/java-tests/testData/inspection/suspiciousCalls/SetList.java @@ -0,0 +1,8 @@ +import java.util.List; +import java.util.Set; + +class Clazz { + void foo(List l, Set s) { + l.removeAll(s); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCallsTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCallsTest.java index 404219c5d067..4d3ef19d9828 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCallsTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCallsTest.java @@ -21,6 +21,7 @@ public class SuspiciousCollectionMethodCallsTest extends LightCodeInsightFixture public void testConcurrentHashMap() throws Exception { doTest(); } public void testRemoveAllCall() throws Exception { doTest(); } + public void testSetList() throws Exception { doTest(); } public void testUseDfa() throws Exception { doTest(); } public void testWildcard() throws Exception { doTest(); } public void testIgnoreConvertible() throws Exception {