From f6cc686095fa73bafbda5346785c7c9110a5d599 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 14 Dec 2018 22:41:15 +0900 Subject: [PATCH] Minor: Extract a const for continuation variable name --- .../codegen/coroutines/CoroutineTransformerMethodVisitor.kt | 2 +- .../kotlin/codegen/coroutines/coroutineCodegenUtil.kt | 2 ++ .../idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt | 3 ++- .../jetbrains/kotlin/idea/debugger/evaluate/VariableFinder.kt | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt index d15fa4d8814..6f9c3087590 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt @@ -322,7 +322,7 @@ class CoroutineTransformerMethodVisitor( methodNode.instructions.insert(methodNode.instructions.last, endLabel) methodNode.localVariables.add( LocalVariableNode( - "\$continuation", + CONTINUATION_VARIABLE_NAME, languageVersionSettings.continuationAsmType().descriptor, null, startLabel, diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt index 0e8f426c24d..fc6c4f36926 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt @@ -124,6 +124,8 @@ val INITIAL_SUSPEND_DESCRIPTOR_FOR_DO_RESUME = object : CallableDescriptor.UserD val CONTINUATION_PARAMETER_NAME = Name.identifier("continuation") +const val CONTINUATION_VARIABLE_NAME = "\$continuation" + // Resolved calls to suspension function contain descriptors as they visible within coroutines: // E.g. `fun await(f: CompletableFuture): V` instead of `fun await(f: CompletableFuture, machine: Continuation): Unit` // See `createJvmSuspendFunctionView` and it's usages for clarification diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt index a52fa401a81..2a922155dc5 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt @@ -18,6 +18,7 @@ import com.intellij.debugger.memory.utils.StackFrameItem import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl import com.intellij.xdebugger.frame.XNamedValue import com.sun.jdi.* +import org.jetbrains.kotlin.codegen.coroutines.CONTINUATION_VARIABLE_NAME import org.jetbrains.kotlin.idea.debugger.evaluate.LOG import org.jetbrains.kotlin.idea.debugger.evaluate.VariableFinder.Companion.SUSPEND_LAMBDA_CLASSES import org.jetbrains.kotlin.idea.debugger.evaluate.getInvokePolicy @@ -91,7 +92,7 @@ class KotlinCoroutinesAsyncStackTraceProvider : AsyncStackTraceProvider { return null } - val continuationVariable = frameProxy.safeVisibleVariableByName("\$continuation") ?: return null + val continuationVariable = frameProxy.safeVisibleVariableByName(CONTINUATION_VARIABLE_NAME) ?: return null val continuation = frameProxy.getValue(continuationVariable) as? ObjectReference ?: return null return collectFrames(continuation) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/VariableFinder.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/VariableFinder.kt index ebbff964315..18b1f4efee5 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/VariableFinder.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/VariableFinder.kt @@ -293,7 +293,7 @@ class VariableFinder private constructor(private val context: EvaluationContextI return null } - val continuationVariable = frameProxy.safeVisibleVariableByName("\$continuation") ?: return null + val continuationVariable = frameProxy.safeVisibleVariableByName(CONTINUATION_VARIABLE_NAME) ?: return null val continuation = frameProxy.getValue(continuationVariable) as? ObjectReference ?: return null return findCoroutineContextForContinuation(continuation) }