From 8e117beff5a032d22d909f12151f068ce0fb548d Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 3 Sep 2009 18:27:27 +0400 Subject: [PATCH] suspicious call should ignore captured wildcard types assignments (IDEADEV-39955) --- .../SuspiciousCollectionMethodCallsTest.java | 1 + .../SuspiciousCollectionsMethodCallsInspection.java | 3 +++ .../suspiciousCalls/IgnoreConvertible/expected.xml | 5 +++++ .../suspiciousCalls/IgnoreConvertible/src/Test.java | 4 ++++ .../inspection/suspiciousCalls/Wildcard/expected.xml | 9 +++++++++ .../inspection/suspiciousCalls/Wildcard/src/Test.java | 8 ++++++++ .../suspiciousCalls/WildcardCapture/expected.xml | 5 ----- 7 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 testData/inspection/suspiciousCalls/Wildcard/expected.xml create mode 100644 testData/inspection/suspiciousCalls/Wildcard/src/Test.java 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' -