From f0d14cef90e9b84ca2b51cbe1e16b46d2c0f4da8 Mon Sep 17 00:00:00 2001 From: Alexander Kuznetsov Date: Thu, 18 Jun 2026 13:26:39 +0200 Subject: [PATCH] [debugger] IDEA-390563 Cleanup: deduplicate code IJ-CR-208950 (cherry picked from commit 806ed0ca279cbecb47182308e64916e4c1a68487) IJ-CR-208950 GitOrigin-RevId: 169d394c66ca8bfe405c474836691d6f28d75a2c --- .../impl/backend/BackendXBreakpointTypeApi.kt | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXBreakpointTypeApi.kt b/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXBreakpointTypeApi.kt index 5fe0e74f6681..6d8cf69fc44c 100644 --- a/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXBreakpointTypeApi.kt +++ b/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXBreakpointTypeApi.kt @@ -171,38 +171,18 @@ internal class BackendXBreakpointTypeApi : XBreakpointTypeApi { } if (request.placement == XLineBreakpointVerticalPlacement.INTER_LINE) { - val lineVariant = readAction { variants.firstOrNull { !it.isMultiVariant && it.highlightRange == null } } - if (lineVariant == null) { + val fullLineVariant = readAction { variants.firstOrNull { !it.isMultiVariant && it.highlightRange == null } } + if (fullLineVariant == null) { LOG.debug { "[$requestId] No full-line variant found for inter-line breakpoint, returning XNoBreakpointPossibleResponse" } return XNoBreakpointPossibleResponse } - val variantText = readAction { lineVariant.text } - LOG.debug { "[$requestId] Using full-line variant for inter-line breakpoint: $variantText" } - - if (request.hasBreakpoints) { - LOG.debug { "[$requestId] Breakpoint exists, returning XRemoveBreakpointResponse" } - return XRemoveBreakpointResponse - } - - val breakpoint = createBreakpointByVariant(project, lineVariant, position, request) - LOG.debug { "[$requestId] Created inter-line breakpoint: $breakpoint, returning XLineBreakpointInstalledResponse" } - return XLineBreakpointInstalledResponse(breakpoint.breakpointId) + return toggleSingleVariantBreakpoint(fullLineVariant, requestId, request, project, position) } val singleVariant = variants.singleOrNull() if (singleVariant != null) { - val variantText = readAction { singleVariant.text } - LOG.debug { "[$requestId] Single variant found: $variantText" } - - if (request.hasBreakpoints) { - LOG.debug { "[$requestId] Breakpoint exists, returning XRemoveBreakpointResponse" } - return XRemoveBreakpointResponse - } - - val breakpoint = createBreakpointByVariant(project, singleVariant, position, request) - LOG.debug { "[$requestId] Created breakpoint: $breakpoint, returning XLineBreakpointInstalledResponse" } - return XLineBreakpointInstalledResponse(breakpoint.breakpointId) + return toggleSingleVariantBreakpoint(singleVariant, requestId, request, project, position) } LOG.debug { "[$requestId] Multiple variants found (${variants.size}), creating selection dialog" } @@ -238,6 +218,26 @@ internal class BackendXBreakpointTypeApi : XBreakpointTypeApi { return XLineBreakpointMultipleVariantResponse(variantDtos, selectionCallback) } + private suspend fun toggleSingleVariantBreakpoint( + singleVariant: XLineBreakpointType>.XLineBreakpointVariant, + requestId: Int, + request: XLineBreakpointInstallationRequest, + project: Project, + position: XSourcePosition, + ): XToggleLineBreakpointResponse { + val variantText = readAction { singleVariant.text } + LOG.debug { "[$requestId] Single variant found: $variantText" } + + if (request.hasBreakpoints) { + LOG.debug { "[$requestId] Breakpoint exists, returning XRemoveBreakpointResponse" } + return XRemoveBreakpointResponse + } + + val breakpoint = createBreakpointByVariant(project, singleVariant, position, request) + LOG.debug { "[$requestId] Created breakpoint: $breakpoint, returning XLineBreakpointInstalledResponse" } + return XLineBreakpointInstalledResponse(breakpoint.breakpointId) + } + private suspend fun createBreakpointByVariant( project: Project, variant: XLineBreakpointType>.XLineBreakpointVariant,