i18n: Add bundle for JVM debugger (coroutine)
This commit is contained in:
committed by
Dmitry Gridin
parent
e0d5607fcd
commit
7f80fb8b98
@@ -242,13 +242,6 @@ kotlin.compiler.js.option.output.postfix.browse.title=Choose file to append to g
|
||||
kotlin.compiler.js.option.output.copy.files=&Copy library runtime files
|
||||
kotlin.compiler.js.option.output.copy.dir=O&utput directory for library &runtime files:
|
||||
|
||||
# Coroutine Debugger
|
||||
debugger.session.tab.coroutine.title=Coroutines
|
||||
debugger.session.tab.coroutine.message.failure=Failed to retrieve coroutine status
|
||||
debugger.session.tab.coroutine.message.resume=Application resumed
|
||||
debugger.session.tab.coroutine.message.error=Coroutine dump failed, see log
|
||||
debugger.session.tab.xcoroutine.title=Coroutines
|
||||
|
||||
# Android Lint
|
||||
android.klint.inspections.group.name=Android Lint for Kotlin
|
||||
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
coroutine.dump.panel.title=Coroutine dump
|
||||
coroutine.dump.filter.field=Filter:
|
||||
|
||||
coroutine.dump.filter.action=Filter
|
||||
coroutine.dump.filter.description=Show only coroutines containing a specific string
|
||||
|
||||
coroutine.dump.merge.action=Merge Identical Stacktrace
|
||||
coroutine.dump.merge.description=Group coroutines with identical stacktrace
|
||||
|
||||
coroutine.dump.copy.action=Copy to Clipboard
|
||||
coroutine.dump.copy.description=Copy whole coroutine dump to clipboard
|
||||
coroutine.dump.failed=Coroutine dump failed, see the log
|
||||
coroutine.dump.copy.analyze=Analyze coroutine dump
|
||||
|
||||
coroutine.dump.full.title=Full coroutine dump
|
||||
coroutine.dump.full.copied=Full coroutine dump was successfully copied to clipboard
|
||||
|
||||
coroutine.dump.creation.trace=Coroutine creation stack trace
|
||||
coroutine.dump.creation.frame=Creation stack frame of {0}
|
||||
|
||||
coroutine.dump.threads.loading=Loading…
|
||||
|
||||
coroutine.view.title=Coroutines
|
||||
coroutine.view.default.group=Default group
|
||||
coroutine.view.fetching.error=An error occurred on fetching information
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.debugger.coroutine
|
||||
|
||||
import com.intellij.CommonBundle
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.annotations.PropertyKey
|
||||
import org.jetbrains.kotlin.idea.core.util.KotlinBundleBase
|
||||
import java.util.*
|
||||
|
||||
object KotlinDebuggerCoroutinesBundle : KotlinBundleBase() {
|
||||
@NonNls
|
||||
private const val BUNDLE = "org.jetbrains.kotlin.idea.debugger.coroutine.KotlinDebuggerCoroutinesBundle"
|
||||
|
||||
override fun createBundle(): ResourceBundle = ResourceBundle.getBundle(BUNDLE)
|
||||
|
||||
@JvmStatic
|
||||
fun message(@NonNls @PropertyKey(resourceBundle = BUNDLE) key: String, vararg params: Any?): String {
|
||||
return CommonBundle.message(bundle, key, *params)
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -15,7 +15,7 @@ class VersionedImplementationProvider {
|
||||
if (value != null) {
|
||||
label.text = value
|
||||
} else if (index >= 0) {
|
||||
label.text = "Loading..."
|
||||
label.text = KotlinDebuggerCoroutinesBundle.message("coroutine.dump.threads.loading")
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -15,7 +15,7 @@ class VersionedImplementationProvider {
|
||||
if (value != null) {
|
||||
label.text = value
|
||||
} else if (index >= 0) {
|
||||
label.text = "Loading..."
|
||||
label.text = KotlinDebuggerCoroutinesBundle.message("coroutine.dump.threads.loading")
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -23,7 +23,7 @@ import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.util.text.DateFormatUtil
|
||||
import com.intellij.xdebugger.impl.XDebuggerManagerImpl
|
||||
import org.jetbrains.kotlin.idea.KotlinBundle
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.KotlinDebuggerCoroutinesBundle
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.view.CoroutineDumpPanel
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.coroutineDebuggerEnabled
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.data.CoroutineInfoData
|
||||
@@ -43,7 +43,7 @@ class CoroutineDumpAction : AnAction(), AnAction.TransparentUpdate {
|
||||
val states = CoroutineDebugProbesProxy(context.suspendContext ?: return)
|
||||
.dumpCoroutines()
|
||||
if (states.isOk()) {
|
||||
val message = KotlinBundle.message("debugger.session.tab.coroutine.message.error")
|
||||
val message = KotlinDebuggerCoroutinesBundle.message("coroutine.dump.failed")
|
||||
XDebuggerManagerImpl.NOTIFICATION_GROUP.createNotification(message,MessageType.ERROR).notify(project)
|
||||
} else {
|
||||
val f = fun() {
|
||||
@@ -72,7 +72,7 @@ class CoroutineDumpAction : AnAction(), AnAction.TransparentUpdate {
|
||||
val content = ui.createContent(id, panel, id, null, null).apply {
|
||||
putUserData(RunnerContentUi.LIGHTWEIGHT_CONTENT_MARKER, true)
|
||||
isCloseable = true
|
||||
description = "Coroutine Dump"
|
||||
description = KotlinDebuggerCoroutinesBundle.message("coroutine.dump.panel.title")
|
||||
}
|
||||
ui.addContent(content)
|
||||
ui.selectAndFocus(content, true, true)
|
||||
|
||||
+2
-1
@@ -17,6 +17,7 @@ import com.intellij.debugger.ui.impl.watch.StackFrameDescriptorImpl
|
||||
import com.intellij.debugger.ui.tree.render.DescriptorLabelListener
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.sun.jdi.ObjectReference
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.KotlinDebuggerCoroutinesBundle
|
||||
import javax.swing.Icon
|
||||
|
||||
@Deprecated("moved to XCoroutineView")
|
||||
@@ -49,7 +50,7 @@ class CoroutineDescriptorImpl(val infoData: CoroutineInfoData) : NodeDescriptorI
|
||||
|
||||
@Deprecated("moved to XCoroutineView")
|
||||
class CreationFramesDescriptor(val frames: List<StackTraceElement>) :
|
||||
MessageDescriptor("Coroutine creation stack trace", INFORMATION) {
|
||||
MessageDescriptor(KotlinDebuggerCoroutinesBundle.message("coroutine.dump.creation.trace"), INFORMATION) {
|
||||
|
||||
override fun isExpandable() = true
|
||||
}
|
||||
|
||||
+17
-9
@@ -32,6 +32,7 @@ import com.intellij.ui.components.JBList
|
||||
import com.intellij.unscramble.AnalyzeStacktraceUtil
|
||||
import com.intellij.util.PlatformIcons
|
||||
import com.intellij.util.ui.EmptyIcon
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.KotlinDebuggerCoroutinesBundle
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.data.CoroutineInfoData
|
||||
import java.awt.BorderLayout
|
||||
import java.awt.Color
|
||||
@@ -61,7 +62,7 @@ class CoroutineDumpPanel(project: Project, consoleView: ConsoleView, toolbarActi
|
||||
})
|
||||
|
||||
filterPanel.apply {
|
||||
add(JLabel("Filter:"), BorderLayout.WEST)
|
||||
add(JLabel(KotlinDebuggerCoroutinesBundle.message("coroutine.dump.filter.field")), BorderLayout.WEST)
|
||||
add(filterField)
|
||||
isVisible = false
|
||||
}
|
||||
@@ -215,8 +216,8 @@ class CoroutineDumpPanel(project: Project, consoleView: ConsoleView, toolbarActi
|
||||
}
|
||||
|
||||
private inner class FilterAction : ToggleAction(
|
||||
"Filter",
|
||||
"Show only coroutines containing a specific string",
|
||||
KotlinDebuggerCoroutinesBundle.message("coroutine.dump.filter.action"),
|
||||
KotlinDebuggerCoroutinesBundle.message("coroutine.dump.filter.description"),
|
||||
AllIcons.General.Filter
|
||||
), DumbAware {
|
||||
|
||||
@@ -235,8 +236,8 @@ class CoroutineDumpPanel(project: Project, consoleView: ConsoleView, toolbarActi
|
||||
}
|
||||
|
||||
private inner class MergeStackTracesAction : ToggleAction(
|
||||
"Merge Identical Stacktrace",
|
||||
"Group coroutines with identical stacktrace",
|
||||
KotlinDebuggerCoroutinesBundle.message("coroutine.dump.merge.action"),
|
||||
KotlinDebuggerCoroutinesBundle.message("coroutine.dump.merge.description"),
|
||||
AllIcons.Actions.Collapseall
|
||||
), DumbAware {
|
||||
|
||||
@@ -251,23 +252,30 @@ class CoroutineDumpPanel(project: Project, consoleView: ConsoleView, toolbarActi
|
||||
}
|
||||
|
||||
private class CopyToClipboardAction(private val myCoroutinesDump: List<CoroutineInfoData>, private val myProject: Project) :
|
||||
DumbAwareAction("Copy to Clipboard", "Copy whole coroutine dump to clipboard", PlatformIcons.COPY_ICON) {
|
||||
DumbAwareAction(
|
||||
KotlinDebuggerCoroutinesBundle.message("coroutine.dump.copy.action"),
|
||||
KotlinDebuggerCoroutinesBundle.message("coroutine.dump.copy.description"),
|
||||
PlatformIcons.COPY_ICON
|
||||
) {
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
val buf = StringBuilder()
|
||||
buf.append("Full coroutine dump").append("\n\n")
|
||||
buf.append(KotlinDebuggerCoroutinesBundle.message("coroutine.dump.full.title")).append("\n\n")
|
||||
for (state in myCoroutinesDump) {
|
||||
buf.append(state.stringStackTrace).append("\n\n")
|
||||
}
|
||||
CopyPasteManager.getInstance().setContents(StringSelection(buf.toString()))
|
||||
|
||||
group.createNotification(
|
||||
"Full coroutine dump was successfully copied to clipboard",
|
||||
KotlinDebuggerCoroutinesBundle.message("coroutine.dump.full.copied"),
|
||||
MessageType.INFO
|
||||
).notify(myProject)
|
||||
}
|
||||
|
||||
private val group = NotificationGroup.toolWindowGroup("Analyze coroutine dump", ToolWindowId.RUN, false)
|
||||
private val group = NotificationGroup.toolWindowGroup(
|
||||
KotlinDebuggerCoroutinesBundle.message("coroutine.dump.copy.analyze"),
|
||||
ToolWindowId.RUN, false
|
||||
)
|
||||
}
|
||||
|
||||
private class MyToFileExporter(
|
||||
|
||||
+5
-1
@@ -24,6 +24,7 @@ import com.intellij.xdebugger.impl.ui.XDebuggerUIConstants
|
||||
import com.intellij.xdebugger.ui.DebuggerColors
|
||||
import com.sun.jdi.Location
|
||||
import com.sun.jdi.ReferenceType
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.KotlinDebuggerCoroutinesBundle
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.data.CoroutineInfoData
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.util.logger
|
||||
import java.awt.Color
|
||||
@@ -177,7 +178,10 @@ class SimpleColoredTextIconPresentationRenderer {
|
||||
}
|
||||
|
||||
fun renderCreationNode(infoData: CoroutineInfoData) =
|
||||
SimpleColoredTextIcon(AllIcons.Debugger.ThreadSuspended, true, "Creation stack frame of ${infoData.name}")
|
||||
SimpleColoredTextIcon(
|
||||
AllIcons.Debugger.ThreadSuspended, true,
|
||||
KotlinDebuggerCoroutinesBundle.message("coroutine.dump.creation.frame", infoData.name)
|
||||
)
|
||||
|
||||
fun renderErrorNode(error: String) =
|
||||
SimpleColoredTextIcon(AllIcons.Actions.Lightning,false, error)
|
||||
|
||||
+8
-4
@@ -40,9 +40,9 @@ import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreeState
|
||||
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueContainerNode
|
||||
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl
|
||||
import com.sun.jdi.request.EventRequest
|
||||
import org.jetbrains.kotlin.idea.KotlinBundle
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.CoroutineDebuggerContentInfo
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.CoroutineDebuggerContentInfo.Companion.XCOROUTINE_POPUP_ACTION_GROUP
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.KotlinDebuggerCoroutinesBundle
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.VersionedImplementationProvider
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.data.*
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.proxy.ApplicationThreadExecutor
|
||||
@@ -150,7 +150,7 @@ class XCoroutineView(val project: Project, val session: XDebugSession) :
|
||||
CreateContentParams(
|
||||
CoroutineDebuggerContentInfo.XCOROUTINE_THREADS_CONTENT,
|
||||
mainPanel,
|
||||
KotlinBundle.message("debugger.session.tab.xcoroutine.title"),
|
||||
KotlinDebuggerCoroutinesBundle.message("coroutine.view.title"),
|
||||
null,
|
||||
panel.tree
|
||||
)
|
||||
@@ -158,7 +158,10 @@ class XCoroutineView(val project: Project, val session: XDebugSession) :
|
||||
inner class EmptyNode : XValueContainerNode<XValueContainer>(panel.tree, null, true, object : XValueContainer() {})
|
||||
|
||||
inner class XCoroutinesRootNode(suspendContext: XSuspendContext) :
|
||||
XValueContainerNode<CoroutineGroupContainer>(panel.tree, null, false, CoroutineGroupContainer(suspendContext, "Default group"))
|
||||
XValueContainerNode<CoroutineGroupContainer>(
|
||||
panel.tree, null, false,
|
||||
CoroutineGroupContainer(suspendContext, KotlinDebuggerCoroutinesBundle.message("coroutine.view.default.group"))
|
||||
)
|
||||
|
||||
inner class CoroutineGroupContainer(val suspendContext: XSuspendContext, val groupName: String) : XValueContainer() {
|
||||
override fun computeChildren(node: XCompositeNode) {
|
||||
@@ -191,7 +194,8 @@ class XCoroutineView(val project: Project, val session: XDebugSession) :
|
||||
}
|
||||
node.addChildren(children, true)
|
||||
} else {
|
||||
node.addChildren(XValueChildrenList.singleton(ErrorNode("Error occurs while fetching information")), true)
|
||||
val errorNode = ErrorNode(KotlinDebuggerCoroutinesBundle.message("coroutine.view.fetching.error"))
|
||||
node.addChildren(XValueChildrenList.singleton(errorNode), true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user