diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java index 8f82bc024927..7ad72404a79f 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java @@ -72,6 +72,7 @@ public class XDebuggerEvaluationDialog extends DialogWrapper { private EvaluationMode myMode; private XSourcePosition mySourcePosition; private final SwitchModeAction mySwitchModeAction; + private boolean myIsEvaluating = false; /** * Use {@link XDebuggerEvaluationDialog#XDebuggerEvaluationDialog(XDebugSessionProxy, XDebuggerEditorsProvider, XExpression, XSourcePosition, boolean)} instead @@ -197,6 +198,22 @@ public class XDebuggerEvaluationDialog extends DialogWrapper { public void sessionPaused() { updateSourcePosition(); } + + @Override + public void settingsChanged() { + if (myIsEvaluating) { // filter out rebuildViews after our own evaluation + myIsEvaluating = false; + return; + } + ApplicationManager.getApplication().invokeLater(() -> { + XDebuggerEditorBase inputEditor = getInputEditor(); + // recreate document to support value marks update + inputEditor.setExpression(inputEditor.getExpression()); + if (myTreePanel.getTree().getRoot() instanceof EvaluatingExpressionRootNode rootNode) { + rootNode.rebuild(); + } + }); + } }, myDisposable); } @@ -393,7 +410,9 @@ public class XDebuggerEvaluationDialog extends DialogWrapper { } public void evaluationDone() { - if (mySession != null) mySession.rebuildViews(); + if (mySession == null) return; + myIsEvaluating = true; + mySession.rebuildViews(); } @Override diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java index c84a12eb491d..93242b6ed6e2 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java @@ -365,6 +365,12 @@ public class XWatchesViewImpl extends XVariablesView implements DnDNativeTarget, if (event != SessionEvent.SETTINGS_CHANGED) { myRootNode.removeResultNode(); } + else { + // recreate document to support value marks update + if (myEvaluateComboBox != null) { + myEvaluateComboBox.setExpression(myEvaluateComboBox.getExpression()); + } + } } private void addExpressionResultNode() { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/EvaluatingExpressionRootNode.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/EvaluatingExpressionRootNode.java index b675032a24a4..88ae89cf1d22 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/EvaluatingExpressionRootNode.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/EvaluatingExpressionRootNode.java @@ -10,6 +10,8 @@ import com.intellij.xdebugger.frame.XValueContainer; import com.intellij.xdebugger.impl.evaluate.XDebuggerEvaluationDialog; import com.intellij.xdebugger.impl.evaluate.XEvaluationOrigin; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; +import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreeState; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; public class EvaluatingExpressionRootNode extends XValueContainerNode { @@ -22,8 +24,20 @@ public class EvaluatingExpressionRootNode extends XValueContainerNode