@Override
  public void renderValue(@NotNull XValueTextRenderer renderer, @Nullable XValueNodeImpl node) {
    boolean compact = node != null;
    String valueText = myValueDescriptor.getValueText();
    EvaluateException exception = myValueDescriptor.getEvaluateException();
    if (exception != null) {
      String errorMessage = exception.getMessage();
      if (valueText.endsWith(errorMessage)) {
        renderer.renderValue(valueText.substring(0, valueText.length() - errorMessage.length()));
      }
      renderer.renderError(errorMessage);
    }
    else {
      if (compact) {
        String text = myValueDescriptor.getCompactValueText();
        if (text != null) {
          renderer.renderValue(text);
          return;
        }
      }

      if (myValueDescriptor.isString()) {
        renderer.renderStringValue(valueText, "\"", XValueNode.MAX_VALUE_LENGTH);
        return;
      }

      String value = truncateToMaxLength(valueText);
      Renderer lastRenderer = myValueDescriptor.getLastLabelRenderer();
      if (lastRenderer instanceof ToStringRenderer) {
        if (!((ToStringRenderer)lastRenderer).isShowValue(myValueDescriptor, myValueDescriptor.getStoredEvaluationContext())) {
          return; // to avoid empty line for not calculated toStrings
        }
        value = StringUtil.wrapWithDoubleQuote(value);
      }
      renderer.renderValue(value);
    }
  }
@Override
  public void renderValue(@NotNull XValueTextRenderer renderer, @Nullable XValueNodeImpl node)