[debugger] Add Resume All action for JVM debugger

GitOrigin-RevId: 93541b04b745b9f7a31cac04bf4eedb3505054ba
This commit is contained in:
Alexey.Merkulov
2025-01-21 21:44:41 +00:00
committed by intellij-monorepo-bot
parent 800a1404a9
commit 7b43dc3035
2 changed files with 52 additions and 1 deletions
@@ -0,0 +1,34 @@
// 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.debugger.actions
import com.intellij.debugger.engine.DebugProcessImpl
import com.intellij.debugger.engine.SuspendContextImpl
import com.intellij.debugger.engine.events.DebuggerCommandImpl
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.project.Project
import com.intellij.xdebugger.impl.actions.DebuggerActionHandler
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil
class ResumeAllJavaThreadsActionHandler(val debugProcess: DebugProcessImpl) : DebuggerActionHandler() {
override fun perform(project: Project, event: AnActionEvent) {
val xdebugProcess = debugProcess.xdebugProcess ?: return
debugProcess.managerThread.schedule(object : DebuggerCommandImpl() {
override fun action() {
val contexts: MutableList<SuspendContextImpl> = debugProcess.suspendManager.pausedContexts
for (context in contexts) {
if (!context.isResumed) {
debugProcess.suspendManager.resume(context)
}
}
DebuggerUIUtil.invokeLater(Runnable {
xdebugProcess.session.resume()
})
}
})
}
override fun isEnabled(project: Project, event: AnActionEvent): Boolean {
return !debugProcess.suspendManager.pausedContexts.isEmpty()
}
}
@@ -4,6 +4,7 @@ package com.intellij.debugger.engine;
import com.intellij.debugger.JavaDebuggerBundle;
import com.intellij.debugger.actions.JvmDropFrameActionHandler;
import com.intellij.debugger.actions.JvmSmartStepIntoActionHandler;
import com.intellij.debugger.actions.ResumeAllJavaThreadsActionHandler;
import com.intellij.debugger.engine.dfaassist.DfaAssist;
import com.intellij.debugger.engine.evaluation.EvaluationContext;
import com.intellij.debugger.engine.events.DebuggerCommandImpl;
@@ -51,8 +52,10 @@ import com.intellij.xdebugger.frame.XDropFrameHandler;
import com.intellij.xdebugger.frame.XStackFrame;
import com.intellij.xdebugger.frame.XSuspendContext;
import com.intellij.xdebugger.frame.XValueMarkerProvider;
import com.intellij.xdebugger.impl.ThreadsActionsProvider;
import com.intellij.xdebugger.impl.XDebugSessionImpl;
import com.intellij.xdebugger.impl.XDebuggerUtilImpl;
import com.intellij.xdebugger.impl.actions.DebuggerActionHandler;
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
import com.intellij.xdebugger.memory.component.InstancesTracker;
import com.intellij.xdebugger.memory.component.MemoryViewManager;
@@ -84,7 +87,7 @@ public class JavaDebugProcess extends XDebugProcess {
};
public static JavaDebugProcess create(final @NotNull XDebugSession session, final @NotNull DebuggerSession javaSession) {
JavaDebugProcess res = new JavaDebugProcess(session, javaSession);
JavaDebugProcess res = new JavaDebugProcessWithThreadsActions(session, javaSession);
javaSession.getProcess().setXDebugProcess(res);
return res;
}
@@ -545,4 +548,18 @@ public class JavaDebugProcess extends XDebugProcess {
public @Nullable XDropFrameHandler getDropFrameHandler() {
return myDropFrameActionActionHandler;
}
private static final class JavaDebugProcessWithThreadsActions extends JavaDebugProcess implements ThreadsActionsProvider {
private JavaDebugProcessWithThreadsActions(@NotNull XDebugSession session, @NotNull DebuggerSession javaSession) {
super(session, javaSession);
myResumeAllJavaThreadsActionHandler = new ResumeAllJavaThreadsActionHandler(getDebuggerSession().getProcess());
}
private final ResumeAllJavaThreadsActionHandler myResumeAllJavaThreadsActionHandler;
@Override
public @Nullable DebuggerActionHandler getThawAllThreadsHandler() {
return myResumeAllJavaThreadsActionHandler;
}
}
}