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 extends Number> 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 extends Number> 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'
-