void (@NotNull PsiConditionalExpression expression) { if (LOG.isDebugEnabled()) { LOG.debug("visitConditionalExpression " + expression); } final PsiType expectedType = expression.getType(); final PsiExpression thenExpression = expression.getThenExpression(); final PsiExpression elseExpression = expression.getElseExpression(); if (thenExpression == null || elseExpression == null) { throw expressionInvalid(expression); } PsiExpression condition = expression.getCondition(); condition.accept(this); if (myResult == null) { throw expressionInvalid(condition); } Evaluator conditionEvaluator = new UnBoxingEvaluator(myResult); thenExpression.accept(this); if (myResult == null) { throw expressionInvalid(thenExpression); } Evaluator thenEvaluator = myResult; elseExpression.accept(this); if (myResult == null) { throw expressionInvalid(elseExpression); } Evaluator elseEvaluator = myResult; myResult = new ConditionalExpressionEvaluator(conditionEvaluator, thenEvaluator, elseEvaluator); if (expectedType instanceof PsiPrimitiveType) { myResult = new UnBoxingEvaluator(myResult); } myResult = createTypeCastEvaluator(myResult, expectedType); }