public void updateNodeValueAfterLoading(@NotNull XValueNode node,
                                          @NotNull String value,
                                          @NotNull @Nls String linkText,
                                          @Nullable String errorMessage) {
    if (errorMessage != null) {
      node.setPresentation(getValueIcon(), new XRegularValuePresentation(value, myType) {
        @Override
        public void renderValue(@NotNull XValueTextRenderer renderer) {
          renderer.renderError(errorMessage);
        }
      }, myContainer);
    }
    else {
      setElementPresentation(node, value);
    }

    if (isNumericContainer()) return; // do not update FullValueEvaluator not to break Array Viewer
    if (value.length() >= MAX_VALUE) {
      node.setFullValueEvaluator(new PyFullValueEvaluator(myFrameAccessor, getEvaluationExpression()));
    }
    else {
      node.setFullValueEvaluator(new XFullValueEvaluator(linkText) {
        @Override
        public void startEvaluation(@NotNull XFullValueEvaluationCallback callback) {
          callback.evaluated(value);
        }

        @Override
        public boolean isShowValuePopup() {
          return false;
        }
      });
    }
  }
public void updateNodeValueAfterLoading(@NotNull XValueNode node,
                                          @NotNull String value,
                                          @NotNull @Nls String linkText,
                                          @Nullable String errorMessage)