diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java index 0605f9f6c9be..650c46a6670a 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java @@ -472,6 +472,14 @@ public final class PsiUtil extends PsiUtilCore { PsiType argType = args[args.length - 1]; if (argType == null) return ApplicabilityLevel.NOT_APPLICABLE; if (TypeConversionUtil.isAssignable(parmType, argType)) return ApplicabilityLevel.FIXED_ARITY; + if (isRawSubstitutor(method, substitutorForMethod)) { + final PsiType erasedParamType = TypeConversionUtil.erasure(parmType); + final PsiType erasedArgType = TypeConversionUtil.erasure(argType); + if (erasedArgType != null && erasedParamType != null && + TypeConversionUtil.isAssignable(erasedParamType, erasedArgType)) { + return ApplicabilityLevel.FIXED_ARITY; + } + } } if (method.isVarArgs() && languageLevel.compareTo(LanguageLevel.JDK_1_5) >= 0) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/MethodCallParamsOnRawType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/MethodCallParamsOnRawType.java new file mode 100644 index 000000000000..e399e5a54e48 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/MethodCallParamsOnRawType.java @@ -0,0 +1,32 @@ +class TestOnRawType { + public static void main(String[] args) { + new FooGenerator().process(TestOnRawType.class); + new FooGenerator().process(AFoo.class); + new FooGenerator().process(MFoo.class); + new FooGenerator().process(TestOnRawType.class); + new FooGenerator().process(AFoo.class); + new FooGenerator().process(MFoo.class); + } + + static class AFoo {} + static class MFoo extends AFoo {} + static class FooGenerator { + public void process(Class cls) { + } + } +} + +class TestNonGenericType { + public static void main(String[] args) { + new FooGenerator().process(TestNonGenericType.class); + new FooGenerator().process(AFoo.class); + new FooGenerator().process(MFoo.class); + } + + static class AFoo {} + static class MFoo extends AFoo {} + static class FooGenerator { + public void process(Class cls) { + } + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java index 9d466584a653..875f94ca174b 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -208,6 +208,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { public void testWildcardsBoundsIntersection() throws Exception { doTest17Incompatibility(false); } public void testOverrideWithMoreSpecificReturn() throws Exception { doTest17Incompatibility(false); } public void testIDEA97888() throws Exception { doTest17Incompatibility(false); } + public void testMethodCallParamsOnRawType() throws Exception { doTest(false); } public void testJavaUtilCollections_NoVerify() throws Exception { PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));