From 8e571b32103ad62bf33f3a1faaacf0ef56d73676 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 13 Nov 2013 18:46:54 +0100 Subject: [PATCH] new inference: capture return type to emulate method call expression type (cherry picked from commit a14b996d8c3efe5b1dc4a6fc3d45aea5feff6197) --- .../constraints/ExpressionCompatibilityConstraint.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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;