diff --git a/inspections/tests/com/intellij/codeInspection/SuspiciousCollectionMethodCallsTest.java b/inspections/tests/com/intellij/codeInspection/SuspiciousCollectionMethodCallsTest.java index f1323f880fec..3d494ee5f4f7 100644 --- a/inspections/tests/com/intellij/codeInspection/SuspiciousCollectionMethodCallsTest.java +++ b/inspections/tests/com/intellij/codeInspection/SuspiciousCollectionMethodCallsTest.java @@ -21,6 +21,7 @@ public class SuspiciousCollectionMethodCallsTest extends InspectionTestCase { } public void testWildcardCapture() throws Exception { doTest(); } + public void testWildcard() throws Exception { doTest(); } public void testIgnoreConvertible() throws Exception { myTool.REPORT_CONVERTIBLE_METHOD_CALLS = false; doTest(); diff --git a/java/java-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousCollectionsMethodCallsInspection.java b/java/java-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousCollectionsMethodCallsInspection.java index 30e90bf53b87..3a2a29447353 100644 --- a/java/java-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousCollectionsMethodCallsInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/miscGenerics/SuspiciousCollectionsMethodCallsInspection.java @@ -143,6 +143,9 @@ public class SuspiciousCollectionsMethodCallsInspection extends BaseLocalInspect PsiType typeParamMapping = substitutor.substitute(typeParameter); if (typeParamMapping == null) return; String message = null; + if (typeParamMapping instanceof PsiCapturedWildcardType) { + typeParamMapping = ((PsiCapturedWildcardType)typeParamMapping).getWildcard(); + } if (!typeParamMapping.isAssignableFrom(argType)) { if (typeParamMapping.isConvertibleFrom(argType)) { if (REPORT_CONVERTIBLE_METHOD_CALLS) { diff --git a/testData/inspection/suspiciousCalls/IgnoreConvertible/expected.xml b/testData/inspection/suspiciousCalls/IgnoreConvertible/expected.xml index d704d58ed391..77314fecede1 100644 --- a/testData/inspection/suspiciousCalls/IgnoreConvertible/expected.xml +++ b/testData/inspection/suspiciousCalls/IgnoreConvertible/expected.xml @@ -1,4 +1,9 @@ + + Test.java + 13 + 'List<? extends Number>' may not contain objects of type 'String' + diff --git a/testData/inspection/suspiciousCalls/IgnoreConvertible/src/Test.java b/testData/inspection/suspiciousCalls/IgnoreConvertible/src/Test.java index 09ea644747ec..8f627f6ff22b 100644 --- a/testData/inspection/suspiciousCalls/IgnoreConvertible/src/Test.java +++ b/testData/inspection/suspiciousCalls/IgnoreConvertible/src/Test.java @@ -8,4 +8,8 @@ class Clazz { return; } } + + void foo(List c) { + c.contains(""); + } } \ No newline at end of file diff --git a/testData/inspection/suspiciousCalls/Wildcard/expected.xml b/testData/inspection/suspiciousCalls/Wildcard/expected.xml new file mode 100644 index 000000000000..39cdee891698 --- /dev/null +++ b/testData/inspection/suspiciousCalls/Wildcard/expected.xml @@ -0,0 +1,9 @@ + + + + Test.java + 6 + 'List<? extends Number>' may not contain objects of type 'String' + + + diff --git a/testData/inspection/suspiciousCalls/Wildcard/src/Test.java b/testData/inspection/suspiciousCalls/Wildcard/src/Test.java new file mode 100644 index 000000000000..192549b3e79e --- /dev/null +++ b/testData/inspection/suspiciousCalls/Wildcard/src/Test.java @@ -0,0 +1,8 @@ +import java.util.List; +import java.util.ArrayList; + +class Clazz { + void foo(List l) { + boolean b = l.contains(""); + } +} \ No newline at end of file diff --git a/testData/inspection/suspiciousCalls/WildcardCapture/expected.xml b/testData/inspection/suspiciousCalls/WildcardCapture/expected.xml index f72cb86c79d0..d704d58ed391 100644 --- a/testData/inspection/suspiciousCalls/WildcardCapture/expected.xml +++ b/testData/inspection/suspiciousCalls/WildcardCapture/expected.xml @@ -1,9 +1,4 @@ - - Test.java - 7 - Suspicious call to 'List.indexOf' -