@ApiStatus.Experimental
  public static ComponentPopupBuilder createTextViewerPopupBuilder(@NotNull JComponent popupContent,
                                                                   @NotNull TextViewer textViewer,
                                                                   @NotNull XFullValueEvaluator evaluator,
                                                                   @NotNull Project project,
                                                                   @Nullable Runnable afterFullValueEvaluation,
                                                                   @Nullable Runnable hideRunnable) {

    AtomicBoolean evaluationObsolete = new AtomicBoolean(false);
    var callback = new XFullValueEvaluator.XFullValueEvaluationCallback() {
      @Override
      public void evaluated(@NotNull final String fullValue, @Nullable final Font font) {
        AppUIUtil.invokeOnEdt(() -> {
          textViewer.setText(fullValue);
          if (font != null) {
            textViewer.setFont(font);
          }
          if (afterFullValueEvaluation != null) {
            afterFullValueEvaluation.run();
          }
        });
      }

      @Override
      public void errorOccurred(@NotNull final String errorMessage) {
        AppUIUtil.invokeOnEdt(() -> {
          textViewer.setForeground(XDebuggerUIConstants.ERROR_MESSAGE_ATTRIBUTES.getFgColor());
          textViewer.setText(errorMessage);
        });
      }

      @Override
      public boolean isObsolete() {
        return evaluationObsolete.get();
      }
    };

    Runnable cancelCallback = () -> {
      evaluationObsolete.set(true);
      if (hideRunnable != null) {
        hideRunnable.run();
      }
    };

    evaluator.startEvaluation(callback);
    return createCancelablePopupBuilder(project, popupContent, textViewer, cancelCallback, null);
  }
@ApiStatus.Experimental
  public static ComponentPopupBuilder createTextViewerPopupBuilder(@NotNull JComponent popupContent,
                                                                   @NotNull TextViewer textViewer,
                                                                   @NotNull XFullValueEvaluator evaluator,
                                                                   @NotNull Project project,
                                                                   @Nullable Runnable afterFullValueEvaluation,
                                                                   @Nullable Runnable hideRunnable)