From fe78876b142767702f8af832e8971916fcbed8ff Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 10 Oct 2019 11:50:35 +0200 Subject: [PATCH] java inference: keep a sign of failed inference on the top level revert partially previous change as currently expected types provider relies on inference failure marker GitOrigin-RevId: a48b44d21fbfeb9528bcacd6ac03cfecbaf36e61 --- .../graphInference/InferenceSessionContainer.java | 2 +- .../ExpressionCompatibilityConstraint.java | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) 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; }