mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-04 00:20:55 +07:00
[debugger] IDEA-338723 Use chosen thread to extract information about coroutine filter
Prepare to fix suspending behavior while stepping in coroutines GitOrigin-RevId: 3cddb3bf9bfb2260a0a106da6eb39be6d264b69d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e4a9ba0ae4
commit
d4f36c6437
@@ -6,6 +6,7 @@ import com.intellij.debugger.actions.AsyncStacksToggleAction
|
||||
import com.intellij.debugger.engine.DebugProcessImpl
|
||||
import com.intellij.debugger.engine.SuspendContextImpl
|
||||
import com.intellij.debugger.engine.SuspendManagerUtil
|
||||
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl
|
||||
import com.intellij.debugger.jdi.StackFrameProxyImpl
|
||||
import com.intellij.execution.ui.layout.impl.RunnerContentUi
|
||||
import com.intellij.execution.ui.layout.impl.RunnerLayoutUiImpl
|
||||
@@ -54,7 +55,8 @@ class CoroutineStackFrameInterceptor(val project: Project) : StackFrameIntercept
|
||||
}
|
||||
|
||||
override fun extractContinuationFilter(suspendContext: SuspendContextImpl): ContinuationFilter? {
|
||||
val defaultExecutionContext = suspendContext.executionContext() ?: return null
|
||||
val frameProxy = suspendContext.getStackFrameProxyImpl() ?: return null
|
||||
val defaultExecutionContext = DefaultExecutionContext(EvaluationContextImpl(suspendContext, frameProxy))
|
||||
|
||||
if (!useContinuationObjectFilter.get(suspendContext.debugProcess, false)) {
|
||||
val coroutineId = DebugProbesImpl.instance(defaultExecutionContext)?.getCurrentThreadCoroutineId(defaultExecutionContext)
|
||||
@@ -76,7 +78,7 @@ class CoroutineStackFrameInterceptor(val project: Project) : StackFrameIntercept
|
||||
suspendContext: SuspendContextImpl,
|
||||
defaultExecutionContext: DefaultExecutionContext
|
||||
): ContinuationObjectFilter? {
|
||||
val frameProxy = suspendContext.frameProxy ?: return null
|
||||
val frameProxy = suspendContext.getStackFrameProxyImpl() ?: return null
|
||||
val suspendExitMode = frameProxy.location().getSuspendExitMode()
|
||||
|
||||
val continuation = extractContinuation(suspendExitMode, frameProxy) ?: return null
|
||||
@@ -108,6 +110,9 @@ class CoroutineStackFrameInterceptor(val project: Project) : StackFrameIntercept
|
||||
}
|
||||
}
|
||||
|
||||
private fun SuspendContextImpl.getStackFrameProxyImpl(): StackFrameProxyImpl? =
|
||||
activeExecutionStack?.threadProxy?.frame(0) ?: this.frameProxy
|
||||
|
||||
private data class ContinuationIdFilter(val id: Long) : ContinuationFilter
|
||||
|
||||
// Is used when there is no debug information about unique Continuation ID (for example, for the old versions)
|
||||
|
||||
Reference in New Issue
Block a user