mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[rd debugger] IDEA-377734 Move CreateRendererAction to frontend
GitOrigin-RevId: c8135ff2ed1cd2104a5b2325d72a125e99301ce7
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a1d0e99af3
commit
374d5ccabf
+10
@@ -1,7 +1,9 @@
|
||||
// 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.backend
|
||||
|
||||
import com.intellij.debugger.actions.CreateRendererActionUtils
|
||||
import com.intellij.debugger.engine.JavaDebugProcess
|
||||
import com.intellij.debugger.engine.JavaValue
|
||||
import com.intellij.debugger.memory.action.CalculateRetainedSizeActionUtil
|
||||
import com.intellij.debugger.memory.action.DebuggerTreeAction
|
||||
import com.intellij.debugger.memory.filtering.ClassInstancesProvider
|
||||
@@ -35,4 +37,12 @@ internal class BackendJavaDebuggerLuxActionsApi : JavaDebuggerLuxActionsApi {
|
||||
CalculateRetainedSizeActionUtil.showDialog(xValue, nodeName, process)
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun showCreateRendererDialog(xValueId: XValueId) {
|
||||
val xValueModel = BackendXValueModel.findById(xValueId) ?: return
|
||||
val javaValue = xValueModel.xValue as? JavaValue ?: return
|
||||
withContext(Dispatchers.EDT) {
|
||||
CreateRendererActionUtils.showCreateRendererDialog(javaValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -285,11 +285,6 @@
|
||||
<add-to-group group-id="XDebugger.Frames.Tree.Popup.Frontend"/>
|
||||
</action>
|
||||
|
||||
<action id="Debugger.CreateRenderer" class="com.intellij.debugger.actions.CreateRendererAction">
|
||||
<add-to-group group-id="XDebugger.Watches.Inline.Popup" anchor="last"/>
|
||||
<override-text place="XDebuggerTreePopup"/>
|
||||
</action>
|
||||
|
||||
<action id="Debugger.SwitchToTheNextContext" class="com.intellij.debugger.actions.SwitchToTheNextContextAction"/>
|
||||
<action id="Debugger.CallTracer" class="com.intellij.debugger.ui.breakpoints.CallTracer$CallTracerToggleAction"
|
||||
icon="AllIcons.Debugger.Db_set_breakpoint">
|
||||
|
||||
+10
-41
@@ -2,61 +2,30 @@
|
||||
package com.intellij.debugger.actions;
|
||||
|
||||
import com.intellij.debugger.JavaDebuggerBundle;
|
||||
import com.intellij.debugger.engine.DebugProcessImpl;
|
||||
import com.intellij.debugger.engine.JavaValue;
|
||||
import com.intellij.debugger.engine.SuspendContextImpl;
|
||||
import com.intellij.debugger.engine.events.DebuggerContextCommandImpl;
|
||||
import com.intellij.debugger.impl.DebuggerContextImpl;
|
||||
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl;
|
||||
import com.intellij.debugger.engine.events.SuspendContextCommandImpl;
|
||||
import com.intellij.debugger.settings.NodeRendererSettings;
|
||||
import com.intellij.debugger.settings.UserRenderersConfigurable;
|
||||
import com.intellij.debugger.ui.tree.render.CompoundReferenceRenderer;
|
||||
import com.intellij.openapi.actionSystem.ActionUpdateThread;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.options.ConfigurableBase;
|
||||
import com.intellij.openapi.options.ex.SingleConfigurableEditor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
|
||||
import com.sun.jdi.Type;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class CreateRendererAction extends AnAction {
|
||||
@Override
|
||||
public void update(@NotNull AnActionEvent e) {
|
||||
final List<JavaValue> values = ViewAsGroup.getSelectedValues(e);
|
||||
if (values.size() != 1) {
|
||||
e.getPresentation().setEnabledAndVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull ActionUpdateThread getActionUpdateThread() {
|
||||
return ActionUpdateThread.BGT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(final @NotNull AnActionEvent event) {
|
||||
final DebuggerContextImpl debuggerContext = DebuggerAction.getDebuggerContext(event.getDataContext());
|
||||
final List<JavaValue> values = ViewAsGroup.getSelectedValues(event);
|
||||
if (values.size() != 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
final JavaValue javaValue = values.get(0);
|
||||
|
||||
final DebugProcessImpl process = debuggerContext.getDebugProcess();
|
||||
if (process == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Project project = event.getProject();
|
||||
|
||||
javaValue.getEvaluationContext().getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext) {
|
||||
@ApiStatus.Internal
|
||||
public final class CreateRendererActionUtils {
|
||||
public static void showCreateRendererDialog(final JavaValue javaValue) {
|
||||
EvaluationContextImpl evaluationContext = javaValue.getEvaluationContext();
|
||||
Project project = evaluationContext.getProject();
|
||||
evaluationContext.getManagerThread().schedule(new SuspendContextCommandImpl(evaluationContext.getSuspendContext()) {
|
||||
@Override
|
||||
public void threadAction(@NotNull SuspendContextImpl suspendContext) {
|
||||
public void contextAction(@NotNull SuspendContextImpl suspendContext) {
|
||||
Type type = javaValue.getDescriptor().getType();
|
||||
final String name = type != null ? type.name() : null;
|
||||
DebuggerUIUtil.invokeLater(() -> {
|
||||
@@ -59,6 +59,10 @@
|
||||
<add-to-group group-id="XDebugger.ValueGroup" anchor="last"/>
|
||||
<add-to-group group-id="XDebugger.Inspect.Tree.Popup.Bottom.Section.Frontend" anchor="last"/>
|
||||
</group>
|
||||
<action id="Debugger.CreateRenderer" class="com.intellij.java.debugger.impl.shared.actions.CreateRendererAction">
|
||||
<add-to-group group-id="XDebugger.Watches.Inline.Popup" anchor="last"/>
|
||||
<override-text place="XDebuggerTreePopup"/>
|
||||
</action>
|
||||
<action id="Debugger.AutoRenderer" class="com.intellij.java.debugger.impl.shared.actions.AutoRendererAction"/>
|
||||
<action id="Debugger.MuteRenderers" class="com.intellij.java.debugger.impl.shared.actions.MuteRenderersAction">
|
||||
<add-to-group group-id="XDebugger.ValueGroup" anchor="after" relative-to-action="Debugger.ViewAsGroup"/>
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
// 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.actions
|
||||
|
||||
import com.intellij.java.debugger.impl.shared.rpc.JavaDebuggerLuxActionsApi
|
||||
import com.intellij.openapi.actionSystem.ActionUpdateThread
|
||||
import com.intellij.openapi.actionSystem.AnAction
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.actionSystem.remoting.ActionRemoteBehaviorSpecification
|
||||
import com.intellij.xdebugger.impl.frame.XDebugManagerProxy
|
||||
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
private class CreateRendererAction : AnAction(), ActionRemoteBehaviorSpecification.FrontendOtherwiseBackend {
|
||||
override fun update(e: AnActionEvent) {
|
||||
val values = getSelectedJavaValuesWithDescriptors(e)
|
||||
e.presentation.setEnabledAndVisible(values.size == 1)
|
||||
}
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
val session = DebuggerUIUtil.getSessionProxy(e) ?: return
|
||||
val (_, xValue, _) = getSelectedJavaValuesWithDescriptors(e).singleOrNull() ?: return
|
||||
session.coroutineScope.launch {
|
||||
XDebugManagerProxy.getInstance().withId(xValue, session) { xValueId ->
|
||||
JavaDebuggerLuxActionsApi.getInstance().showCreateRendererDialog(xValueId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getActionUpdateThread(): ActionUpdateThread {
|
||||
return ActionUpdateThread.BGT
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -98,7 +98,7 @@ private fun getApplicableRenderers(project: Project, values: List<JavaValueDescr
|
||||
return res ?: emptyList()
|
||||
}
|
||||
|
||||
private fun getSelectedJavaValuesWithDescriptors(event: AnActionEvent): List<Triple<XValueNodeImpl, XValue, JavaValueDescriptor>> {
|
||||
internal fun getSelectedJavaValuesWithDescriptors(event: AnActionEvent): List<Triple<XValueNodeImpl, XValue, JavaValueDescriptor>> {
|
||||
val selectedNodes = XDebuggerTree.getSelectedNodes(event.dataContext)
|
||||
return selectedNodes.map { it to it.valueContainer }
|
||||
.map { it to it.second.xValueDescriptorAsync?.getNow(null) }
|
||||
|
||||
+1
@@ -11,6 +11,7 @@ import fleet.rpc.remoteApiDescriptor
|
||||
interface JavaDebuggerLuxActionsApi : RemoteApi<Unit> {
|
||||
suspend fun showInstancesDialog(xValueId: XValueId)
|
||||
suspend fun showCalculateRetainedSizeDialog(xValueId: XValueId, nodeName: String)
|
||||
suspend fun showCreateRendererDialog(xValueId: XValueId)
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
|
||||
Reference in New Issue
Block a user