From ebf02771d4d5e8308e0b0f2baab54370ee7cf12f Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 29 May 2019 16:29:31 +0200 Subject: [PATCH] unchecked warning: don't warn for raw substitutor if parameter type mentions method's type parameter GitOrigin-RevId: 8f0b56e55747ff36fffc6d60ae06bb4aea9fcd96 --- .../UncheckedWarningLocalInspection.java | 7 ++++--- .../NoUncheckedWarningOnRawSubstitutor.java | 11 +++++++++++ .../daemon/LightAdvHighlightingJdk7Test.java | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NoUncheckedWarningOnRawSubstitutor.java diff --git a/java/java-impl/src/com/intellij/codeInspection/uncheckedWarnings/UncheckedWarningLocalInspection.java b/java/java-impl/src/com/intellij/codeInspection/uncheckedWarnings/UncheckedWarningLocalInspection.java index dd449aafaafd..8dd97edddd42 100644 --- a/java/java-impl/src/com/intellij/codeInspection/uncheckedWarnings/UncheckedWarningLocalInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/uncheckedWarnings/UncheckedWarningLocalInspection.java @@ -28,9 +28,8 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.*; import java.util.function.Supplier; public class UncheckedWarningLocalInspection extends AbstractBaseJavaLocalInspectionTool { @@ -524,7 +523,9 @@ public class UncheckedWarningLocalInspection extends AbstractBaseJavaLocalInspec final PsiParameter[] parameters = method.getParameterList().getParameters(); for (final PsiParameter parameter : parameters) { final PsiType parameterType = parameter.getType(); - if (PsiTypesUtil.mentionsTypeParametersOrUnboundedWildcard(parameterType, substitutor.getSubstitutionMap().keySet(), true)) { + Set typeParameters = new HashSet<>(substitutor.getSubstitutionMap().keySet()); + Arrays.stream(method.getTypeParameters()).forEach(typeParameters::remove); + if (PsiTypesUtil.mentionsTypeParametersOrUnboundedWildcard(parameterType, typeParameters, true)) { final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(method.getProject()); PsiType type = elementFactory.createType(method.getContainingClass(), substitutor); return JavaErrorMessages.message("generics.unchecked.call.to.member.of.raw.type", diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NoUncheckedWarningOnRawSubstitutor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NoUncheckedWarningOnRawSubstitutor.java new file mode 100644 index 000000000000..277bbc975fc6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/NoUncheckedWarningOnRawSubstitutor.java @@ -0,0 +1,11 @@ +interface Predicate<T> {} +class Foo { + static void process(Predicate predicate, C context) {} +} +interface I {} +class Bar implements I { + Predicate p; + { + Foo.process(p, new Bar()); + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingJdk7Test.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingJdk7Test.java index cc6296734c0f..219dbf7d7de1 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingJdk7Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingJdk7Test.java @@ -169,7 +169,7 @@ public class LightAdvHighlightingJdk7Test extends LightDaemonAnalyzerTestCase { public void testIntersectionTypeCast() { doTest(false, false); } public void testUsedMethodCalledViaReflectionInTheSameFile() { doTest(true, false); } public void testCatchSubclassOfThrownException() { doTest(true, false); } - + public void testNoUncheckedWarningOnRawSubstitutor() { doTest(true, false); } public void testArrayInitializerTypeCheckVariableType() { doTest(false, false);} public void testJavaUtilCollections_NoVerify() {