From bb4679f3907983e03b17032dbe93a8ddc6b94763 Mon Sep 17 00:00:00 2001 From: Maksim Zuev Date: Tue, 19 Aug 2025 16:07:53 +0200 Subject: [PATCH] [rd debugger] IDEA-377734 Use renderer id instead of name GitOrigin-RevId: 4f26cf29e818177bf849d6948d83f8714374b45f --- .../impl/backend/BackendJavaDebuggerSessionApi.kt | 7 ++++--- java/debugger/impl/BUILD.bazel | 1 + java/debugger/impl/intellij.java.debugger.impl.iml | 1 + .../com/intellij/debugger/engine/DebugProcessImpl.java | 5 +++-- .../src/com/intellij/debugger/engine/JavaValueUtils.kt | 4 +++- .../java/debugger/impl/shared/actions/ViewAsGroup.kt | 9 +++++---- .../debugger/impl/shared/engine/JavaValueDescriptor.kt | 8 +++++++- .../debugger/impl/shared/rpc/JavaDebuggerSessionApi.kt | 3 ++- 8 files changed, 26 insertions(+), 12 deletions(-) diff --git a/java/debugger/backend/src/com/intellij/java/debugger/impl/backend/BackendJavaDebuggerSessionApi.kt b/java/debugger/backend/src/com/intellij/java/debugger/impl/backend/BackendJavaDebuggerSessionApi.kt index 1c6bfea55f21..09ddd55fd7f5 100644 --- a/java/debugger/backend/src/com/intellij/java/debugger/impl/backend/BackendJavaDebuggerSessionApi.kt +++ b/java/debugger/backend/src/com/intellij/java/debugger/impl/backend/BackendJavaDebuggerSessionApi.kt @@ -5,6 +5,7 @@ import com.intellij.debugger.actions.* import com.intellij.debugger.engine.* import com.intellij.execution.filters.ExceptionFilters import com.intellij.ide.ui.icons.rpcId +import com.intellij.java.debugger.impl.shared.engine.NodeRendererId import com.intellij.java.debugger.impl.shared.rpc.* import com.intellij.openapi.application.EDT import com.intellij.platform.debugger.impl.rpc.toRpc @@ -65,12 +66,12 @@ internal class BackendJavaDebuggerSessionApi : JavaDebuggerSessionApi { } } - override suspend fun setRenderer(rendererName: String?, xValueIds: List) { + override suspend fun setRenderer(rendererId: NodeRendererId?, xValueIds: List) { val xValueModels = xValueIds.mapNotNull { BackendXValueModel.findById(it) } val javaValues = xValueModels.mapNotNull { it.xValue as? JavaValue } if (javaValues.isEmpty()) return - val renderer = if (rendererName != null) { - javaValues[0].evaluationContext.debugProcess.getRendererByName(rendererName) ?: return + val renderer = if (rendererId != null) { + javaValues[0].evaluationContext.debugProcess.getRendererById(rendererId) ?: return } else { null diff --git a/java/debugger/impl/BUILD.bazel b/java/debugger/impl/BUILD.bazel index f21859397380..6e1ba2b2d3da 100644 --- a/java/debugger/impl/BUILD.bazel +++ b/java/debugger/impl/BUILD.bazel @@ -66,6 +66,7 @@ jvm_library( "//platform/xdebugger-impl/shared", "//platform/xdebugger-impl/rpc", "//fleet/rpc", + "//platform/kernel/rpc", ], runtime_deps = [":impl_resources"] ) diff --git a/java/debugger/impl/intellij.java.debugger.impl.iml b/java/debugger/impl/intellij.java.debugger.impl.iml index c68db03b0f45..1e6a4dbf0e15 100644 --- a/java/debugger/impl/intellij.java.debugger.impl.iml +++ b/java/debugger/impl/intellij.java.debugger.impl.iml @@ -99,6 +99,7 @@ + diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java index 938265d4ae2b..1696bdb860ec 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java @@ -36,6 +36,7 @@ import com.intellij.execution.process.ProcessListener; import com.intellij.execution.process.ProcessOutputTypes; import com.intellij.execution.runners.ExecutionUtil; import com.intellij.idea.ActionsBundle; +import com.intellij.java.debugger.impl.shared.engine.NodeRendererId; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ApplicationNamesInfo; @@ -279,8 +280,8 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb } @ApiStatus.Internal - public @Nullable NodeRenderer getRendererByName(String name) { - return ContainerUtil.find(myRenderers, r -> r.getName().equals(name)); + public @Nullable NodeRenderer getRendererById(@NotNull NodeRendererId id) { + return ContainerUtil.find(myRenderers, r -> id.equals(JavaValueUtilsKt.getId(r))); } public @NotNull CompletableFuture getAutoRendererAsync(@Nullable Type type) { diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueUtils.kt b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueUtils.kt index 6d4fc45e3f74..21a9e981fbb1 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueUtils.kt +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueUtils.kt @@ -11,6 +11,7 @@ import com.intellij.debugger.ui.tree.render.Renderer import com.intellij.java.debugger.impl.shared.engine.JavaValueDescriptor import com.intellij.java.debugger.impl.shared.engine.JavaValueObjectReferenceInfo import com.intellij.java.debugger.impl.shared.engine.NodeRendererDto +import com.intellij.java.debugger.impl.shared.engine.NodeRendererId import com.intellij.openapi.application.readAction import com.intellij.openapi.components.Service import com.intellij.openapi.components.service @@ -92,7 +93,8 @@ private fun getApplicableNodeRenderers(value: JavaValue): CompletableFuture - JavaDebuggerSessionApi.getInstance().setRenderer(nodeRenderer?.name, ids) + JavaDebuggerSessionApi.getInstance().setRenderer(rendererId, ids) } for ((node, value) in selectedNodesWithJavaValues) { node.invokeNodeUpdate { diff --git a/java/debugger/shared/src/com/intellij/java/debugger/impl/shared/engine/JavaValueDescriptor.kt b/java/debugger/shared/src/com/intellij/java/debugger/impl/shared/engine/JavaValueDescriptor.kt index b494a9e8f618..5559e3fe4932 100644 --- a/java/debugger/shared/src/com/intellij/java/debugger/impl/shared/engine/JavaValueDescriptor.kt +++ b/java/debugger/shared/src/com/intellij/java/debugger/impl/shared/engine/JavaValueDescriptor.kt @@ -1,6 +1,8 @@ // 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.java.debugger.impl.shared.engine +import com.intellij.platform.rpc.Id +import com.intellij.platform.rpc.UID import com.intellij.xdebugger.frame.CustomXDescriptorSerializerProvider import com.intellij.xdebugger.frame.XDescriptor import fleet.rpc.core.RpcFlow @@ -32,7 +34,11 @@ data class JavaValueDescriptor( @ApiStatus.Internal @Serializable -data class NodeRendererDto(val name: @Nls String) +data class NodeRendererId(override val uid: UID) : Id + +@ApiStatus.Internal +@Serializable +data class NodeRendererDto(val id: NodeRendererId, val name: @Nls String) @ApiStatus.Internal @Serializable diff --git a/java/debugger/shared/src/com/intellij/java/debugger/impl/shared/rpc/JavaDebuggerSessionApi.kt b/java/debugger/shared/src/com/intellij/java/debugger/impl/shared/rpc/JavaDebuggerSessionApi.kt index 19ddcbbd5f08..93509825d92b 100644 --- a/java/debugger/shared/src/com/intellij/java/debugger/impl/shared/rpc/JavaDebuggerSessionApi.kt +++ b/java/debugger/shared/src/com/intellij/java/debugger/impl/shared/rpc/JavaDebuggerSessionApi.kt @@ -3,6 +3,7 @@ package com.intellij.java.debugger.impl.shared.rpc import com.intellij.execution.filters.Filter import com.intellij.ide.ui.icons.IconId +import com.intellij.java.debugger.impl.shared.engine.NodeRendererId import com.intellij.openapi.util.NlsSafe import com.intellij.platform.debugger.impl.rpc.SerializableSimpleTextAttributes import com.intellij.platform.rpc.RemoteApiProviderService @@ -35,7 +36,7 @@ interface JavaDebuggerSessionApi : RemoteApi { suspend fun stepOutOfCodeBlock(sessionId: XDebugSessionId) - suspend fun setRenderer(rendererName: String?, xValueIds: List) + suspend fun setRenderer(rendererId: NodeRendererId?, xValueIds: List) companion object { @JvmStatic