void (@NotNull final XValue result) { result.computePresentation(new XValueNodePresentationConfigurator.ConfigurableXValueNodeImpl() { private XFullValueEvaluator myFullValueEvaluator; private boolean myShown = false; @Override public void applyPresentation(@Nullable Icon icon, @NotNull XValuePresentation valuePresenter, boolean hasChildren) { showEvaluating.set(false); if (isHintHidden()) { return; } SimpleColoredText text = new SimpleColoredText(); XValueNodeImpl.buildText(valuePresenter, text, false); if (!hasChildren) { showTooltipPopup(createHintComponent(icon, text, valuePresenter, myFullValueEvaluator)); } else if (getType() == ValueHintType.MOUSE_CLICK_HINT) { if (!myShown) { Runnable showPopupRunnable = getShowPopupRunnable(result, myFullValueEvaluator); showPopupRunnable.run(); } } else { if (getType() == ValueHintType.MOUSE_OVER_HINT) { if (myFromKeyboard) { text.insert(0, "(" + KeymapUtil.getFirstKeyboardShortcutText("ShowErrorDescription") + ") ", SimpleTextAttributes.GRAYED_ATTRIBUTES); } // first remove a shortcut created for any previous presentation (like "Collecting data...") disposeVisibleHint(); myDisposable = Disposer.newDisposable(); ShortcutSet shortcut = KeymapUtil.getActiveKeymapShortcuts(IdeActions.ACTION_SHOW_ERROR_DESCRIPTION); DumbAwareAction.create(e -> showTree(result)) .registerCustomShortcutSet(shortcut, getEditor().getContentComponent(), myDisposable); } showTooltipPopup(createExpandableHintComponent(icon, text, getShowPopupRunnable(result, myFullValueEvaluator), myFullValueEvaluator)); } myShown = true; } @Override public void setFullValueEvaluator(@NotNull XFullValueEvaluator fullValueEvaluator) { myFullValueEvaluator = fullValueEvaluator; } @Override public boolean isObsolete() { return isHintHidden(); } }, XValuePlace.TOOLTIP); }