From 276cf36d6b1af4c79dd8936ad855f5094afbabab Mon Sep 17 00:00:00 2001 From: Vladimir Ilmov Date: Sun, 19 Apr 2020 11:41:42 +0200 Subject: [PATCH] (CoroutineDebugger) Fixed CombinedContext information, default group renamed to empty dispatcher --- .../messages/KotlinDebuggerCoroutinesBundle.properties | 2 +- .../kotlin/idea/debugger/coroutine/data/CoroutineInfoData.kt | 4 ++++ .../coroutine/proxy/mirror/coroutinesContextMirror.kt | 5 +++-- .../idea/debugger/coroutine/view/SimpleColoredTextIcon.kt | 2 +- .../kotlin/idea/debugger/coroutine/view/XCoroutineView.kt | 4 ++-- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/idea/jvm-debugger/jvm-debugger-coroutine/resources/messages/KotlinDebuggerCoroutinesBundle.properties b/idea/jvm-debugger/jvm-debugger-coroutine/resources/messages/KotlinDebuggerCoroutinesBundle.properties index ad2036146e3..ab9b160a381 100644 --- a/idea/jvm-debugger/jvm-debugger-coroutine/resources/messages/KotlinDebuggerCoroutinesBundle.properties +++ b/idea/jvm-debugger/jvm-debugger-coroutine/resources/messages/KotlinDebuggerCoroutinesBundle.properties @@ -19,7 +19,7 @@ coroutine.dump.creation.trace=Coroutine creation stack trace coroutine.dump.threads.loading=Loading… coroutine.view.title=Coroutines -coroutine.view.default.group=Default group +coroutine.view.dispatcher.empty=Empty dispatcher coroutine.view.fetching.error=An error occurred on fetching information coroutine.view.fetching.not_found=No coroutine information found to.enable.information.breakpoint.suspend.policy.should.be.set.to.all.threads=To enable information breakpoint suspend policy should be set to 'All' threads. diff --git a/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/data/CoroutineInfoData.kt b/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/data/CoroutineInfoData.kt index cd8baabae1c..8cc21cddb8d 100644 --- a/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/data/CoroutineInfoData.kt +++ b/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/data/CoroutineInfoData.kt @@ -49,6 +49,10 @@ data class CoroutineInfoData( } data class CoroutineNameIdState(val name: String, val id: String, val state: State, val dispatcher: String?) { + + fun formatName() = + "$name:$id" + companion object { fun instance(mirror: MirrorOfCoroutineInfo): CoroutineNameIdState = CoroutineNameIdState( diff --git a/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/proxy/mirror/coroutinesContextMirror.kt b/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/proxy/mirror/coroutinesContextMirror.kt index 2294fe748d5..85957464da6 100644 --- a/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/proxy/mirror/coroutinesContextMirror.kt +++ b/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/proxy/mirror/coroutinesContextMirror.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.idea.debugger.evaluate.DefaultExecutionContext import java.lang.StackTraceElement class CoroutineContext(context: DefaultExecutionContext) : - BaseMirror("kotlin.coroutines.CoroutineContext", context) { + BaseMirror("kotlin.coroutines.CombinedContext", context) { val coroutineNameRef = CoroutineName(context) val coroutineIdRef = CoroutineId(context) val jobRef = Job(context) @@ -27,7 +27,8 @@ class CoroutineContext(context: DefaultExecutionContext) : } fun getElementValue(value: ObjectReference, context: DefaultExecutionContext, keyProvider: ContextKey): T? { - val elementValue = objectValue(value, getContextElement, context, keyProvider.key() ?: return null) ?: return null + val key = keyProvider.key() ?: return null + val elementValue = objectValue(value, getContextElement, context, key) ?: return null return keyProvider.mirror(elementValue, context) } } diff --git a/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/SimpleColoredTextIcon.kt b/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/SimpleColoredTextIcon.kt index 13d7653a49b..64e7fd3cffb 100644 --- a/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/SimpleColoredTextIcon.kt +++ b/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/SimpleColoredTextIcon.kt @@ -117,7 +117,7 @@ class SimpleColoredTextIconPresentationRenderer { val hasChildren = infoData.stackTrace.isNotEmpty() || infoData.creationStackTrace.isNotEmpty() val label = SimpleColoredTextIcon(icon, hasChildren) label.append("\"") - label.appendValue(infoData.key.name) + label.appendValue(infoData.key.formatName()) label.append("\": ${infoData.key.state}") if (name.isNotEmpty()) { label.append(" on thread \"") diff --git a/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/XCoroutineView.kt b/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/XCoroutineView.kt index a405e3e647f..cf8c57ac482 100644 --- a/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/XCoroutineView.kt +++ b/idea/jvm-debugger/jvm-debugger-coroutine/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/XCoroutineView.kt @@ -154,13 +154,13 @@ class XCoroutineView(val project: Project, val session: XDebugSession) : managerThreadExecutor.on(suspendContext).schedule { val debugProbesProxy = CoroutineDebugProbesProxy(suspendContext) - val defaultGroupName = KotlinDebuggerCoroutinesBundle.message("coroutine.view.default.group") + val emptyDispatcherName = KotlinDebuggerCoroutinesBundle.message("coroutine.view.dispatcher.empty") var coroutineCache = debugProbesProxy.dumpCoroutines() if (coroutineCache.isOk()) { val children = XValueChildrenList() var groups = coroutineCache.cache.groupBy { it.key.dispatcher } for (dispatcher in groups.keys) { - children.add(CoroutineContainer(suspendContext, dispatcher ?: defaultGroupName, groups[dispatcher])) + children.add(CoroutineContainer(suspendContext, dispatcher ?: emptyDispatcherName, groups[dispatcher])) } if (children.size() > 0) node.addChildren(children, true)