private void computeTooltipInBackground(@NotNull PointInfo pointInfo) {
    GutterIconRenderer renderer = pointInfo.renderer;
    if (myCalculatingInBackground == renderer && !myBackgroundIndicator.isCanceled()) return; // not yet calculated
    myCalculatingInBackground = renderer;
    myBackgroundIndicator.cancel();
    myBackgroundIndicator = new ProgressIndicatorBase();
    myBackgroundIndicator.setModalityProgress(null);
    Point point = pointInfo.iconCenterPosition;
    Balloon.Position relativePosition = pointInfo.renderersInLine > 1 && pointInfo.rendererPosition == 0 ? Balloon.Position.below
                                                                                                         : Balloon.Position.atRight;
    AtomicReference<@NlsContexts.Tooltip String> tooltip = new AtomicReference<>();
    ProgressManager.getInstance().runProcessWithProgressAsynchronously(
      new Task.Backgroundable(myEditor.getProject(), IdeBundle.message("progress.title.constructing.tooltip")) {
        @Override
        public void run(@NotNull ProgressIndicator indicator) {
          Callable<@NlsContexts.Tooltip String> callable = () -> renderer.getTooltipText();
          tooltip.set(ReadAction.nonBlocking(callable).wrapProgress(indicator).executeSynchronously());
        }

        @Override
        public void onSuccess() {
          showToolTip(tooltip.get(), point, relativePosition);
        }
      }, myBackgroundIndicator);
  }
private void computeTooltipInBackground(@NotNull PointInfo pointInfo)