boolean (ConstraintFormula formula, Set<ConstraintFormula> additionalConstraints, PsiSubstitutor substitutor, Set<ConstraintFormula> ignoredConstraints) { formula.apply(substitutor, true); if (formula instanceof InputOutputConstraintFormula) { myTempTypes.forceType(((InputOutputConstraintFormula)formula).getExpression(), ((InputOutputConstraintFormula)formula).getCurrentType()); } addConstraint(formula); if (!repeatInferencePhases()) { return false; } if (formula instanceof ExpressionCompatibilityConstraint) { PsiExpression expression = ((ExpressionCompatibilityConstraint)formula).getExpression(); if (expression instanceof PsiLambdaExpression) { PsiType parameterType = ((PsiLambdaExpression)expression).getGroundTargetType(((ExpressionCompatibilityConstraint)formula).getCurrentType()); collectLambdaReturnExpression(additionalConstraints, ignoredConstraints, (PsiLambdaExpression)expression, parameterType, !isProperType(parameterType), substitutor); } } return true; }