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
This commit is contained in:
Anna.Kozlova
2019-10-10 10:03:10 +00:00
committed by intellij-monorepo-bot
parent 589b029a97
commit fe78876b14
2 changed files with 10 additions and 4 deletions
@@ -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);
@@ -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;
}