private void navigateTargetsAsync(@NotNull MouseEvent event) {
    Component component = event.getComponent();
    Runnable loadingRemover = component instanceof EditorGutterComponentEx ?
                              ((EditorGutterComponentEx)component).setLoadingIconForCurrentGutterMark() : null;
    AppExecutorUtil.getAppExecutorService().execute(ClientId.decorateRunnable(() -> {

      ProgressManager.getInstance().computePrioritized(() -> {
        ProgressManager.getInstance().executeProcessUnderProgress(() -> {
          Ref<List<PsiElement>> targets = Ref.create();
          boolean success = runInReadActionWithWriteActionPriority(() -> targets.set(getTargetElements()));

          ApplicationManager.getApplication().invokeLater(() -> {
            if (loadingRemover != null) {
              loadingRemover.run();
            }
            if (success) {
              navigateTargets(event, targets.get());
            }
          });
        }, new EmptyProgressIndicator());
        return null;
      });
    }));
  }
private void navigateTargetsAsync(@NotNull MouseEvent event)