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.AsmUtil.THIS
|
||||||
import org.jetbrains.kotlin.codegen.DESTRUCTURED_LAMBDA_ARGUMENT_VARIABLE_PREFIX
|
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.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.INLINE_FUN_VAR_SUFFIX
|
||||||
import org.jetbrains.kotlin.codegen.inline.isFakeLocalVariableForInline
|
import org.jetbrains.kotlin.codegen.inline.isFakeLocalVariableForInline
|
||||||
import org.jetbrains.org.objectweb.asm.Type as AsmType
|
import org.jetbrains.org.objectweb.asm.Type as AsmType
|
||||||
import org.jetbrains.kotlin.utils.getSafe
|
import org.jetbrains.kotlin.utils.getSafe
|
||||||
import java.lang.reflect.Modifier
|
import java.lang.reflect.Modifier
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.coroutines.Continuation
|
|
||||||
|
|
||||||
class KotlinStackFrame(frame: StackFrameProxyImpl) : JavaStackFrame(StackFrameDescriptorImpl(frame, MethodsTracker()), true) {
|
class KotlinStackFrame(frame: StackFrameProxyImpl) : JavaStackFrame(StackFrameDescriptorImpl(frame, MethodsTracker()), true) {
|
||||||
private companion object {
|
private companion object {
|
||||||
@@ -305,6 +305,7 @@ class KotlinStackFrame(frame: StackFrameProxyImpl) : JavaStackFrame(StackFrameDe
|
|||||||
|| name.startsWith(AsmUtil.LOCAL_FUNCTION_VARIABLE_PREFIX)
|
|| name.startsWith(AsmUtil.LOCAL_FUNCTION_VARIABLE_PREFIX)
|
||||||
|| getInlineDepth(variable.name()) != inlineDepth
|
|| getInlineDepth(variable.name()) != inlineDepth
|
||||||
|| name == CONTINUATION_VARIABLE_NAME
|
|| name == CONTINUATION_VARIABLE_NAME
|
||||||
|
|| name == SUSPEND_FUNCTION_CONTINUATION_PARAMETER
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun LocalVariableProxyImpl.remapVariableNameIfNeeded(): LocalVariableProxyImpl {
|
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
|
val a = 5
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SHOW_KOTLIN_VARIABLES
|
||||||
|
// PRINT_FRAME
|
||||||
|
|
||||||
// EXPRESSION: coroutineContext
|
// EXPRESSION: coroutineContext
|
||||||
// RESULT: instance of kotlin.coroutines.EmptyCoroutineContext(id=ID): Lkotlin/coroutines/EmptyCoroutineContext;
|
// RESULT: instance of kotlin.coroutines.EmptyCoroutineContext(id=ID): Lkotlin/coroutines/EmptyCoroutineContext;
|
||||||
+1
@@ -3,6 +3,7 @@ Run Java
|
|||||||
Connected to the target VM
|
Connected to the target VM
|
||||||
coroutineContextWithoutSuspend.kt:11
|
coroutineContextWithoutSuspend.kt:11
|
||||||
Compile bytecode for coroutineContext
|
Compile bytecode for coroutineContext
|
||||||
|
frame = foo:11, CoroutineContextWithoutSuspendKt {coroutineContextWithoutSuspend}
|
||||||
Disconnected from the target VM
|
Disconnected from the target VM
|
||||||
|
|
||||||
Process finished with exit code 0
|
Process finished with exit code 0
|
||||||
|
|||||||
-9
@@ -4,15 +4,6 @@ Connected to the target VM
|
|||||||
suspendContinuation.kt:7
|
suspendContinuation.kt:7
|
||||||
Compile bytecode for a
|
Compile bytecode for a
|
||||||
frame = main:7, SuspendContinuationKt {suspendContinuation}
|
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 = $result: java.lang.Object = null (sp = null)
|
||||||
local = a: int = 5 (sp = suspendContinuation.kt, 4)
|
local = a: int = 5 (sp = suspendContinuation.kt, 4)
|
||||||
Disconnected from the target VM
|
Disconnected from the target VM
|
||||||
|
|||||||
Reference in New Issue
Block a user