method refs: wildcards treatment (IDEA-99828)

This commit is contained in:
Anna Kozlova
2013-01-28 12:37:02 +04:00
parent 2ccf09a58f
commit 857c23caf2
3 changed files with 20 additions and 2 deletions

View File

@@ -243,7 +243,7 @@ public class PsiMethodReferenceUtil {
final int min = Math.min(signatureParameterTypes2.length, signatureParameterTypes1.length);
for (int i = 0; i < min; i++) {
final PsiType type1 = psiSubstitutor.substitute(GenericsUtil.eliminateWildcards(signatureParameterTypes1[offset + i]));
final PsiType type1 = GenericsUtil.eliminateWildcards(psiSubstitutor.substitute(signatureParameterTypes1[offset + i]));
if (isVarargs && i == min - 1) {
if (!TypeConversionUtil.isAssignable(((PsiArrayType)signatureParameterTypes2[i]).getComponentType(), type1) &&
!TypeConversionUtil.isAssignable(signatureParameterTypes2[i], type1)) {
@@ -251,7 +251,7 @@ public class PsiMethodReferenceUtil {
}
}
else {
if (!TypeConversionUtil.isAssignable(signatureParameterTypes2[i], psiSubstitutor.substitute(GenericsUtil.eliminateWildcards(type1)))) {
if (!TypeConversionUtil.isAssignable(signatureParameterTypes2[i], type1)) {
return false;
}
}

View File

@@ -0,0 +1,14 @@
public class Main {
public static <T> void make(final Consumer<? super T> consumer) {
Sink<T> accept = (Sink<T>) consumer::accept;
Consumer<T> accept1 = (Consumer<T>)consumer::accept;
}
}
interface Sink<T> extends Consumer<T> {
}
interface Consumer<T> {
public void accept(T t);
}

View File

@@ -163,6 +163,10 @@ public class MethodRefHighlightingTest extends LightDaemonAnalyzerTestCase {
doTest();
}
public void testCapturedWildcards() throws Exception {
doTest();
}
private void doTest() throws Exception {
doTest(false);
}