diff --git a/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java b/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java index dad757d08afc..5c7044ac58e5 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java @@ -970,11 +970,19 @@ public class TypeConversionUtil { } } else { + boolean effectiveAllowUncheckedConversion = allowUncheckedConversion; + if (typeRight instanceof PsiCapturedWildcardType) { + effectiveAllowUncheckedConversion = false; + final PsiClass psiClass = PsiUtil.resolveClassInType(((PsiCapturedWildcardType)typeRight).getWildcard().getBound()); + if (psiClass != null && !psiClass.hasTypeParameters()) { + effectiveAllowUncheckedConversion = allowUncheckedConversion; + } + } if (leftWildcard.isExtends()) { - return isAssignable(leftBound, typeRight, allowUncheckedConversion && !containsWildcards(leftBound)); + return isAssignable(leftBound, typeRight, effectiveAllowUncheckedConversion && !containsWildcards(leftBound)); } else { // isSuper - return isAssignable(typeRight, leftBound, allowUncheckedConversion && !containsWildcards(leftBound)); + return isAssignable(typeRight, leftBound, effectiveAllowUncheckedConversion && !containsWildcards(leftBound)); } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA92022.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA92022.java new file mode 100644 index 000000000000..6a9bb95983e3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA92022.java @@ -0,0 +1,23 @@ +class GetClassClient { + public void use() { + Class v1 = null; + Class> v2 = null; + v1 = v2; + v2 = v1; + } + + public static class LocalGeneric { + } +} + + +interface Comparable> {} +class List {} + +class Foo implements Comparable { + public static void main(String[] args){ + List list = null; + List c = null; + c = list; + } +} \ No newline at end of file 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 0fcc62cfc14e..dd7c0feddef5 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -193,6 +193,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { public void _testIDEA94011() throws Exception { doTest(false); } public void testDifferentTypeParamsInOverloadedMethods() throws Exception { doTest(true); } public void testIDEA91626() throws Exception { doTest(true); } + public void testIDEA92022() throws Exception { doTest(false); } public void testJavaUtilCollections_NoVerify() throws Exception { PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));