lambda: use wildcard bound for inferred param

This commit is contained in:
anna
2012-07-20 16:04:37 +02:00
parent c3276bd56e
commit 01aefae9db
2 changed files with 22 additions and 1 deletions

View File

@@ -123,7 +123,14 @@ public class LambdaUtil {
if (methodSignature != null) {
final PsiType[] types = methodSignature.getParameterTypes();
if (parameterIndex < types.length) {
return resolveResult.getSubstitutor().substitute(types[parameterIndex]);
final PsiType psiType = resolveResult.getSubstitutor().substitute(types[parameterIndex]);
if (psiType instanceof PsiWildcardType) {
final PsiType bound = ((PsiWildcardType)psiType).getBound();
if (bound != null) {
return bound;
}
}
return psiType;
}
}
}

View File

@@ -57,4 +57,18 @@ class CastInference {
foo((I1<Integer>)() -> 42);
I1<Integer> i1 = (I1<Integer>)() -> 42;
}
}
class WildcardBoundsUsage {
interface I<X> {
boolean foo(X x);
}
public I<Character> bar(I<? super Character> predicate) {
return null;
}
{
I<Character> i = bar(c -> c.compareTo('x') < 0);
}
}