method references with qualifier with captured wildcard type: retrieve upper bound as it is done for method calls

This commit is contained in:
Anna Kozlova
2015-12-30 18:56:58 +01:00
parent e6eca992f0
commit 105f33870f
3 changed files with 22 additions and 1 deletions
@@ -122,7 +122,13 @@ public class PsiMethodReferenceUtil {
PsiSubstitutor substitutor = PsiSubstitutor.EMPTY;
final PsiExpression expression = methodReferenceExpression.getQualifierExpression();
if (expression != null) {
final PsiType expressionType = replaceArrayType(expression.getType(), expression);
PsiType expressionType = expression.getType();
if (expressionType instanceof PsiCapturedWildcardType) {
expressionType = ((PsiCapturedWildcardType)expressionType).getUpperBound();
}
else {
expressionType = replaceArrayType(expressionType, expression);
}
PsiClassType.ClassResolveResult result = PsiUtil.resolveGenericsClassInType(expressionType);
containingClass = result.getElement();
if (containingClass != null) {
@@ -0,0 +1,11 @@
final class Test {
static <T> T create(Iterable<? extends T> iterable) {
return null;
}
public static <T> void testError(Iterable<? extends T> iterable) {
Runnable r = create(iterable)::toString;
}
}
@@ -482,6 +482,10 @@ public class NewMethodRefHighlightingTest extends LightDaemonAnalyzerTestCase {
doTest();
}
public void testQualifierOfCapturedWildcardType() throws Exception {
doTest();
}
private void doTest() {
doTest(false);
}