boolean (final JComponent component) { myInsideShow = true; try { hideCurrentHint(); BorderLayoutPanel content = JBUI.Panels.simplePanel(); content.setBackground(component.getBackground()); content.setBorder(JBUI.Borders.empty(10)); content.addToCenter(component); myCurrentHint = new LightweightHint(content) { @Override protected boolean canAutoHideOn(TooltipEvent event) { InputEvent inputEvent = event.getInputEvent(); if (inputEvent instanceof MouseEvent) { Component comp = inputEvent.getComponent(); if (comp instanceof EditorComponentImpl) { EditorImpl editor = ((EditorComponentImpl)comp).getEditor(); return !isInsideCurrentRange(editor, ((MouseEvent)inputEvent).getPoint()); } } return true; } }; myCurrentHint.setForceShowAsPopup(true); myCurrentHint.addHintListener(new HintListener() { @Override public void hintHidden(@NotNull EventObject event) { processHintHidden(); } }); // editor may be disposed before later invokator process this action if (myEditor.isDisposed()) { return false; } AppUIUtil.targetToDevice(myCurrentHint.getComponent(), myEditor.getComponent()); Point p = HintManagerImpl.getHintPosition(myCurrentHint, myEditor, myEditor.xyToLogicalPosition(myPoint), HintManager.UNDER); HintHint hint = HintManagerImpl.createHintHint(myEditor, p, myCurrentHint, HintManager.UNDER, true); hint.setShowImmediately(true); HintManagerImpl.getInstanceImpl().showEditorHint(myCurrentHint, myEditor, p, HintManager.HIDE_BY_ANY_KEY | HintManager.HIDE_BY_TEXT_CHANGE | HintManager.HIDE_BY_SCROLLING, 0, false, hint); if (myHighlighter == null && isCurrentRangeValid()) { // hint text update createHighlighter(); } setHighlighterAttributes(); setCurrentEditorHint(); } finally { myInsideShow = false; } return true; }