void (Set<ConstraintFormula> additionalConstraints, Set<ConstraintFormula> ignoredConstraints, PsiExpression returnExpression, @NotNull PsiType functionalType, boolean addConstraint, PsiSubstitutor initialSubstitutor) { if (returnExpression instanceof PsiCallExpression) { if (addConstraint) { final JavaResolveResult resolveResult = PsiDiamondType.getDiamondsAwareResolveResult((PsiCallExpression)returnExpression); if (resolveResult instanceof MethodCandidateInfo && PsiPolyExpressionUtil.isMethodCallPolyExpression(returnExpression, ((MethodCandidateInfo)resolveResult).getElement())) { collectAdditionalConstraints(additionalConstraints, ignoredConstraints, (PsiCallExpression)returnExpression, initialSubstitutor); } } else { getInferenceSessionContainer().registerNestedSession(this, functionalType, returnExpression); } } else if (returnExpression instanceof PsiParenthesizedExpression) { processReturnExpression(additionalConstraints, ignoredConstraints, ((PsiParenthesizedExpression)returnExpression).getExpression(), functionalType, addConstraint, initialSubstitutor); } else if (returnExpression instanceof PsiConditionalExpression) { processReturnExpression(additionalConstraints, ignoredConstraints, ((PsiConditionalExpression)returnExpression).getThenExpression(), functionalType, addConstraint, initialSubstitutor); processReturnExpression(additionalConstraints, ignoredConstraints, ((PsiConditionalExpression)returnExpression).getElseExpression(), functionalType, addConstraint, initialSubstitutor); } else if (returnExpression instanceof PsiSwitchExpression) { for (PsiExpression resultExpression : PsiUtil.getSwitchResultExpressions((PsiSwitchExpression)returnExpression)) { processReturnExpression(additionalConstraints, ignoredConstraints, resultExpression, functionalType, addConstraint, initialSubstitutor); } } else if (returnExpression instanceof PsiLambdaExpression) { if (!ignoreLambdaConstraintTree(returnExpression)) { collectLambdaReturnExpression(additionalConstraints, ignoredConstraints, (PsiLambdaExpression)returnExpression, functionalType, myErased, initialSubstitutor); } } }