void (@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 || !topLevelEditor.getContentComponent().isShowing() || (!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); myPopupReference = new WeakReference<>(hint); myCurrentEditor = new WeakReference<>(topLevelEditor); } myContext = context; } }); }, progress); }, context.getShowingDelay()); }