Debugger: Hide synthetic '$completion' variable in Kotlin variables mode

This commit is contained in:
Yan Zhulanow
2019-04-26 22:51:41 +03:00
parent bfb1d53ddf
commit b48e0a89c5
4 changed files with 6 additions and 10 deletions
@@ -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 {
@@ -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;
@@ -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
@@ -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