@Override public void visitConditionalExpression(@NotNull PsiConditionalExpression expression) {
    startElement(expression);

    PsiExpression thenExpression = expression.getThenExpression();
    if (thenExpression != null) {
      PsiExpression condition = expression.getCondition();
      PsiExpression elseExpression = expression.getElseExpression();
      DeferredOffset elseOffset = new DeferredOffset();
      condition.accept(this);
      generateBoxingUnboxingInstructionFor(condition, PsiTypes.booleanType());
      PsiType type = expression.getType();
      addInstruction(new ConditionalGotoInstruction(elseOffset, DfTypes.FALSE, PsiUtil.skipParenthesizedExprDown(condition)));
      thenExpression.accept(this);
      generateBoxingUnboxingInstructionFor(thenExpression,type);

      DeferredOffset endOffset = new DeferredOffset();
      addInstruction(new GotoInstruction(endOffset));

      elseOffset.setOffset(getInstructionCount());
      if (elseExpression != null) {
        elseExpression.accept(this);
        generateBoxingUnboxingInstructionFor(elseExpression,type);
      }
      else {
        pushUnknown();
      }
      endOffset.setOffset(getInstructionCount());
    }
    else {
      pushUnknown();
    }

    finishElement(expression);
  }
@Override public void visitConditionalExpression(@NotNull PsiConditionalExpression expression)