From 617ef4d003a28fb21978b3045dd0d491d1960813 Mon Sep 17 00:00:00 2001 From: Vladimir Parfinenko Date: Tue, 10 Dec 2024 13:20:35 +0100 Subject: [PATCH] [jvm console view] don't fold stack traces in analyze stack trace views, IDEA-364517 ^IDEA-364517 fixed GitOrigin-RevId: 8e38e31b7b8a928aa38e4bddf142dac526c223a1 --- .../com/intellij/execution/filters/StackTraceFolding.kt | 7 +++---- .../src/com/intellij/unscramble/ThreadDumpPanel.java | 3 ++- platform/execution/api-dump-unreviewed.txt | 1 + .../com/intellij/execution/ui/NoStackTraceFoldingPanel.kt | 7 +++++++ .../src/com/intellij/unscramble/AnalyzeStacktraceUtil.kt | 2 +- 5 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 platform/execution/src/com/intellij/execution/ui/NoStackTraceFoldingPanel.kt diff --git a/java/execution/impl/src/com/intellij/execution/filters/StackTraceFolding.kt b/java/execution/impl/src/com/intellij/execution/filters/StackTraceFolding.kt index 3c6499617d51..2579f7064f4b 100644 --- a/java/execution/impl/src/com/intellij/execution/filters/StackTraceFolding.kt +++ b/java/execution/impl/src/com/intellij/execution/filters/StackTraceFolding.kt @@ -4,9 +4,9 @@ package com.intellij.execution.filters import com.intellij.execution.ConsoleFolding import com.intellij.execution.ExecutionBundle import com.intellij.execution.ui.ConsoleView +import com.intellij.execution.ui.NoStackTraceFoldingPanel import com.intellij.openapi.project.Project import com.intellij.openapi.ui.getParentOfType -import com.intellij.unscramble.ThreadDumpPanel private const val STACK_TRACE_ELEMENT_PREFIX = "\tat " private const val ASYNC_STACK_TRACE_PREFIX = "\tat --- Async.Stack.Trace --- " @@ -51,6 +51,5 @@ class StackTraceFolding : ConsoleFolding() { override fun isEnabledForConsole(consoleView: ConsoleView): Boolean = super.isEnabledForConsole(consoleView) && enabled && - // We want unfolded stack traces inside ThreadDumpPanel. - consoleView.component.getParentOfType() == null -} \ No newline at end of file + consoleView.component.getParentOfType() == null +} diff --git a/java/java-impl/src/com/intellij/unscramble/ThreadDumpPanel.java b/java/java-impl/src/com/intellij/unscramble/ThreadDumpPanel.java index a2dd2276ad43..1bcc94ad6a4d 100644 --- a/java/java-impl/src/com/intellij/unscramble/ThreadDumpPanel.java +++ b/java/java-impl/src/com/intellij/unscramble/ThreadDumpPanel.java @@ -4,6 +4,7 @@ package com.intellij.unscramble; import com.intellij.CommonBundle; import com.intellij.codeInsight.highlighting.HighlightManager; import com.intellij.execution.ui.ConsoleView; +import com.intellij.execution.ui.NoStackTraceFoldingPanel; import com.intellij.icons.AllIcons; import com.intellij.ide.DataManager; import com.intellij.ide.ExporterToTextFile; @@ -52,7 +53,7 @@ import static com.intellij.icons.AllIcons.Debugger.ThreadStates.*; * @author Jeka * @author Konstantin Bulenkov */ -public final class ThreadDumpPanel extends JPanel implements UiDataProvider { +public final class ThreadDumpPanel extends JPanel implements UiDataProvider, NoStackTraceFoldingPanel { private static final Icon PAUSE_ICON_DAEMON = LayeredIcon.layeredIcon(() -> new Icon[]{AllIcons.Actions.Pause, Daemon_sign}); private static final Icon LOCKED_ICON_DAEMON = LayeredIcon.layeredIcon(() -> new Icon[]{AllIcons.Debugger.MuteBreakpoints, Daemon_sign}); private static final Icon RUNNING_ICON_DAEMON = LayeredIcon.layeredIcon(() -> new Icon[]{AllIcons.Actions.Resume, Daemon_sign}); diff --git a/platform/execution/api-dump-unreviewed.txt b/platform/execution/api-dump-unreviewed.txt index c01a39dd4179..b4a099dfd5e6 100644 --- a/platform/execution/api-dump-unreviewed.txt +++ b/platform/execution/api-dump-unreviewed.txt @@ -1767,6 +1767,7 @@ com.intellij.execution.ui.ExecutionConsoleEx - com.intellij.execution.ui.ExecutionConsole - a:buildUi(com.intellij.execution.ui.RunnerLayoutUi):V - a:getExecutionConsoleId():java.lang.String +com.intellij.execution.ui.NoStackTraceFoldingPanel com.intellij.execution.ui.ObservableConsoleView - a:addChangeListener(com.intellij.execution.ui.ObservableConsoleView$ChangeListener,com.intellij.openapi.Disposable):V com.intellij.execution.ui.ObservableConsoleView$ChangeListener diff --git a/platform/execution/src/com/intellij/execution/ui/NoStackTraceFoldingPanel.kt b/platform/execution/src/com/intellij/execution/ui/NoStackTraceFoldingPanel.kt new file mode 100644 index 000000000000..b8af7eead8af --- /dev/null +++ b/platform/execution/src/com/intellij/execution/ui/NoStackTraceFoldingPanel.kt @@ -0,0 +1,7 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.execution.ui + +/** + * The marker interface which can be used to disable any stack trace folding in nested consoles. + */ +interface NoStackTraceFoldingPanel \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceUtil.kt b/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceUtil.kt index f5f3a94ac339..77c14788ce51 100644 --- a/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceUtil.kt +++ b/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceUtil.kt @@ -145,7 +145,7 @@ class AnalyzeStacktraceUtil private constructor(){ fun createConsoleComponent(consoleView: ConsoleView?, toolbarActions: DefaultActionGroup?): JComponent? } - private class MyConsolePanel(consoleView: ExecutionConsole, toolbarActions: ActionGroup) : JPanel(BorderLayout()) { + private class MyConsolePanel(consoleView: ExecutionConsole, toolbarActions: ActionGroup) : JPanel(BorderLayout()), NoStackTraceFoldingPanel { init { val toolbarPanel = JPanel(BorderLayout()) val toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.ANALYZE_STACKTRACE_PANEL_TOOLBAR, toolbarActions, false)