assignment fix for super wildcards (IDEA-125031)

This commit is contained in:
Anna Kozlova
2014-05-13 18:04:55 +04:00
parent 6e2f355a81
commit b32b3332c4
3 changed files with 17 additions and 1 deletions
@@ -991,7 +991,7 @@ public class TypeConversionUtil {
return isAssignable(leftBound, typeRight, effectiveAllowUncheckedConversion && !containsWildcards(leftBound));
}
else { // isSuper
return isAssignable(typeRight, leftBound, effectiveAllowUncheckedConversion && !containsWildcards(leftBound));
return isAssignable(typeRight, leftBound, false);
}
}
}
@@ -0,0 +1,15 @@
import java.util.Set;
class Test {
public static void test(Set foo, Matcher<Iterable<String>> matcher) {
assertThat<error descr="'assertThat(Test.Matcher<? super java.util.Set>, java.util.Set)' in 'Test' cannot be applied to '(Test.Matcher<java.lang.Iterable<java.lang.String>>, java.util.Set)'">(matcher, foo)</error>;
Matcher<Iterable<String>> b = null;
<error descr="Incompatible types. Found: 'Test.Matcher<java.lang.Iterable<java.lang.String>>', required: 'Test.Matcher<? super java.util.Set>'">Matcher<? super Set> a = b;</error>
}
public static <T> void assertThat(Matcher<? super T> matcher, T actual) {}
static class Matcher<K> {}
}
@@ -351,6 +351,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase {
public void testIDEA124352() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
public void testIDEA124019() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
public void testIDEA123509() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
public void testIDEA125031() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
public void testJavaUtilCollections_NoVerify() throws Exception {
PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));