void (Inlay inlay) { InlineDebugRenderer inlayRenderer = (InlineDebugRenderer)inlay.getRenderer(); if (inlayRenderer.myPopupIsShown) { return; } Pair<XValue, String> descriptor = getXValueDescriptor(myValueNode); Rectangle bounds = inlay.getBounds(); Point point = new Point(bounds.x, bounds.y + bounds.height); inlayRenderer.myPopupIsShown = true; Runnable hidePopupRunnable = () -> { ApplicationManager.getApplication().invokeLater(() -> { inlayRenderer.myPopupIsShown = false; }); }; Editor editor = inlay.getEditor(); InlineValuePopupProvider popupProvider = InlineValuePopupProvider.EP_NAME.findFirstSafe(a -> a.accepts(myValueNode)); if (popupProvider != null) { popupProvider.showPopup(myValueNode, mySession, myPosition, myTreeCreator, editor, point, hidePopupRunnable); } else { XDebuggerTreeInlayPopup.showTreePopup(myTreeCreator, descriptor, myValueNode, editor, point, myPosition, mySession, hidePopupRunnable); } }