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 7a51c39d6dd1..92d79c53221b 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
@@ -67,6 +67,10 @@ internal class BackendJavaDebuggerSessionApi : JavaDebuggerSessionApi {
invokeThreadCommand(executionStackId, ThreadCommand.RESUME)
}
+ override suspend fun freezeThread(executionStackId: XExecutionStackId) {
+ invokeThreadCommand(executionStackId, ThreadCommand.FREEZE)
+ }
+
private fun invokeThreadCommand(executionStackId: XExecutionStackId, command: ThreadCommand) {
val executionStackModel = executionStackId.findValue() ?: return
val xSession = executionStackModel.session
@@ -83,8 +87,12 @@ internal class BackendJavaDebuggerSessionApi : JavaDebuggerSessionApi {
ThreadCommand.RESUME -> {
ResumeThreadAction.resumeThread(threadProxy, debugProcess, managerThread)
}
+ ThreadCommand.FREEZE -> {
+ FreezeThreadAction.freezeThread(threadProxy, debugProcess, managerThread)
+ }
}
}
+
companion object {
private enum class ThreadCommand { FREEZE, RESUME }
}
diff --git a/java/debugger/openapi/resources/messages/JavaDebuggerBundle.properties b/java/debugger/openapi/resources/messages/JavaDebuggerBundle.properties
index 975f87d91cc6..e22959e6e754 100644
--- a/java/debugger/openapi/resources/messages/JavaDebuggerBundle.properties
+++ b/java/debugger/openapi/resources/messages/JavaDebuggerBundle.properties
@@ -37,7 +37,8 @@ button.drop.anyway=Do Not Execute
button.execute.finally=Execute Finally Blocks
drop.frame.error.no.information=Information about the frame is not available
progress.evaluating=Evaluating {0}
-action.resume.thread.text.resume=Resume
+action.resume.thread.text=Resume
+action.freeze.thread.text=Freeze
action.interrupt.thread.text=Interrupt
title.set.value=Set Value
warning.recalculate=The value will be recalculated
diff --git a/java/debugger/shared/resources/intellij.java.debugger.impl.shared.xml b/java/debugger/shared/resources/intellij.java.debugger.impl.shared.xml
index 9f252ab52d42..f754e3fc1f0a 100644
--- a/java/debugger/shared/resources/intellij.java.debugger.impl.shared.xml
+++ b/java/debugger/shared/resources/intellij.java.debugger.impl.shared.xml
@@ -25,6 +25,9 @@
+
+
+ >
+ JavaDebuggerSessionApi.getInstance().freezeThread(xExecutionStackId)
+ }
+ sessionProxy.rebuildViews()
+ }
+
+ }
+
+ override fun update(e: AnActionEvent) {
+ val selectedNodes = getSelectedNodes(e.dataContext)
+ e.presentation.apply {
+ isEnabledAndVisible = false
+ if (DebuggerUIUtil.getSessionProxy(e) == null) {
+ return
+ }
+ if (selectedNodes.isNotEmpty() && selectedNodes.all { it.isNotSuspendedJavaThread() }) {
+ text = JavaDebuggerSharedBundle.message("action.freeze.thread.text")
+ isEnabledAndVisible = true
+ }
+ }
+ }
+
+ override fun getActionUpdateThread(): ActionUpdateThread {
+ return ActionUpdateThread.EDT
+ }
+}
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 7e3093150f0b..0e92f04385be 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
@@ -28,6 +28,8 @@ interface JavaDebuggerSessionApi : RemoteApi {
suspend fun resumeThread(executionStackId: XExecutionStackId)
+ suspend fun freezeThread(executionStackId: XExecutionStackId)
+
companion object {
@JvmStatic
suspend fun getInstance(): JavaDebuggerSessionApi {
diff --git a/platform/platform-resources/src/idea/XDebuggerActions.xml b/platform/platform-resources/src/idea/XDebuggerActions.xml
index 1b91b2c3d015..478c080c29db 100644
--- a/platform/platform-resources/src/idea/XDebuggerActions.xml
+++ b/platform/platform-resources/src/idea/XDebuggerActions.xml
@@ -3,6 +3,9 @@
+
+
@@ -195,9 +199,9 @@