diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java index 765b3c81485f..b13a179ecbf1 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java @@ -113,7 +113,10 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm callSession.initExpressionConstraints(parameters, args, myExpression); substitutor = callSession.infer(parameters, args, myExpression, true); } - constraints.add(new TypeCompatibilityConstraint(GenericsUtil.eliminateWildcards(myT, false), substitutor.substitute(returnType))); + final PsiType capturedReturnType = myExpression instanceof PsiMethodCallExpression + ? PsiMethodCallExpressionImpl.captureReturnType((PsiMethodCallExpression)myExpression, method, returnType, substitutor) + : substitutor.substitute(returnType); + constraints.add(new TypeCompatibilityConstraint(GenericsUtil.eliminateWildcards(myT, false), capturedReturnType)); } } return true;