private void scheduleProcessing(@NotNull Editor editor,
                                  @NotNull Context context,
                                  boolean updateExistingPopup,
                                  boolean forceShowing,
                                  boolean requestFocus) {
    ProgressIndicatorBase progress = new ProgressIndicatorBase();
    progress.setModalityProgress(null);
    if (!forceShowing) { // myCurrentProgress is cancelled on every mouse moved - do not use it for forceShowing mode
      myCurrentProgress = progress;
    }
    myAlarm.addRequest(() -> {
      ProgressManager.getInstance().executeProcessUnderProgress(() -> {
        // errors are stored in the top level editor markup model, not the injected one
        Editor topLevelEditor = InjectedLanguageUtil.getTopLevelEditor(editor);

        EditorHoverInfo info = context.calcInfo(topLevelEditor);
        ApplicationManager.getApplication().invokeLater(() -> {
          if (!forceShowing && progress != myCurrentProgress) {
            return;
          }

          myCurrentProgress = null;
          if (info == null ||
              !UIUtil.isShowing(topLevelEditor.getContentComponent()) ||
              (!forceShowing && isPopupDisabled(topLevelEditor))) {
            return;
          }

          VisualPosition position = context.getPopupPosition(topLevelEditor);
          PopupBridge popupBridge = new PopupBridge(editor, position);
          JComponent component = info.createComponent(topLevelEditor, popupBridge, requestFocus);
          if (component == null) {
            closeHint();
          }
          else {
            if (updateExistingPopup && isHintShown()) {
              updateHint(component, popupBridge);
            }
            else {
              AbstractPopup hint = createHint(component, popupBridge, requestFocus);
              showHintInEditor(hint, topLevelEditor, position);
              CodeFloatingToolbar floatingToolbar = CodeFloatingToolbar.getToolbar(editor);
              if (floatingToolbar != null) floatingToolbar.hideOnPopupConflict(hint);
              myPopupReference = new WeakReference<>(hint);
              myCurrentEditor = new WeakReference<>(topLevelEditor);
            }
            myContext = context;
          }
        });
      }, progress);
    }, context.getShowingDelay());
  }
private void scheduleProcessing(@NotNull Editor editor,
                                  @NotNull Context context,
                                  boolean updateExistingPopup,
                                  boolean forceShowing,
                                  boolean requestFocus)