@Override
  public void visitPolyadicExpression(@NotNull PsiPolyadicExpression expression) {
    startElement(expression);

    DfaValue dfaValue = JavaDfaValueFactory.getExpressionDfaValue(myFactory, expression);
    if (dfaValue != null) {
      push(dfaValue, expression);
      finishElement(expression);
      return;
    }

    PsiExpression[] operands = expression.getOperands();
    if (operands.length <= 1) {
      pushUnknown();
      finishElement(expression);
      return;
    }
    IElementType op = expression.getOperationTokenType();
    if (op == JavaTokenType.ANDAND) {
      generateShortCircuitAndOr(expression, operands, expression.getType(), true);
    }
    else if (op == JavaTokenType.OROR) {
      generateShortCircuitAndOr(expression, operands, expression.getType(), false);
    }
    else {
      generateBinOpChain(expression, op, operands);
    }
    finishElement(expression);
  }
@Override
  public void visitPolyadicExpression(@NotNull PsiPolyadicExpression expression)