void (XValueNodeImpl valueNode, XExpression text, Consumer<? super String> errorConsumer) { XDebuggerTree tree = valueNode.getTree(); Project project = tree.getProject(); XValueModifier modifier = valueNode.getValueContainer().getModifier(); if (modifier == null) return; XDebuggerTreeState treeState = XDebuggerTreeState.saveState(tree); valueNode.setValueModificationStarted(); modifier.setValue(text, new XValueModifier.XModificationCallback() { @Override public void valueModified() { AppUIUtil.invokeOnEdt(() -> { if (tree.isDetached()) { tree.rebuildAndRestore(treeState); } }); XDebuggerUtilImpl.rebuildAllSessionsViews(project); } @Override public void errorOccurred(@NotNull final String errorMessage) { AppUIUtil.invokeOnEdt(() -> { tree.rebuildAndRestore(treeState); errorConsumer.consume(errorMessage); }); XDebuggerUtilImpl.rebuildAllSessionsViews(project); } }); }