private boolean processOneConstraint(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;
  }
private boolean processOneConstraint(ConstraintFormula formula,
                                       Set<ConstraintFormula> additionalConstraints,
                                       PsiSubstitutor substitutor, 
                                       Set<ConstraintFormula> ignoredConstraints)