void () { AtomicBoolean showEvaluating = new AtomicBoolean(true); EdtExecutorService.getScheduledExecutorInstance().schedule(() -> { if (!isHintHidden() && !isShowing() && showEvaluating.get()) { SimpleColoredComponent component = HintUtil.createInformationComponent(); component.append(XDebuggerUIConstants.getEvaluatingExpressionMessage()); showHint(component); } }, 200, TimeUnit.MILLISECONDS); XEvaluationCallbackBase callback = new XEvaluationCallbackBase() { @Override public void evaluated(@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); } @Override public void errorOccurred(@NotNull final String errorMessage) { showEvaluating.set(false); ApplicationManager.getApplication().invokeLater(() -> { if (getType() == ValueHintType.MOUSE_CLICK_HINT) { showHint(HintUtil.createErrorLabel(errorMessage)); } else { hideCurrentHint(); } }); LOG.debug("Cannot evaluate '" + myExpression + "':" + errorMessage); } }; if (myElement != null && myEvaluator instanceof XDebuggerPsiEvaluator) { ((XDebuggerPsiEvaluator)myEvaluator).evaluate(myElement, callback); } else { myEvaluator.evaluate(myExpression, callback, myExpressionPosition); } }