mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
IJPL-164393 Add freeze analyzer to "Analyze Stacktrace or Thread Dump" action
GitOrigin-RevId: e0bd6d31aa0ced49d6b1b6636df1f833118fd5f2
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6196189888
commit
65d349c8f2
@@ -8,5 +8,7 @@
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<fileEditorProvider id="java-stacktrace-editor"
|
||||
implementation="org.jetbrains.idea.devkit.stacktrace.editor.StackTraceEditorProvider"/>
|
||||
<analyzeStacktraceRunContentProvider id="freeze-run-content"
|
||||
implementation="org.jetbrains.idea.devkit.stacktrace.FreezeTabContentProvider"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.idea.devkit.stacktrace
|
||||
|
||||
import com.intellij.execution.ui.RunContentDescriptor
|
||||
import com.intellij.openapi.application.EDT
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.platform.diagnostic.freezeAnalyzer.FreezeAnalyzer
|
||||
import com.intellij.platform.ide.progress.runWithModalProgressBlocking
|
||||
import com.intellij.platform.ide.progress.withBackgroundProgress
|
||||
import com.intellij.unscramble.StacktraceTabContentProvider
|
||||
import com.intellij.unscramble.AnalyzeStacktraceUtil
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.jetbrains.idea.devkit.DevKitIcons
|
||||
|
||||
object FreezeDescriptor {
|
||||
suspend fun getFreezeRunDescriptor(text: String, project: Project): RunContentDescriptor? = withContext(Dispatchers.Default) {
|
||||
withBackgroundProgress(project, DevKitStackTraceBundle.message("progress.title.freeze.analysis")) {
|
||||
FreezeAnalyzer.analyzeFreeze(text)?.let { result ->
|
||||
withContext(Dispatchers.EDT) {
|
||||
AnalyzeStacktraceUtil.addConsole(
|
||||
project, null,
|
||||
DevKitStackTraceBundle.message("tab.title.freeze.analyzer"),
|
||||
"${result.message}\n${result.additionalMessage ?: ""}\n======= Stack Trace: ========= \n${result.threads.joinToString { it -> it.stackTrace }}",
|
||||
DevKitIcons.Freeze, false
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class FreezeTabContentProvider : StacktraceTabContentProvider {
|
||||
override fun createRunTabDescriptor(project: Project, text: String): RunContentDescriptor? {
|
||||
return runWithModalProgressBlocking(project, DevKitStackTraceBundle.message("progress.title.freeze.analysis")) {
|
||||
FreezeDescriptor.getFreezeRunDescriptor(text, project)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
package org.jetbrains.idea.devkit.stacktrace.editor
|
||||
|
||||
import com.intellij.execution.ui.RunContentDescriptor
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.openapi.application.EDT
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.editor.event.DocumentEvent
|
||||
@@ -15,14 +14,12 @@ import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.openapi.util.UserDataHolderBase
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.openapi.wm.ToolWindow
|
||||
import com.intellij.platform.diagnostic.freezeAnalyzer.FreezeAnalyzer
|
||||
import com.intellij.platform.ide.progress.withBackgroundProgress
|
||||
import com.intellij.threadDumpParser.ThreadDumpParser.parse
|
||||
import com.intellij.ui.content.Content
|
||||
import com.intellij.ui.content.ContentFactory.getInstance
|
||||
import com.intellij.ui.content.ContentManager
|
||||
import com.intellij.ui.content.TabbedPaneContentUI
|
||||
import com.intellij.unscramble.AnalyzeStacktraceUtil
|
||||
import com.intellij.unscramble.UnscrambleUtils.addConsole
|
||||
import com.intellij.util.concurrency.annotations.RequiresEdt
|
||||
import kotlinx.coroutines.*
|
||||
@@ -32,6 +29,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.debounce
|
||||
import org.jetbrains.idea.devkit.stacktrace.DevKitStackTraceBundle
|
||||
import org.jetbrains.idea.devkit.stacktrace.FreezeDescriptor
|
||||
import org.jetbrains.idea.devkit.stacktrace.util.StackTracePluginScope
|
||||
import java.awt.BorderLayout
|
||||
import java.beans.PropertyChangeListener
|
||||
@@ -121,17 +119,7 @@ class StackTraceFileEditor(private val project: Project, private val file: Virtu
|
||||
}
|
||||
|
||||
private suspend fun addFreezeAnalysisContent(contentManager: ContentManager) {
|
||||
withContext(Dispatchers.Default) {
|
||||
withBackgroundProgress(project, DevKitStackTraceBundle.message("progress.title.freeze.analysis")) {
|
||||
FreezeAnalyzer.analyzeFreeze(document.text)
|
||||
}
|
||||
}?.let { result ->
|
||||
val freezeDescriptor = AnalyzeStacktraceUtil.addConsole(
|
||||
project, null,
|
||||
DevKitStackTraceBundle.message("tab.title.freeze.analyzer"),
|
||||
"${result.message}\n${result.additionalMessage ?: ""}\n======= Stack Trace: ========= \n${result.threads.joinToString { it -> it.stackTrace }}",
|
||||
AllIcons.Debugger.Freeze, false
|
||||
)
|
||||
FreezeDescriptor.getFreezeRunDescriptor(document.text, project)?.let { freezeDescriptor ->
|
||||
contentManager.addContent(createNewContent(freezeDescriptor).apply {
|
||||
executionId = freezeDescriptor.executionId
|
||||
component = freezeDescriptor.component
|
||||
|
||||
Reference in New Issue
Block a user