suspicious removeAll: compare type arguments, not qualifiers

This commit is contained in:
Anna Kozlova
2014-06-09 15:32:51 +04:00
parent 1dc83a996f
commit 9853fb62e7
3 changed files with 16 additions and 4 deletions
@@ -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;
}
@@ -0,0 +1,8 @@
import java.util.List;
import java.util.Set;
class Clazz {
void foo(List<String> l, Set<String> s) {
l.removeAll(s);
}
}
@@ -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 {