@Override
    public void visitPolyadicExpression(@NotNull PsiPolyadicExpression wideExpression) {
      if (LOG.isDebugEnabled()) {
        LOG.debug("visitPolyadicExpression " + wideExpression);
      }
      CodeFragmentEvaluator oldFragmentEvaluator = setNewCodeFragmentEvaluator();
      try {
        PsiExpression[] operands = wideExpression.getOperands();
        operands[0].accept(this);
        Evaluator result = myResult;
        PsiType lType = operands[0].getType();
        for (int i = 1; i < operands.length; i++) {
          PsiExpression expression = operands[i];
          if (expression == null) {
            throw expressionInvalid(wideExpression);
          }
          expression.accept(this);
          Evaluator rResult = myResult;
          IElementType opType = wideExpression.getOperationTokenType();
          PsiType rType = expression.getType();
          if (rType == null) {
            throw evaluateException(JavaDebuggerBundle.message("evaluation.error.unknown.expression.type", expression.getText()));
          }
          final PsiType typeForBinOp = TypeConversionUtil.calcTypeForBinaryExpression(lType, rType, opType, true);
          if (typeForBinOp == null) {
            throw evaluateException(JavaDebuggerBundle.message("evaluation.error.unknown.expression.type", wideExpression.getText()));
          }
          myResult = createBinaryEvaluator(result, lType, rResult, rType, opType, typeForBinOp);
          lType = typeForBinOp;
          result = myResult;
        }
      }
      finally {
        myCurrentFragmentEvaluator = oldFragmentEvaluator;
      }
    }
@Override
    public void visitPolyadicExpression(@NotNull PsiPolyadicExpression wideExpression)