(CoroutineDebugger) Fixed CombinedContext information, default group renamed to empty dispatcher
This commit is contained in:
+1
-1
@@ -19,7 +19,7 @@ coroutine.dump.creation.trace=Coroutine creation stack trace
|
|||||||
coroutine.dump.threads.loading=Loading…
|
coroutine.dump.threads.loading=Loading…
|
||||||
|
|
||||||
coroutine.view.title=Coroutines
|
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.error=An error occurred on fetching information
|
||||||
coroutine.view.fetching.not_found=No coroutine information found
|
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.
|
to.enable.information.breakpoint.suspend.policy.should.be.set.to.all.threads=To enable information breakpoint suspend policy should be set to 'All' threads.
|
||||||
|
|||||||
+4
@@ -49,6 +49,10 @@ data class CoroutineInfoData(
|
|||||||
}
|
}
|
||||||
|
|
||||||
data class CoroutineNameIdState(val name: String, val id: String, val state: State, val dispatcher: String?) {
|
data class CoroutineNameIdState(val name: String, val id: String, val state: State, val dispatcher: String?) {
|
||||||
|
|
||||||
|
fun formatName() =
|
||||||
|
"$name:$id"
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun instance(mirror: MirrorOfCoroutineInfo): CoroutineNameIdState =
|
fun instance(mirror: MirrorOfCoroutineInfo): CoroutineNameIdState =
|
||||||
CoroutineNameIdState(
|
CoroutineNameIdState(
|
||||||
|
|||||||
+3
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.idea.debugger.evaluate.DefaultExecutionContext
|
|||||||
import java.lang.StackTraceElement
|
import java.lang.StackTraceElement
|
||||||
|
|
||||||
class CoroutineContext(context: DefaultExecutionContext) :
|
class CoroutineContext(context: DefaultExecutionContext) :
|
||||||
BaseMirror<MirrorOfCoroutineContext>("kotlin.coroutines.CoroutineContext", context) {
|
BaseMirror<MirrorOfCoroutineContext>("kotlin.coroutines.CombinedContext", context) {
|
||||||
val coroutineNameRef = CoroutineName(context)
|
val coroutineNameRef = CoroutineName(context)
|
||||||
val coroutineIdRef = CoroutineId(context)
|
val coroutineIdRef = CoroutineId(context)
|
||||||
val jobRef = Job(context)
|
val jobRef = Job(context)
|
||||||
@@ -27,7 +27,8 @@ class CoroutineContext(context: DefaultExecutionContext) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T> getElementValue(value: ObjectReference, context: DefaultExecutionContext, keyProvider: ContextKey<T>): T? {
|
fun <T> getElementValue(value: ObjectReference, context: DefaultExecutionContext, keyProvider: ContextKey<T>): 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)
|
return keyProvider.mirror(elementValue, context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -117,7 +117,7 @@ class SimpleColoredTextIconPresentationRenderer {
|
|||||||
val hasChildren = infoData.stackTrace.isNotEmpty() || infoData.creationStackTrace.isNotEmpty()
|
val hasChildren = infoData.stackTrace.isNotEmpty() || infoData.creationStackTrace.isNotEmpty()
|
||||||
val label = SimpleColoredTextIcon(icon, hasChildren)
|
val label = SimpleColoredTextIcon(icon, hasChildren)
|
||||||
label.append("\"")
|
label.append("\"")
|
||||||
label.appendValue(infoData.key.name)
|
label.appendValue(infoData.key.formatName())
|
||||||
label.append("\": ${infoData.key.state}")
|
label.append("\": ${infoData.key.state}")
|
||||||
if (name.isNotEmpty()) {
|
if (name.isNotEmpty()) {
|
||||||
label.append(" on thread \"")
|
label.append(" on thread \"")
|
||||||
|
|||||||
+2
-2
@@ -154,13 +154,13 @@ class XCoroutineView(val project: Project, val session: XDebugSession) :
|
|||||||
managerThreadExecutor.on(suspendContext).schedule {
|
managerThreadExecutor.on(suspendContext).schedule {
|
||||||
val debugProbesProxy = CoroutineDebugProbesProxy(suspendContext)
|
val debugProbesProxy = CoroutineDebugProbesProxy(suspendContext)
|
||||||
|
|
||||||
val defaultGroupName = KotlinDebuggerCoroutinesBundle.message("coroutine.view.default.group")
|
val emptyDispatcherName = KotlinDebuggerCoroutinesBundle.message("coroutine.view.dispatcher.empty")
|
||||||
var coroutineCache = debugProbesProxy.dumpCoroutines()
|
var coroutineCache = debugProbesProxy.dumpCoroutines()
|
||||||
if (coroutineCache.isOk()) {
|
if (coroutineCache.isOk()) {
|
||||||
val children = XValueChildrenList()
|
val children = XValueChildrenList()
|
||||||
var groups = coroutineCache.cache.groupBy { it.key.dispatcher }
|
var groups = coroutineCache.cache.groupBy { it.key.dispatcher }
|
||||||
for (dispatcher in groups.keys) {
|
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)
|
if (children.size() > 0)
|
||||||
node.addChildren(children, true)
|
node.addChildren(children, true)
|
||||||
|
|||||||
Reference in New Issue
Block a user