diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/monolithJavaValueUtils.kt b/java/debugger/impl/src/com/intellij/debugger/actions/monolithJavaValueUtils.kt index 677f1b1bb935..438909b821c9 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/monolithJavaValueUtils.kt +++ b/java/debugger/impl/src/com/intellij/debugger/actions/monolithJavaValueUtils.kt @@ -8,7 +8,7 @@ import com.intellij.platform.debugger.impl.shared.proxy.XDebugManagerProxy import com.intellij.platform.debugger.impl.shared.proxy.XDebugSessionProxy import com.intellij.xdebugger.SplitDebuggerMode import com.intellij.xdebugger.frame.XValue -import com.intellij.xdebugger.impl.util.XDebugMonolithUtils +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter import kotlinx.coroutines.runBlocking internal fun findJavaValue(xValue: XValue, sessionProxy: XDebugSessionProxy): JavaValue? { @@ -20,7 +20,7 @@ internal fun findJavaValue(xValue: XValue, sessionProxy: XDebugSessionProxy): Ja @Suppress("RAW_RUN_BLOCKING") // no actual suspend inside runBlocking return runBlocking { managerProxy.withId(xValue, sessionProxy) { xValueId -> - XDebugMonolithUtils.findXValueById(xValueId) as? JavaValue + XDebuggerEntityConverter.getValue(xValueId) as? JavaValue } } } \ No newline at end of file diff --git a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXBreakpointType.kt b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXBreakpointType.kt index 1d51ed8719b2..65309509a2b8 100644 --- a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXBreakpointType.kt +++ b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXBreakpointType.kt @@ -29,7 +29,7 @@ import com.intellij.xdebugger.breakpoints.XBreakpointType.StandardPanels import com.intellij.xdebugger.breakpoints.XLineBreakpointType import com.intellij.xdebugger.breakpoints.ui.XBreakpointCustomPropertiesPanel import com.intellij.xdebugger.impl.breakpoints.XBreakpointUtil -import com.intellij.xdebugger.impl.util.XDebugMonolithUtils +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import javax.swing.Icon @@ -150,28 +150,28 @@ private open class FrontendXBreakpointType( @Suppress("UNCHECKED_CAST") override fun createCustomPropertiesPanel(project: Project): XBreakpointCustomPropertiesPanel>? { // TODO Custom panels are only supported in monolith - val monolithType = XDebugMonolithUtils.findBreakpointTypeById(id) ?: return null + val monolithType = XDebuggerEntityConverter.getBreakpointType(id) ?: return null return monolithType.createCustomPropertiesPanel(project) as XBreakpointCustomPropertiesPanel>? } @Suppress("UNCHECKED_CAST") override fun createCustomConditionsPanel(): XBreakpointCustomPropertiesPanel>? { // TODO Custom panels are only supported in monolith - val monolithType = XDebugMonolithUtils.findBreakpointTypeById(id) ?: return null + val monolithType = XDebuggerEntityConverter.getBreakpointType(id) ?: return null return monolithType.createCustomConditionsPanel() as XBreakpointCustomPropertiesPanel>? } @Suppress("UNCHECKED_CAST") override fun createCustomRightPropertiesPanel(project: Project): XBreakpointCustomPropertiesPanel>? { // TODO Custom panels are only supported in monolith - val monolithType = XDebugMonolithUtils.findBreakpointTypeById(id) ?: return null + val monolithType = XDebuggerEntityConverter.getBreakpointType(id) ?: return null return monolithType.createCustomRightPropertiesPanel(project) as XBreakpointCustomPropertiesPanel>? } @Suppress("UNCHECKED_CAST") override fun createCustomTopPropertiesPanel(project: Project): XBreakpointCustomPropertiesPanel>? { // TODO Custom panels are only supported in monolith - val monolithType = XDebugMonolithUtils.findBreakpointTypeById(id) ?: return null + val monolithType = XDebuggerEntityConverter.getBreakpointType(id) ?: return null return monolithType.createCustomTopPropertiesPanel(project) as XBreakpointCustomPropertiesPanel>? } diff --git a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebugManagerProxy.kt b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebugManagerProxy.kt index 29c57754290c..1a6b36cc2ba7 100644 --- a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebugManagerProxy.kt +++ b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebugManagerProxy.kt @@ -17,7 +17,8 @@ import com.intellij.xdebugger.frame.XExecutionStack import com.intellij.xdebugger.frame.XValue import com.intellij.xdebugger.impl.XDebuggerExecutionPointManagerImpl import com.intellij.xdebugger.impl.proxy.withTemporaryXValueId -import com.intellij.xdebugger.impl.util.XDebugMonolithUtils +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter +import com.intellij.xdebugger.impl.XDebugSessionImpl import kotlinx.coroutines.flow.Flow internal class FrontendXDebugManagerProxy : XDebugManagerProxy { @@ -39,7 +40,8 @@ internal class FrontendXDebugManagerProxy : XDebugManagerProxy { } else { // Otherwise try to fall back to monolith implementation if possible - val monolithSession = XDebugMonolithUtils.findSessionById(session.id) ?: error("XValue is not a FrontendXValue: $value") + val monolithSession = XDebuggerEntityConverter.getSession(session) ?: error("XValue is not a FrontendXValue: $value") + monolithSession as XDebugSessionImpl return withTemporaryXValueId(value, monolithSession, block) } } diff --git a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebuggerSession.kt b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebuggerSession.kt index ece03daf8bbf..e830653c02cd 100644 --- a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebuggerSession.kt +++ b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebuggerSession.kt @@ -70,7 +70,7 @@ import com.intellij.xdebugger.impl.rpc.toRpc import com.intellij.xdebugger.impl.ui.SplitDebuggerUIUtil import com.intellij.xdebugger.impl.ui.XDebugSessionData import com.intellij.xdebugger.impl.ui.XDebugSessionTab -import com.intellij.xdebugger.impl.util.XDebugMonolithUtils +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter import com.intellij.xdebugger.ui.XDebugTabLayouter import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope @@ -536,7 +536,7 @@ class FrontendXDebuggerSession( // As a result, additional actions registered on the backend are added here as a flat list, // and separators e.g. from the original backend structure are not preserved. // We maintain two code paths: one for Monolith (preserving full group structure) and one for RemDev (flat view). - val monolithSession = XDebugMonolithUtils.findSessionById(id) + val monolithSession = XDebuggerEntityConverter.getSession(this) if (monolithSession != null) { monolithSession.debugProcess.registerAdditionalActions(leftToolbar, topLeftToolbar, settings) } else { diff --git a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/evaluate/quick/FrontendXValue.kt b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/evaluate/quick/FrontendXValue.kt index 3050b1b22c50..6d363aa65d60 100644 --- a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/evaluate/quick/FrontendXValue.kt +++ b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/evaluate/quick/FrontendXValue.kt @@ -39,14 +39,8 @@ import com.intellij.xdebugger.impl.rpc.sourcePosition import com.intellij.xdebugger.impl.ui.XValueTextProvider import com.intellij.xdebugger.impl.ui.tree.XValueExtendedPresentation import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeEx -import com.intellij.xdebugger.impl.util.XDebugMonolithUtils -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.NonCancellable -import kotlinx.coroutines.async -import kotlinx.coroutines.awaitCancellation -import kotlinx.coroutines.cancel +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter +import kotlinx.coroutines.* import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.collectLatest @@ -271,7 +265,7 @@ class FrontendXValue private constructor( override fun getReferrersProvider(): XReferrersProvider? { // TODO referrersProvider is only supported in monolith - return XDebugMonolithUtils.findXValueById(xValueDto.id)?.referrersProvider + return XDebuggerEntityConverter.getValue(xValueDto.id)?.referrersProvider } override fun shouldShowTextValue(): Boolean = textProvider?.value?.shouldShowTextValue ?: false diff --git a/platform/xdebugger-impl/shared/src/com/intellij/platform/debugger/impl/shared/XDebuggerMonolithAccessPoint.kt b/platform/xdebugger-impl/shared/src/com/intellij/platform/debugger/impl/shared/XDebuggerMonolithAccessPoint.kt index e163a4b82b1a..83f7ec473f95 100644 --- a/platform/xdebugger-impl/shared/src/com/intellij/platform/debugger/impl/shared/XDebuggerMonolithAccessPoint.kt +++ b/platform/xdebugger-impl/shared/src/com/intellij/platform/debugger/impl/shared/XDebuggerMonolithAccessPoint.kt @@ -2,8 +2,13 @@ package com.intellij.platform.debugger.impl.shared import com.intellij.openapi.extensions.ExtensionPointName +import com.intellij.platform.debugger.impl.rpc.XBreakpointId +import com.intellij.platform.debugger.impl.rpc.XValueId import com.intellij.platform.debugger.impl.shared.proxy.XDebugSessionProxy import com.intellij.xdebugger.XDebugSession +import com.intellij.xdebugger.breakpoints.XBreakpoint +import com.intellij.xdebugger.breakpoints.XBreakpointType +import com.intellij.xdebugger.frame.XValue import org.jetbrains.annotations.ApiStatus @ApiStatus.Internal @@ -11,6 +16,9 @@ interface XDebuggerMonolithAccessPoint { fun getSession(proxy: XDebugSessionProxy): XDebugSession? fun getSessionNonSplitOnly(proxy: XDebugSessionProxy): XDebugSession? fun asProxy(session: XDebugSession): XDebugSessionProxy? + fun getValue(valueId: XValueId): XValue? + fun getBreakpointType(typeId: String): XBreakpointType<*, *>? + fun getBreakpoint(breakpointId: XBreakpointId): XBreakpoint<*>? companion object { internal val EP_NAME = ExtensionPointName("com.intellij.xdebugger.monolithAccessPoint") 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 e4225d548d83..4f2e26db7ccc 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java @@ -94,7 +94,7 @@ import com.intellij.xdebugger.impl.settings.XDebuggerSettingManagerImpl; import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeActionBase; -import com.intellij.xdebugger.impl.util.XDebugMonolithUtils; +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter; import com.intellij.xdebugger.settings.XDebuggerSettings; import com.intellij.xdebugger.ui.DebuggerColors; import kotlin.Unit; @@ -356,7 +356,7 @@ public class XDebuggerUtilImpl extends XDebuggerUtil { if (b instanceof MonolithLineBreakpointProxy monolith) { return monolith.getBreakpoint(); } - XBreakpointBase monolithBreakpoint = XDebugMonolithUtils.findBreakpointById(b.getId()); + XBreakpoint monolithBreakpoint = XDebuggerEntityConverter.getBreakpoint(b.getId()); if (monolithBreakpoint instanceof XLineBreakpoint lineBreakpoint) { return lineBreakpoint; } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/BreakpointGutterIconRenderer.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/BreakpointGutterIconRenderer.java index c492dc628b8f..4042f151cadb 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/BreakpointGutterIconRenderer.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/BreakpointGutterIconRenderer.java @@ -13,8 +13,10 @@ 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.XDebuggerBundle; +import com.intellij.xdebugger.breakpoints.XBreakpoint; +import com.intellij.xdebugger.breakpoints.XBreakpointType; import com.intellij.xdebugger.impl.actions.EditBreakpointAction; -import com.intellij.xdebugger.impl.util.XDebugMonolithUtils; + import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -73,9 +75,10 @@ public final class BreakpointGutterIconRenderer extends CommonBreakpointGutterIc XDebugSessionProxy currentSessionProxy = XDebugManagerProxy.getInstance().getCurrentSessionProxy(myBreakpoint.getProject()); if (currentSessionProxy != null) { var debugSession = XDebuggerEntityConverter.getSession(currentSessionProxy); - XBreakpointBase breakpoint = XDebugMonolithUtils.findBreakpointById(myBreakpoint.getId()); + XBreakpoint breakpoint = XDebuggerEntityConverter.getBreakpoint(myBreakpoint.getId()); if (debugSession != null && breakpoint != null) { - return new DefaultActionGroup(breakpoint.getAdditionalPopupMenuActions(debugSession)); + var type = (XBreakpointType)breakpoint.getType(); + return new DefaultActionGroup(type.getAdditionalPopupMenuActions(breakpoint, debugSession)); } } return super.getPopupMenuActions(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XLightBreakpointPropertiesPanel.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XLightBreakpointPropertiesPanel.java index 32df5ad90511..b666c0404390 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XLightBreakpointPropertiesPanel.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XLightBreakpointPropertiesPanel.java @@ -11,6 +11,7 @@ import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.platform.debugger.impl.shared.proxy.XBreakpointManagerProxy; import com.intellij.platform.debugger.impl.shared.proxy.XBreakpointProxy; import com.intellij.platform.debugger.impl.shared.proxy.XBreakpointTypeProxy; +import com.intellij.platform.debugger.impl.ui.XDebuggerEntityConverter; import com.intellij.ui.components.ActionLink; import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.components.JBLabel; @@ -22,6 +23,7 @@ import com.intellij.xdebugger.XDebuggerBundle; import com.intellij.xdebugger.XExpression; import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.breakpoints.SuspendPolicy; +import com.intellij.xdebugger.breakpoints.XBreakpoint; import com.intellij.xdebugger.breakpoints.XBreakpointManager; import com.intellij.xdebugger.breakpoints.XBreakpointType; import com.intellij.xdebugger.breakpoints.XLineBreakpoint; @@ -34,7 +36,6 @@ import com.intellij.xdebugger.impl.breakpoints.XBreakpointManagerImpl; import com.intellij.xdebugger.impl.proxy.MonolithBreakpointManagerKt; import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import com.intellij.xdebugger.impl.ui.XDebuggerExpressionComboBox; -import com.intellij.xdebugger.impl.util.XDebugMonolithUtils; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -229,7 +230,7 @@ public class XLightBreakpointPropertiesPanel implements XSuspendPolicyPanel.Dele XBreakpointCustomPropertiesPanel customRightConditionPanel = breakpointType.createCustomRightPropertiesPanel(project); boolean isVisibleOnPopup = false; if (customRightConditionPanel != null) { - XBreakpointBase monolithBreakpoint = XDebugMonolithUtils.findBreakpointById(myBreakpoint.getId()); + XBreakpoint monolithBreakpoint = XDebuggerEntityConverter.getBreakpoint(myBreakpoint.getId()); if (monolithBreakpoint != null) { isVisibleOnPopup = customRightConditionPanel.isVisibleOnPopup(monolithBreakpoint); } @@ -313,7 +314,7 @@ public class XLightBreakpointPropertiesPanel implements XSuspendPolicyPanel.Dele myConditionComboBox.saveTextInHistory(); } - XBreakpointBase monolithBreakpoint = XDebugMonolithUtils.findBreakpointById(myBreakpoint.getId()); + XBreakpoint monolithBreakpoint = XDebuggerEntityConverter.getBreakpoint(myBreakpoint.getId()); if (monolithBreakpoint != null) { for (XBreakpointCustomPropertiesPanel customPanel : myCustomPanels) { customPanel.saveTo(monolithBreakpoint); @@ -346,7 +347,7 @@ public class XLightBreakpointPropertiesPanel implements XSuspendPolicyPanel.Dele onCheckboxChanged(); } - XBreakpointBase monolithBreakpoint = XDebugMonolithUtils.findBreakpointById(myBreakpoint.getId()); + XBreakpoint monolithBreakpoint = XDebuggerEntityConverter.getBreakpoint(myBreakpoint.getId()); if (monolithBreakpoint != null) { for (XBreakpointCustomPropertiesPanel customPanel : myCustomPanels) { customPanel.loadFrom(monolithBreakpoint); 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 f294915aac3f..b175f7fc6bef 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 @@ -14,7 +14,9 @@ import com.intellij.openapi.components.service 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.XBreakpointId import com.intellij.platform.debugger.impl.rpc.XDebugSessionId +import com.intellij.platform.debugger.impl.rpc.XValueId 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 @@ -25,17 +27,22 @@ import com.intellij.util.awaitCancellationAndInvoke import com.intellij.xdebugger.XDebugSession import com.intellij.xdebugger.XDebugSessionListener import com.intellij.xdebugger.XSourcePosition +import com.intellij.xdebugger.breakpoints.XBreakpoint +import com.intellij.xdebugger.breakpoints.XBreakpointType import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider import com.intellij.xdebugger.evaluation.XDebuggerEvaluator import com.intellij.xdebugger.frame.XDropFrameHandler import com.intellij.xdebugger.frame.XExecutionStack import com.intellij.xdebugger.frame.XStackFrame import com.intellij.xdebugger.frame.XSuspendContext +import com.intellij.xdebugger.frame.XValue import com.intellij.xdebugger.impl.XDebugSessionImpl import com.intellij.xdebugger.impl.XSourceKind import com.intellij.xdebugger.impl.XSteppingSuspendContext import com.intellij.xdebugger.impl.breakpoints.XBreakpointBase +import com.intellij.xdebugger.impl.breakpoints.XBreakpointUtil import com.intellij.xdebugger.impl.frame.XValueMarkers +import com.intellij.xdebugger.impl.rpc.models.BackendXValueModel import com.intellij.xdebugger.impl.rpc.models.findValue import com.intellij.xdebugger.impl.ui.XDebugSessionData import com.intellij.xdebugger.impl.ui.XDebugSessionTab @@ -331,4 +338,16 @@ internal class XDebuggerMonolithAccessPointImpl : XDebuggerMonolithAccessPoint { override fun asProxy(session: XDebugSession): XDebugSessionProxy { return session.asProxy() } + + override fun getValue(valueId: XValueId): XValue? { + return BackendXValueModel.findById(valueId)?.xValue + } + + override fun getBreakpointType(typeId: String): XBreakpointType<*, *>? { + return XBreakpointUtil.findType(typeId) + } + + override fun getBreakpoint(breakpointId: XBreakpointId): XBreakpoint<*>? { + return breakpointId.findValue() + } } \ No newline at end of file diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/util/XDebugMonolithUtils.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/util/XDebugMonolithUtils.kt deleted file mode 100644 index 5a4a77389644..000000000000 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/util/XDebugMonolithUtils.kt +++ /dev/null @@ -1,63 +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.util - -import com.intellij.frontend.FrontendApplicationInfo -import com.intellij.frontend.FrontendType -import com.intellij.platform.debugger.impl.rpc.XBreakpointId -import com.intellij.platform.debugger.impl.rpc.XDebugSessionId -import com.intellij.platform.debugger.impl.rpc.XValueId -import com.intellij.xdebugger.breakpoints.XBreakpointType -import com.intellij.xdebugger.frame.XValue -import com.intellij.xdebugger.impl.XDebugSessionImpl -import com.intellij.xdebugger.impl.breakpoints.XBreakpointBase -import com.intellij.xdebugger.impl.breakpoints.XBreakpointUtil -import com.intellij.xdebugger.impl.rpc.models.BackendXValueModel -import com.intellij.xdebugger.impl.rpc.models.findValue -import org.jetbrains.annotations.ApiStatus - -@ApiStatus.Internal -object XDebugMonolithUtils { - private fun isMonolithOrBackend(): Boolean = FrontendApplicationInfo.getFrontendType() is FrontendType.Monolith - - /** - * Provides access to the backend debug session by its ID. - * This method will return null in RemDev mode. - * Use this method only for components that should be available in monolith only. - */ - @JvmStatic - fun findSessionById(sessionId: XDebugSessionId): XDebugSessionImpl? { - if (!isMonolithOrBackend()) return null - return sessionId.findValue() - } - - /** - * Provides access to the backend [XValue] by its ID. - * This method will return null in RemDev mode. - * Use this method only for components that should be available in monolith only. - */ - fun findXValueById(xValueId: XValueId): XValue? { - if (!isMonolithOrBackend()) return null - return BackendXValueModel.findById(xValueId)?.xValue - } - - /** - * Provides access to the backend [XBreakpointType] by its ID. - * This method will return null in RemDev mode. - * Use this method only for components that should be available in monolith only. - */ - fun findBreakpointTypeById(id: String): XBreakpointType<*, *>? { - if (!isMonolithOrBackend()) return null - return XBreakpointUtil.findType(id) - } - - /** - * Provides access to the backend [XBreakpointBase] by its ID. - * This method will return null in RemDev mode. - * Use this method only for components that should be available in monolith only. - */ - @JvmStatic - fun findBreakpointById(breakpointId: XBreakpointId): XBreakpointBase<*, *, *>? { - if (!isMonolithOrBackend()) return null - return breakpointId.findValue() - } -} \ No newline at end of file diff --git a/platform/xdebugger-impl/ui/src/com/intellij/platform/debugger/impl/ui/XDebuggerEntityConverter.kt b/platform/xdebugger-impl/ui/src/com/intellij/platform/debugger/impl/ui/XDebuggerEntityConverter.kt index c06453d958e3..09d5f2b8f632 100644 --- a/platform/xdebugger-impl/ui/src/com/intellij/platform/debugger/impl/ui/XDebuggerEntityConverter.kt +++ b/platform/xdebugger-impl/ui/src/com/intellij/platform/debugger/impl/ui/XDebuggerEntityConverter.kt @@ -1,9 +1,14 @@ // 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.platform.debugger.impl.ui +import com.intellij.platform.debugger.impl.rpc.XBreakpointId +import com.intellij.platform.debugger.impl.rpc.XValueId 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.breakpoints.XBreakpoint +import com.intellij.xdebugger.breakpoints.XBreakpointType +import com.intellij.xdebugger.frame.XValue import org.jetbrains.annotations.ApiStatus @ApiStatus.Internal @@ -40,4 +45,43 @@ object XDebuggerEntityConverter { ?: error("No XDebuggerMonolithAccessPoint implementation that can convert $session found. " + "XDebuggerMonolithAccessPointImpl should be registered in a shared module and always be able to convert sessions.") } + + /** + * For a given [XValueId] finds the corresponding [XValue] instance. + * + * Always returns `null` on the frontend. + * + * Use this method to implement monolith-only features with a split debugger enabled. + */ + @ApiStatus.Internal + @JvmStatic + fun getValue(valueId: XValueId): XValue? { + return XDebuggerMonolithAccessPoint.find { it.getValue(valueId) } + } + + /** + * For a given breakpoint type ID finds the corresponding [XBreakpointType] instance. + * + * Always returns `null` on the frontend. + * + * Use this method to implement monolith-only features with a split debugger enabled. + */ + @ApiStatus.Internal + @JvmStatic + fun getBreakpointType(typeId: String): XBreakpointType<*, *>? { + return XDebuggerMonolithAccessPoint.find { it.getBreakpointType(typeId) } + } + + /** + * For a given [XBreakpointId] finds the corresponding [XBreakpoint] instance. + * + * Always returns `null` on the frontend. + * + * Use this method to implement monolith-only features with a split debugger enabled. + */ + @ApiStatus.Internal + @JvmStatic + fun getBreakpoint(breakpointId: XBreakpointId): XBreakpoint<*>? { + return XDebuggerMonolithAccessPoint.find { it.getBreakpoint(breakpointId) } + } } \ No newline at end of file