diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSessionContainer.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSessionContainer.java index 677451023a5d..f1bfd6bf7540 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSessionContainer.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSessionContainer.java @@ -41,7 +41,7 @@ public class InferenceSessionContainer { final PsiSubstitutor callSession = findNestedSubstitutor(((PsiCallExpression)returnExpression).getArgumentList(), null); if (callSession == null) { final InferenceSession inferenceSession = - ExpressionCompatibilityConstraint.reduceExpressionCompatibilityConstraint(session, returnExpression, returnType); + ExpressionCompatibilityConstraint.reduceExpressionCompatibilityConstraint(session, returnExpression, returnType, false); if (inferenceSession != null && inferenceSession != session) { registerNestedSession(inferenceSession); session.propagateVariables(inferenceSession); 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 2e5594cb3a1a..0f8edeeab4e8 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 @@ -93,7 +93,7 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm } if (myExpression instanceof PsiCall) { - final InferenceSession callSession = reduceExpressionCompatibilityConstraint(session, myExpression, myT); + final InferenceSession callSession = reduceExpressionCompatibilityConstraint(session, myExpression, myT, true); if (callSession == null) { return false; } @@ -128,7 +128,8 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm public static InferenceSession reduceExpressionCompatibilityConstraint(InferenceSession session, PsiExpression expression, - PsiType targetType) { + PsiType targetType, + boolean registerErrorOnFailure) { if (!PsiPolyExpressionUtil.isPolyExpression(expression)) { return session; } @@ -194,8 +195,13 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm session.registerIncompatibleErrorMessage(message); } } + return null; + } + else if (registerErrorOnFailure) { + //keep a sign that an inference failed + session.registerIncompatibleErrorMessage("Failed to resolve argument"); + return null; } - return null; } return session; }