lambda: inference from formal params fixed (IDEA-101176)

This commit is contained in:
anna
2013-02-18 18:13:09 +01:00
parent dbd2a5db98
commit ec1fcb263f
3 changed files with 17 additions and 2 deletions

View File

@@ -743,7 +743,7 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
Pair<PsiType, ConstraintType> constraint = null;
final List<PsiExpression> expressions = LambdaUtil.getReturnExpressions(lambdaExpression);
for (final PsiExpression expression : expressions) {
final boolean independent = LambdaUtil.isFreeFromTypeInferenceArgs(methodParameters, lambdaExpression, expression, subst, functionalInterfaceType, typeParam);
final boolean independent = lambdaExpression.hasFormalParameterTypes() || LambdaUtil.isFreeFromTypeInferenceArgs(methodParameters, lambdaExpression, expression, subst, functionalInterfaceType, typeParam);
if (!independent) {
if (lowerBound != PsiType.NULL) {
return null;
@@ -817,7 +817,7 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
final PsiParameter[] methodParameters = method.getParameterList().getParameters();
PsiType[] methodParamTypes = new PsiType[methodParameters.length];
for (int i = 0; i < methodParameters.length; i++) {
methodParamTypes[i] = subst.substitute(methodParameters[i].getType());
methodParamTypes[i] = GenericsUtil.eliminateWildcards(subst.substitute(methodParameters[i].getType()));
}
return inferTypeForMethodTypeParameterInner(typeParam, methodParamTypes, lambdaArgs, subst, null, DefaultParameterTypeInferencePolicy.INSTANCE);
}

View File

@@ -0,0 +1,11 @@
class IDEA101176 {
static {
foo((Integer i) -> i > 60);
}
static <T> void foo(Predicate<? super T> p){}
interface Predicate<T> {
public boolean test(T t);
}
}

View File

@@ -45,6 +45,10 @@ public class LambdaParamsTest extends LightDaemonAnalyzerTestCase {
doTest();
}
public void testInferFromFormal() throws Exception {
doTest();
}
private void doTest() throws Exception {
doTest(BASE_PATH + "/" + getTestName(false) + ".java", false, false);
}