From 32af6cf3489dff0292922b49156716f858678005 Mon Sep 17 00:00:00 2001 From: Maksim Zuev Date: Wed, 4 Feb 2026 16:34:15 +0100 Subject: [PATCH] [rd debugger] IJPL-219714 Prepare for classes move: minimize dependencies on xdebugger-impl in UI components GitOrigin-RevId: 2d6b1349f634604298617ff0fa3290329f03eb7c --- .../settings/XDebuggerSettingsManager.java | 4 +++ ...ntellij.platform.debugger.impl.content.xml | 2 +- .../impl/XDebuggerManagerProxyListener.kt | 23 ++++++++++++++++ .../xdebugger/impl/XDebuggerUtilImpl.java | 10 ++----- .../xdebugger/impl/XSourcePositionImpl.java | 3 ++- .../evaluate/XDebuggerEvaluationDialog.java | 4 +-- .../impl/frame/XDebugViewSessionListener.java | 4 +-- .../xdebugger/impl/frame/XThreadsView.kt | 4 +-- .../xdebugger/impl/frame/XVariablesView.java | 8 +++--- .../impl/frame/XWatchesViewImpl.java | 14 ++++------ .../impl/inline/XDebuggerTreeInlayPopup.java | 4 +-- .../MonolithManagerProxyListener.kt} | 26 +++---------------- .../impl/proxy/MonolithSessionProxy.kt | 22 +++++++++++++--- .../impl/proxy/MonolithXDebugManagerProxy.kt | 12 +++++++-- .../proxy/XDebuggerMonolithAccessPointImpl.kt | 21 --------------- .../xdebugger/impl/ui/DebuggerUIUtil.java | 21 ++++++++++++--- .../impl/ui/ExecutionPointHighlighter.java | 4 +-- .../xdebugger/impl/ui/TextViewer.java | 2 +- .../xdebugger/impl/ui/XDebugSessionTab.java | 17 ++++-------- .../ui/tree/actions/SortValuesToggleAction.kt | 9 +++---- 20 files changed, 111 insertions(+), 103 deletions(-) create mode 100644 platform/xdebugger-impl/shared/src/com/intellij/xdebugger/impl/XDebuggerManagerProxyListener.kt rename platform/xdebugger-impl/src/com/intellij/xdebugger/impl/{XDebuggerManagerProxyListener.kt => proxy/MonolithManagerProxyListener.kt} (64%) delete mode 100644 platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/XDebuggerMonolithAccessPointImpl.kt diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettingsManager.java b/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettingsManager.java index 6ae9c5732ecc..9506fefae88f 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettingsManager.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettingsManager.java @@ -3,6 +3,7 @@ package com.intellij.xdebugger.settings; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; public abstract class XDebuggerSettingsManager implements Disposable { @@ -13,6 +14,9 @@ public abstract class XDebuggerSettingsManager implements Disposable { public interface DataViewSettings { boolean isSortValues(); + @ApiStatus.Internal + void setSortValues(boolean sortValues); + boolean isAutoExpressions(); int getValueLookupDelay(); diff --git a/platform/xdebugger-impl/resources/intellij.platform.debugger.impl.content.xml b/platform/xdebugger-impl/resources/intellij.platform.debugger.impl.content.xml index 6581622eb0f2..6b8ff19c03ba 100644 --- a/platform/xdebugger-impl/resources/intellij.platform.debugger.impl.content.xml +++ b/platform/xdebugger-impl/resources/intellij.platform.debugger.impl.content.xml @@ -490,7 +490,7 @@ - diff --git a/platform/xdebugger-impl/shared/src/com/intellij/xdebugger/impl/XDebuggerManagerProxyListener.kt b/platform/xdebugger-impl/shared/src/com/intellij/xdebugger/impl/XDebuggerManagerProxyListener.kt new file mode 100644 index 000000000000..84bf6ae649f5 --- /dev/null +++ b/platform/xdebugger-impl/shared/src/com/intellij/xdebugger/impl/XDebuggerManagerProxyListener.kt @@ -0,0 +1,23 @@ +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.xdebugger.impl + +import com.intellij.util.messages.Topic +import com.intellij.platform.debugger.impl.shared.proxy.XDebugSessionProxy +import org.jetbrains.annotations.ApiStatus + +/** + * [XDebugSessionProxy] analogue of [com.intellij.xdebugger.XDebuggerManagerListener] + */ +@ApiStatus.Internal +interface XDebuggerManagerProxyListener { + fun sessionStarted(session: XDebugSessionProxy) {} + fun sessionStopped(session: XDebugSessionProxy) {} + fun activeSessionChanged(previousSession: XDebugSessionProxy?, currentSession: XDebugSessionProxy?) {} + + companion object { + @JvmField + @Topic.ProjectLevel + val TOPIC: Topic = + Topic("XDebuggerManagerListener proxy events", XDebuggerManagerProxyListener::class.java) + } +} diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java index f86d8ecdeaea..e4225d548d83 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java @@ -920,17 +920,11 @@ public class XDebuggerUtilImpl extends XDebuggerUtil { } public static void rebuildAllSessionsViews(@Nullable Project project) { - if (project == null) return; - XDebugManagerProxy.getInstance().getSessions(project).stream() - .filter(XDebugSessionProxy::isSuspended) - .forEach(XDebugSessionProxy::rebuildViews); + DebuggerUIUtil.rebuildAllSessionsViews(project); } public static void rebuildTreeAndViews(XDebuggerTree tree) { - if (tree.isDetached()) { - tree.rebuild(); - } - rebuildAllSessionsViews(tree.getProject()); + DebuggerUIUtil.rebuildTreeAndViews(tree); } @Override diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XSourcePositionImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XSourcePositionImpl.java index 8094f5dc14bf..2f42eb3a5c26 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XSourcePositionImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XSourcePositionImpl.java @@ -8,6 +8,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.NotNullLazyValue; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.impl.http.HttpVirtualFile; +import com.intellij.platform.debugger.impl.shared.XDebuggerUtilImplShared; import com.intellij.pom.Navigatable; import com.intellij.pom.NonNavigatable; import com.intellij.psi.PsiElement; @@ -161,7 +162,7 @@ public abstract class XSourcePositionImpl implements XSourcePosition { @Override public @NotNull Navigatable createNavigatable(@NotNull Project project) { - return XDebuggerUtilImpl.createNavigatable(project, this); + return XDebuggerUtilImplShared.createNavigatable(project, this); } @Override 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 7ad72404a79f..307b8f8525d0 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 @@ -32,7 +32,7 @@ import com.intellij.xdebugger.evaluation.XDebuggerEvaluator; import com.intellij.xdebugger.impl.XDebuggerUtilImpl; import com.intellij.xdebugger.impl.actions.XDebuggerActions; import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl; -import com.intellij.xdebugger.impl.proxy.MonolithSessionProxyKt; +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter; import com.intellij.xdebugger.impl.settings.XDebuggerSettingManagerImpl; import com.intellij.xdebugger.impl.ui.XDebugSessionTab; import com.intellij.xdebugger.impl.ui.XDebuggerEditorBase; @@ -83,7 +83,7 @@ public class XDebuggerEvaluationDialog extends DialogWrapper { @NotNull XExpression text, @Nullable XSourcePosition sourcePosition, boolean isCodeFragmentEvaluationSupported) { - this(MonolithSessionProxyKt.asProxy(session), + this(XDebuggerEntityConverter.asProxy(session), editorsProvider, text, sourcePosition, isCodeFragmentEvaluationSupported); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java index 96b6ab468244..676e36680488 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java @@ -4,7 +4,7 @@ package com.intellij.xdebugger.impl.frame; import com.intellij.platform.debugger.impl.shared.proxy.XDebugSessionProxy; import com.intellij.xdebugger.XDebugSession; import com.intellij.xdebugger.XDebugSessionListener; -import com.intellij.xdebugger.impl.proxy.MonolithSessionProxyKt; +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -23,7 +23,7 @@ public final class XDebugViewSessionListener implements XDebugSessionListener { */ @ApiStatus.Obsolete public static void attach(@NotNull XDebugView debugView, @NotNull XDebugSession session) { - XDebugSessionProxy proxy = MonolithSessionProxyKt.asProxy(session); + XDebugSessionProxy proxy = XDebuggerEntityConverter.asProxy(session); attach(debugView, proxy); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XThreadsView.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XThreadsView.kt index cfe20e0196b4..68267bac6a11 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XThreadsView.kt +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XThreadsView.kt @@ -7,6 +7,7 @@ import com.intellij.openapi.util.NlsSafe import com.intellij.platform.debugger.impl.rpc.XDebugSessionApi import com.intellij.platform.debugger.impl.shared.proxy.XDebugSessionProxy import com.intellij.platform.debugger.impl.ui.DebuggerUIUtilShared +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter import com.intellij.ui.AutoScrollToSourceHandler import com.intellij.ui.SimpleTextAttributes import com.intellij.util.concurrency.annotations.RequiresEdt @@ -16,7 +17,6 @@ import com.intellij.xdebugger.frame.* import com.intellij.xdebugger.frame.presentation.XRegularValuePresentation import com.intellij.xdebugger.frame.presentation.XValuePresentation import com.intellij.xdebugger.impl.actions.XDebuggerActions.THREADS_VIEW_POPUP_GROUP -import com.intellij.xdebugger.impl.proxy.asProxy import com.intellij.xdebugger.impl.ui.DebuggerUIUtil import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreePanel @@ -45,7 +45,7 @@ class XThreadsView(project: Project, session: XDebugSessionProxy) : XDebugView() private var wasShowing = false @ApiStatus.Obsolete - constructor(project: Project, session: XDebugSession) : this(project, session.asProxy()) + constructor(project: Project, session: XDebugSession) : this(project, XDebuggerEntityConverter.asProxy(session)) private val treePanel = XDebuggerTreePanel(project, session.editorsProvider, this, null, THREADS_VIEW_POPUP_GROUP, null) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java index 6dbed527063d..b8616e647af8 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java @@ -17,7 +17,7 @@ import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.frame.XStackFrame; import com.intellij.xdebugger.impl.XDebugSessionImpl; import com.intellij.xdebugger.impl.inline.InlineDebugRenderer; -import com.intellij.xdebugger.impl.proxy.MonolithSessionProxyKt; + import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import com.intellij.xdebugger.impl.ui.tree.nodes.XValueContainerNode; import org.jetbrains.annotations.ApiStatus; @@ -40,7 +40,7 @@ public class XVariablesView extends XVariablesViewBase { */ @Deprecated public XVariablesView(@NotNull XDebugSessionImpl session) { - this(MonolithSessionProxyKt.asProxy(session)); + this(XDebuggerEntityConverter.asProxy(session)); } public XVariablesView(@NotNull XDebugSessionProxy proxy) { @@ -170,7 +170,7 @@ public class XVariablesView extends XVariablesViewBase { @ApiStatus.Obsolete public static @Nullable InlineVariablesInfo get(@Nullable XDebugSession session) { if (session == null) return null; - return get(MonolithSessionProxyKt.asProxy(session)); + return get(XDebuggerEntityConverter.asProxy(session)); } @ApiStatus.Internal @@ -187,7 +187,7 @@ public class XVariablesView extends XVariablesViewBase { @ApiStatus.Obsolete public static void set(@Nullable XDebugSession session, InlineVariablesInfo info) { if (session != null) { - set(MonolithSessionProxyKt.asProxy(session), info); + set(XDebuggerEntityConverter.asProxy(session), info); } } 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 93242b6ed6e2..10f2004f9c25 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 @@ -39,6 +39,7 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.platform.debugger.impl.shared.XDebuggerWatchesManager; import com.intellij.platform.debugger.impl.shared.proxy.XDebugManagerProxy; import com.intellij.platform.debugger.impl.shared.proxy.XDebugSessionProxy; +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter; import com.intellij.toolWindow.InternalDecoratorImpl; import com.intellij.ui.ClickListener; import com.intellij.ui.CollectionComboBoxModel; @@ -73,12 +74,7 @@ import com.intellij.xdebugger.impl.inline.InlineWatchNode; import com.intellij.xdebugger.impl.inline.InlineWatchesRootNode; import com.intellij.xdebugger.impl.inline.XInlineWatchesView; import com.intellij.xdebugger.impl.messages.XDebuggerImplBundle; -import com.intellij.xdebugger.impl.proxy.MonolithSessionProxyKt; -import com.intellij.xdebugger.impl.ui.DebuggerSessionTabBase; -import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; -import com.intellij.xdebugger.impl.ui.XDebugSessionTab; -import com.intellij.xdebugger.impl.ui.XDebuggerEmbeddedComboBox; -import com.intellij.xdebugger.impl.ui.XDebuggerExpressionComboBox; +import com.intellij.xdebugger.impl.ui.*; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreeState; import com.intellij.xdebugger.impl.ui.tree.actions.XWatchTransferable; @@ -133,7 +129,7 @@ public class XWatchesViewImpl extends XVariablesView implements DnDNativeTarget, */ @Deprecated public XWatchesViewImpl(@NotNull XDebugSessionImpl session, boolean watchesInVariables) { - this(MonolithSessionProxyKt.asProxy(session), watchesInVariables); + this(XDebuggerEntityConverter.asProxy(session), watchesInVariables); } public XWatchesViewImpl(@NotNull XDebugSessionProxy session, boolean watchesInVariables) { @@ -145,7 +141,7 @@ public class XWatchesViewImpl extends XVariablesView implements DnDNativeTarget, */ @Deprecated protected XWatchesViewImpl(@NotNull XDebugSessionImpl session, boolean watchesInVariables, boolean vertical) { - this(MonolithSessionProxyKt.asProxy(session), watchesInVariables, vertical); + this(XDebuggerEntityConverter.asProxy(session), watchesInVariables, vertical); } protected XWatchesViewImpl(@NotNull XDebugSessionProxy session, boolean watchesInVariables, boolean vertical) { @@ -157,7 +153,7 @@ public class XWatchesViewImpl extends XVariablesView implements DnDNativeTarget, */ @Deprecated public XWatchesViewImpl(@NotNull XDebugSessionImpl session, boolean watchesInVariables, boolean vertical, boolean withToolbar) { - this(MonolithSessionProxyKt.asProxy(session), watchesInVariables, vertical, withToolbar); + this(XDebuggerEntityConverter.asProxy(session), watchesInVariables, vertical, withToolbar); } public XWatchesViewImpl(@NotNull XDebugSessionProxy session, boolean watchesInVariables, boolean vertical, boolean withToolbar) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/inline/XDebuggerTreeInlayPopup.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/inline/XDebuggerTreeInlayPopup.java index 7368afb9d35f..971d7f1a003b 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/inline/XDebuggerTreeInlayPopup.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/inline/XDebuggerTreeInlayPopup.java @@ -19,7 +19,7 @@ import com.intellij.xdebugger.XDebuggerBundle; import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.impl.evaluate.quick.common.DebuggerTreeCreator; import com.intellij.xdebugger.impl.evaluate.quick.common.XDebuggerTreePopup; -import com.intellij.xdebugger.impl.proxy.MonolithSessionProxyKt; +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter; import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeActionBase; import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; @@ -132,7 +132,7 @@ public class XDebuggerTreeInlayPopup extends XDebuggerTreePopup { @NotNull XSourcePosition position, @NotNull XDebugSession session, Runnable hideRunnable) { - XDebugSessionProxy proxy = MonolithSessionProxyKt.asProxy(session); + XDebugSessionProxy proxy = XDebuggerEntityConverter.asProxy(session); new XDebuggerTreeInlayPopup<>(creator, editor, point, position, proxy, hideRunnable, valueNode).show(initialItem); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerProxyListener.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithManagerProxyListener.kt similarity index 64% rename from platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerProxyListener.kt rename to platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithManagerProxyListener.kt index 1e2308c91e68..0c7d21b47b68 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerProxyListener.kt +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithManagerProxyListener.kt @@ -1,33 +1,13 @@ -// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.intellij.xdebugger.impl +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.xdebugger.impl.proxy import com.intellij.frontend.FrontendApplicationInfo import com.intellij.frontend.FrontendType -import com.intellij.platform.debugger.impl.shared.proxy.XDebugSessionProxy -import com.intellij.util.messages.Topic import com.intellij.xdebugger.SplitDebuggerMode import com.intellij.xdebugger.XDebugProcess import com.intellij.xdebugger.XDebugSession import com.intellij.xdebugger.XDebuggerManagerListener -import com.intellij.xdebugger.impl.proxy.asProxy -import org.jetbrains.annotations.ApiStatus - -/** - * [XDebugSessionProxy] analogue of [com.intellij.xdebugger.XDebuggerManagerListener] - */ -@ApiStatus.Internal -interface XDebuggerManagerProxyListener { - fun sessionStarted(session: XDebugSessionProxy) {} - fun sessionStopped(session: XDebugSessionProxy) {} - fun activeSessionChanged(previousSession: XDebugSessionProxy?, currentSession: XDebugSessionProxy?) {} - - companion object { - @JvmField - @Topic.ProjectLevel - val TOPIC: Topic = - Topic("XDebuggerManagerListener proxy events", XDebuggerManagerProxyListener::class.java) - } -} +import com.intellij.xdebugger.impl.XDebuggerManagerProxyListener private class MonolithListenerAdapter : XDebuggerManagerListener { private val shouldTriggerListener: Boolean diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithSessionProxy.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithSessionProxy.kt index 72f09f5c636b..f294915aac3f 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithSessionProxy.kt +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithSessionProxy.kt @@ -15,6 +15,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.util.Key import com.intellij.openapi.util.getOrCreateUserData import com.intellij.platform.debugger.impl.rpc.XDebugSessionId +import com.intellij.platform.debugger.impl.shared.XDebuggerMonolithAccessPoint import com.intellij.platform.debugger.impl.shared.proxy.XBreakpointProxy import com.intellij.platform.debugger.impl.shared.proxy.XDebugSessionProxy import com.intellij.platform.debugger.impl.shared.proxy.XSmartStepIntoHandlerEntry @@ -32,12 +33,13 @@ import com.intellij.xdebugger.frame.XStackFrame import com.intellij.xdebugger.frame.XSuspendContext import com.intellij.xdebugger.impl.XDebugSessionImpl import com.intellij.xdebugger.impl.XSourceKind -import com.intellij.xdebugger.impl.updateExecutionPosition import com.intellij.xdebugger.impl.XSteppingSuspendContext import com.intellij.xdebugger.impl.breakpoints.XBreakpointBase import com.intellij.xdebugger.impl.frame.XValueMarkers +import com.intellij.xdebugger.impl.rpc.models.findValue import com.intellij.xdebugger.impl.ui.XDebugSessionData import com.intellij.xdebugger.impl.ui.XDebugSessionTab +import com.intellij.xdebugger.impl.updateExecutionPosition import com.intellij.xdebugger.ui.XDebugTabLayouter import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -48,7 +50,7 @@ import kotlinx.coroutines.withContext import java.util.concurrent.ConcurrentHashMap import javax.swing.event.HyperlinkListener -internal class MonolithSessionProxy(val session: XDebugSession) : XDebugSessionProxy { +private class MonolithSessionProxy(val session: XDebugSession) : XDebugSessionProxy { val sessionImpl: XDebugSessionImpl get() = session as XDebugSessionImpl private val sessionImplIfAvailable get() = session as? XDebugSessionImpl @@ -315,4 +317,18 @@ private class XDebugSessionProxyKeeper { } internal fun XDebugSession.asProxy(): XDebugSessionProxy = - project.service().getOrCreateProxy(this) \ No newline at end of file + project.service().getOrCreateProxy(this) + +internal class XDebuggerMonolithAccessPointImpl : XDebuggerMonolithAccessPoint { + override fun getSession(proxy: XDebugSessionProxy): XDebugSession? { + return proxy.id.findValue() + } + + override fun getSessionNonSplitOnly(proxy: XDebugSessionProxy): XDebugSession? { + return (proxy as? MonolithSessionProxy)?.session + } + + override fun asProxy(session: XDebugSession): XDebugSessionProxy { + return session.asProxy() + } +} \ No newline at end of file diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithXDebugManagerProxy.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithXDebugManagerProxy.kt index 73443c4a2afc..f79db1acc6cd 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithXDebugManagerProxy.kt +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/MonolithXDebugManagerProxy.kt @@ -11,6 +11,7 @@ import com.intellij.platform.debugger.impl.shared.XDebuggerWatchesManager import com.intellij.platform.debugger.impl.shared.proxy.XBreakpointManagerProxy import com.intellij.platform.debugger.impl.shared.proxy.XDebugManagerProxy import com.intellij.platform.debugger.impl.shared.proxy.XDebugSessionProxy +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter import com.intellij.xdebugger.SplitDebuggerMode import com.intellij.xdebugger.XDebuggerManager import com.intellij.xdebugger.frame.XExecutionStack @@ -42,7 +43,7 @@ internal class MonolithXDebugManagerProxy : XDebugManagerProxy { } override suspend fun withId(value: XValue, session: XDebugSessionProxy, block: suspend (XValueId) -> T): T { - val sessionImpl = (session as MonolithSessionProxy).sessionImpl + val sessionImpl = findSessionImpl(session) return withTemporaryXValueId(value, sessionImpl, block) } @@ -57,7 +58,7 @@ internal class MonolithXDebugManagerProxy : XDebugManagerProxy { } override suspend fun withId(stack: XExecutionStack, session: XDebugSessionProxy, block: suspend (XExecutionStackId) -> T): T { - val sessionImpl = (session as MonolithSessionProxy).sessionImpl + val sessionImpl = findSessionImpl(session) return withCoroutineScopeForId(block) { scope -> val (_, id) = stack.getOrStoreGlobally(scope, sessionImpl) id @@ -89,6 +90,13 @@ internal class MonolithXDebugManagerProxy : XDebugManagerProxy { override fun hasBackendCounterpart(xValue: XValue): Boolean { return true } + + private fun findSessionImpl(session: XDebugSessionProxy): XDebugSessionImpl { + val monolithSession = XDebuggerEntityConverter.getSessionNonSplitOnly(session) ?: error("Expected to have monolith session: $session") + val sessionImpl = monolithSession as XDebugSessionImpl + return sessionImpl + } + } @ApiStatus.Internal diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/XDebuggerMonolithAccessPointImpl.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/XDebuggerMonolithAccessPointImpl.kt deleted file mode 100644 index c9e6219838b7..000000000000 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/proxy/XDebuggerMonolithAccessPointImpl.kt +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.intellij.xdebugger.impl.proxy - -import com.intellij.platform.debugger.impl.shared.XDebuggerMonolithAccessPoint -import com.intellij.platform.debugger.impl.shared.proxy.XDebugSessionProxy -import com.intellij.xdebugger.XDebugSession -import com.intellij.xdebugger.impl.rpc.models.findValue - -internal class XDebuggerMonolithAccessPointImpl : XDebuggerMonolithAccessPoint { - override fun getSession(proxy: XDebugSessionProxy): XDebugSession? { - return proxy.id.findValue() - } - - override fun getSessionNonSplitOnly(proxy: XDebugSessionProxy): XDebugSession? { - return (proxy as? MonolithSessionProxy)?.session - } - - override fun asProxy(session: XDebugSession): XDebugSessionProxy { - return session.asProxy() - } -} \ No newline at end of file diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java index 2ede470868db..85eec25a8414 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java @@ -65,7 +65,6 @@ import com.intellij.xdebugger.breakpoints.XBreakpointListener; import com.intellij.xdebugger.frame.XFullValueEvaluator; import com.intellij.xdebugger.frame.XValue; import com.intellij.xdebugger.frame.XValueModifier; -import com.intellij.xdebugger.impl.XDebuggerUtilImpl; import com.intellij.xdebugger.impl.breakpoints.XBreakpointBase; import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointsDialogFactory; import com.intellij.xdebugger.impl.breakpoints.ui.XLightBreakpointPropertiesPanel; @@ -554,7 +553,7 @@ public final class DebuggerUIUtil { tree.rebuildAndRestore(treeState); } }); - XDebuggerUtilImpl.rebuildAllSessionsViews(project); + rebuildAllSessionsViews(project); } @Override @@ -563,7 +562,7 @@ public final class DebuggerUIUtil { tree.rebuildAndRestore(treeState); errorConsumer.consume(errorMessage); }); - XDebuggerUtilImpl.rebuildAllSessionsViews(project); + rebuildAllSessionsViews(project); } }); } @@ -626,4 +625,20 @@ public final class DebuggerUIUtil { e.getPresentation().setVisible(enable); } } + + @ApiStatus.Internal + public static void rebuildAllSessionsViews(@Nullable Project project) { + if (project == null) return; + XDebugManagerProxy.getInstance().getSessions(project).stream() + .filter(XDebugSessionProxy::isSuspended) + .forEach(XDebugSessionProxy::rebuildViews); + } + + @ApiStatus.Internal + public static void rebuildTreeAndViews(XDebuggerTree tree) { + if (tree.isDetached()) { + tree.rebuild(); + } + rebuildAllSessionsViews(tree.getProject()); + } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java index 4e9e963a74e6..ee8cce406801 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java @@ -26,13 +26,13 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.platform.debugger.impl.shared.XDebuggerUtilImplShared; import com.intellij.pom.Navigatable; import com.intellij.ui.AppUIUtil; import com.intellij.util.concurrency.ThreadingAssertions; import com.intellij.util.messages.MessageBusConnection; import com.intellij.xdebugger.XDebuggerUtil; import com.intellij.xdebugger.XSourcePosition; -import com.intellij.xdebugger.impl.XDebuggerUtilImpl; import com.intellij.xdebugger.impl.settings.DataViewsConfigurableUi; import com.intellij.xdebugger.impl.settings.XDebuggerSettingManagerImpl; import com.intellij.xdebugger.ui.DebuggerColors; @@ -241,7 +241,7 @@ public class ExecutionPointHighlighter { return (OpenFileDescriptor)navigatable; } else { - return XDebuggerUtilImpl.createOpenFileDescriptor(project, position); + return XDebuggerUtilImplShared.createOpenFileDescriptor(project, position); } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java index 17826a396211..d83788065102 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.xdebugger.impl.ui; import com.intellij.openapi.editor.Document; diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java index 1ba49d48a00f..2357af6c0f66 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java @@ -53,16 +53,9 @@ import com.intellij.xdebugger.XDebuggerBundle; import com.intellij.xdebugger.impl.XDebugSessionImpl; import com.intellij.xdebugger.impl.XDebugSessionSelectionService; import com.intellij.xdebugger.impl.actions.XDebuggerActions; -import com.intellij.xdebugger.impl.frame.XDebugView; -import com.intellij.xdebugger.impl.frame.XDebugViewSessionListener; -import com.intellij.xdebugger.impl.frame.XFramesView; -import com.intellij.xdebugger.impl.frame.XThreadsView; -import com.intellij.xdebugger.impl.frame.XVariablesView; -import com.intellij.xdebugger.impl.frame.XVariablesViewBase; -import com.intellij.xdebugger.impl.frame.XWatchesView; -import com.intellij.xdebugger.impl.frame.XWatchesViewImpl; +import com.intellij.xdebugger.impl.frame.*; +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter; import com.intellij.xdebugger.impl.messages.XDebuggerImplBundle; -import com.intellij.xdebugger.impl.proxy.MonolithSessionProxyKt; import com.intellij.xdebugger.impl.settings.XDebuggerSettingManagerImpl; import com.intellij.xdebugger.ui.XDebugTabLayouter; import org.jetbrains.annotations.ApiStatus; @@ -100,7 +93,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { @Nullable Icon icon, @Nullable ExecutionEnvironment environment, @Nullable RunContentDescriptor contentToReuse) { - XDebugSessionProxy proxy = MonolithSessionProxyKt.asProxy(session); + XDebugSessionProxy proxy = XDebuggerEntityConverter.asProxy(session); boolean forceNewDebuggerUi = XDebugSessionTabCustomizerKt.forceShowNewDebuggerUi(session.getDebugProcess()); boolean withFramesCustomization = XDebugSessionTabCustomizerKt.allowFramesViewCustomization(session.getDebugProcess()); @Nullable String defaultFramesViewKey = XDebugSessionTabCustomizerKt.getDefaultFramesViewKey(session.getDebugProcess()); @@ -552,7 +545,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { */ @Deprecated public static void showWatchesView(@NotNull XDebugSessionImpl session) { - showWatchesView(MonolithSessionProxyKt.asProxy(session)); + showWatchesView(XDebuggerEntityConverter.asProxy(session)); } public static void showWatchesView(@NotNull XDebugSessionProxy session) { @@ -567,7 +560,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { @Deprecated public static void showFramesView(@Nullable XDebugSessionImpl session) { if (session == null) return; - showFramesView(MonolithSessionProxyKt.asProxy(session)); + showFramesView(XDebuggerEntityConverter.asProxy(session)); } @ApiStatus.Internal diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/SortValuesToggleAction.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/SortValuesToggleAction.kt index ac6491f4f77a..492e61953dc6 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/SortValuesToggleAction.kt +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/SortValuesToggleAction.kt @@ -8,9 +8,8 @@ import com.intellij.openapi.actionSystem.ToggleAction import com.intellij.openapi.project.DumbAware import com.intellij.platform.debugger.impl.shared.SplitDebuggerAction import com.intellij.util.application -import com.intellij.xdebugger.impl.XDebuggerUtilImpl -import com.intellij.xdebugger.impl.settings.XDebuggerSettingManagerImpl import com.intellij.xdebugger.impl.ui.DebuggerUIUtil +import com.intellij.xdebugger.settings.XDebuggerSettingsManager import org.jetbrains.annotations.ApiStatus @ApiStatus.Internal @@ -27,12 +26,12 @@ class SortValuesToggleAction : ToggleAction(), DumbAware, SplitDebuggerAction { } override fun isSelected(e: AnActionEvent): Boolean { - return XDebuggerSettingManagerImpl.getInstanceImpl().dataViewSettings.isSortValues + return XDebuggerSettingsManager.getInstance().dataViewSettings.isSortValues } override fun setSelected(e: AnActionEvent, state: Boolean) { - XDebuggerSettingManagerImpl.getInstanceImpl().dataViewSettings.isSortValues = state + XDebuggerSettingsManager.getInstance().dataViewSettings.isSortValues = state saveSettingsForRemoteDevelopment(e.coroutineScope, application) - XDebuggerUtilImpl.rebuildAllSessionsViews(e.project) + DebuggerUIUtil.rebuildAllSessionsViews(e.project) } }