Debugger: Hide synthetic '$completion' variable in Kotlin variables mode
This commit is contained in:
+2
-1
@@ -45,13 +45,13 @@ import org.jetbrains.kotlin.codegen.AsmUtil
|
||||
import org.jetbrains.kotlin.codegen.AsmUtil.THIS
|
||||
import org.jetbrains.kotlin.codegen.DESTRUCTURED_LAMBDA_ARGUMENT_VARIABLE_PREFIX
|
||||
import org.jetbrains.kotlin.codegen.coroutines.CONTINUATION_VARIABLE_NAME
|
||||
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_CONTINUATION_PARAMETER
|
||||
import org.jetbrains.kotlin.codegen.inline.INLINE_FUN_VAR_SUFFIX
|
||||
import org.jetbrains.kotlin.codegen.inline.isFakeLocalVariableForInline
|
||||
import org.jetbrains.org.objectweb.asm.Type as AsmType
|
||||
import org.jetbrains.kotlin.utils.getSafe
|
||||
import java.lang.reflect.Modifier
|
||||
import java.util.*
|
||||
import kotlin.coroutines.Continuation
|
||||
|
||||
class KotlinStackFrame(frame: StackFrameProxyImpl) : JavaStackFrame(StackFrameDescriptorImpl(frame, MethodsTracker()), true) {
|
||||
private companion object {
|
||||
@@ -305,6 +305,7 @@ class KotlinStackFrame(frame: StackFrameProxyImpl) : JavaStackFrame(StackFrameDe
|
||||
|| name.startsWith(AsmUtil.LOCAL_FUNCTION_VARIABLE_PREFIX)
|
||||
|| getInlineDepth(variable.name()) != inlineDepth
|
||||
|| name == CONTINUATION_VARIABLE_NAME
|
||||
|| name == SUSPEND_FUNCTION_CONTINUATION_PARAMETER
|
||||
}
|
||||
|
||||
private fun LocalVariableProxyImpl.remapVariableNameIfNeeded(): LocalVariableProxyImpl {
|
||||
|
||||
idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/frame/coroutineContextWithoutSuspend.kt
Vendored
+3
@@ -11,5 +11,8 @@ private suspend fun foo() {
|
||||
val a = 5
|
||||
}
|
||||
|
||||
// SHOW_KOTLIN_VARIABLES
|
||||
// PRINT_FRAME
|
||||
|
||||
// EXPRESSION: coroutineContext
|
||||
// RESULT: instance of kotlin.coroutines.EmptyCoroutineContext(id=ID): Lkotlin/coroutines/EmptyCoroutineContext;
|
||||
+1
@@ -3,6 +3,7 @@ Run Java
|
||||
Connected to the target VM
|
||||
coroutineContextWithoutSuspend.kt:11
|
||||
Compile bytecode for coroutineContext
|
||||
frame = foo:11, CoroutineContextWithoutSuspendKt {coroutineContextWithoutSuspend}
|
||||
Disconnected from the target VM
|
||||
|
||||
Process finished with exit code 0
|
||||
|
||||
-9
@@ -4,15 +4,6 @@ Connected to the target VM
|
||||
suspendContinuation.kt:7
|
||||
Compile bytecode for a
|
||||
frame = main:7, SuspendContinuationKt {suspendContinuation}
|
||||
local = $completion: kotlin.coroutines.Continuation = {kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1@uniqueID}Continuation at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1 (sp = null)
|
||||
field = label: int = 1 (sp = null)
|
||||
field = $completion: kotlin.coroutines.Continuation = {kotlin.coroutines.jvm.internal.RunSuspend@uniqueID} (sp = null)
|
||||
field = result: kotlin.Result = null (sp = RunSuspend.!EXT!)
|
||||
field = $this_createCoroutineUnintercepted$inlined: kotlin.jvm.functions.Function1 = {suspendContinuation.SuspendContinuationKt$$$main@uniqueID}interface kotlin.jvm.functions.Function1 (sp = null)
|
||||
field = args: java.lang.String[] = {java.lang.String[0]@uniqueID} (sp = null)
|
||||
field = arity: int = 1 (sp = Lambda.!EXT!)
|
||||
field = completion: kotlin.coroutines.Continuation = {kotlin.coroutines.jvm.internal.RunSuspend@uniqueID} (sp = BaseContinuationImpl.!EXT!)
|
||||
field = result: kotlin.Result = null (sp = RunSuspend.!EXT!)
|
||||
local = $result: java.lang.Object = null (sp = null)
|
||||
local = a: int = 5 (sp = suspendContinuation.kt, 4)
|
||||
Disconnected from the target VM
|
||||
|
||||
Reference in New Issue
Block a user