mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
lambda: skip conditional condition during inference from return value
This commit is contained in:
@@ -311,6 +311,18 @@ public class LambdaUtil {
|
||||
if (lambdaParams.length != methodParameters.length) return false;
|
||||
final boolean [] independent = new boolean[]{true};
|
||||
expression.accept(new JavaRecursiveElementWalkingVisitor() {
|
||||
@Override
|
||||
public void visitConditionalExpression(PsiConditionalExpression expression) {
|
||||
final PsiExpression thenExpression = expression.getThenExpression();
|
||||
if (thenExpression != null) {
|
||||
thenExpression.accept(this);
|
||||
}
|
||||
final PsiExpression elseExpression = expression.getElseExpression();
|
||||
if (elseExpression != null) {
|
||||
elseExpression.accept(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitReferenceExpression(PsiReferenceExpression expression) {
|
||||
super.visitReferenceExpression(expression);
|
||||
|
||||
+6
-1
@@ -605,7 +605,12 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
|
||||
final List<PsiExpression> expressions = lambdaExpression.getReturnExpressions();
|
||||
for (final PsiExpression expression : expressions) {
|
||||
final boolean independent = LambdaUtil.isFreeFromTypeInferenceArgs(methodParameters, lambdaExpression, expression);
|
||||
if (independent && methodParamsDependOnTypeParams) return FAILED_INFERENCE;
|
||||
if (independent && methodParamsDependOnTypeParams ) {
|
||||
if (lowerBound != PsiType.NULL) {
|
||||
return null;
|
||||
}
|
||||
return FAILED_INFERENCE;
|
||||
}
|
||||
if (!independent) {
|
||||
if (lowerBound != PsiType.NULL) {
|
||||
return null;
|
||||
|
||||
+12
@@ -37,3 +37,15 @@ class Test {
|
||||
}
|
||||
}
|
||||
|
||||
class Test1 {
|
||||
interface I<T, V> {
|
||||
V _(T t);
|
||||
}
|
||||
|
||||
static <V> void bar(I<String, V> ii, I<V, String> ik){}
|
||||
|
||||
{
|
||||
bar(s -> s.equals("") ? 0 : 1, i -> "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user