From cead8f5b31bb31c26becdf24b054f4652385cb91 Mon Sep 17 00:00:00 2001 From: irengrig Date: Tue, 9 Aug 2011 14:21:18 +0400 Subject: [PATCH] annotate stacktrace only in "analyze stacktrace" and thread dump console. recent changes annotation setting also put into "analyze stacktrace" dialog --- .../debugger/ui/DebuggerSessionTab.java | 1 + .../intellij/unscramble/UnscrambleDialog.form | 13 ++- .../intellij/unscramble/UnscrambleDialog.java | 24 +++++ .../intellij/execution/ui/ConsoleView.java | 2 + .../execution/impl/ConsoleViewImpl.java | 88 +++++++++++-------- .../unscramble/AnalyzeStacktraceDialog.java | 3 +- .../AnalyzeStacktraceOnErrorAction.java | 1 + .../ui/BaseTestsOutputConsoleView.java | 4 + .../actions/AnalyzeTaskStacktraceAction.java | 1 + 9 files changed, 95 insertions(+), 42 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java index fba455e7a9db..2f6ceacc7b10 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java @@ -505,6 +505,7 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos } final ConsoleView consoleView = consoleBuilder.getConsole(); final DefaultActionGroup toolbarActions = new DefaultActionGroup(); + consoleView.allowHeavyFilters(); final ThreadDumpPanel panel = new ThreadDumpPanel(project, consoleView, toolbarActions, threads); final Icon icon = null; diff --git a/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.form b/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.form index 7097a9c8e183..b0ee1e42eb87 100644 --- a/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.form +++ b/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.form @@ -1,9 +1,9 @@
- + - + @@ -84,6 +84,15 @@ + + + + + + + + + diff --git a/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.java b/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.java index f4e5971cc61f..03889537d981 100644 --- a/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.java +++ b/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.java @@ -25,11 +25,14 @@ import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.help.HelpManager; +import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; +import com.intellij.openapi.vcs.ProjectLevelVcsManager; +import com.intellij.openapi.vcs.configurable.VcsContentAnnotationConfigurable; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.GuiUtils; import com.intellij.ui.TextFieldWithHistory; @@ -64,7 +67,9 @@ public class UnscrambleDialog extends DialogWrapper { private JCheckBox myUseUnscrambler; private JPanel myUnscramblePanel; private JCheckBox myOnTheFly; + private JPanel myBottomPanel; protected AnalyzeStacktraceUtil.StacktraceEditorPanel myStacktraceEditorPanel; + private VcsContentAnnotationConfigurable myConfigurable; public UnscrambleDialog(Project project) { super(false); @@ -140,6 +145,15 @@ public class UnscrambleDialog extends DialogWrapper { myStacktraceEditorPanel.pasteTextFromClipboard(); } + private void createUIComponents() { + myBottomPanel = new JPanel(new BorderLayout()); + if (ProjectLevelVcsManager.getInstance(myProject).hasActiveVcss()) { + myConfigurable = new VcsContentAnnotationConfigurable(myProject); + myBottomPanel.add(myConfigurable.createComponent(), BorderLayout.CENTER); + myConfigurable.reset(); + } + } + public static String getLastUsedLogUrl() { return PropertiesComponent.getInstance().getValue(PROPERTY_LOG_FILE_LAST_URL); } @@ -325,6 +339,15 @@ public class UnscrambleDialog extends DialogWrapper { } protected void doOKAction() { + if (myConfigurable != null && myConfigurable.isModified()) { + try { + myConfigurable.apply(); + } + catch (ConfigurationException e) { + setText(e.getMessage()); + return; + } + } if (performUnscramble()) { myLogFile.addCurrentTextToHistory(); close(OK_EXIT_CODE); @@ -345,6 +368,7 @@ public class UnscrambleDialog extends DialogWrapper { if (unscrambledTrace == null) return false; List threadStates = ThreadDumpParser.parse(unscrambledTrace); final ConsoleView consoleView = addConsole(project, threadStates); + consoleView.allowHeavyFilters(); AnalyzeStacktraceUtil.printStacktrace(consoleView, unscrambledTrace); return true; } diff --git a/platform/lang-api/src/com/intellij/execution/ui/ConsoleView.java b/platform/lang-api/src/com/intellij/execution/ui/ConsoleView.java index 3833df90a556..97942abeae1a 100644 --- a/platform/lang-api/src/com/intellij/execution/ui/ConsoleView.java +++ b/platform/lang-api/src/com/intellij/execution/ui/ConsoleView.java @@ -47,4 +47,6 @@ public interface ConsoleView extends ExecutionConsole{ @NotNull AnAction[] createConsoleActions(); + + void allowHeavyFilters(); } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java index b036a694effb..d6dc4f44ce04 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java @@ -125,6 +125,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo private MyDiffContainer myJLayeredPane; private JPanel myMainPanel; private final Runnable myFinishProgress; + private boolean myAllowHeavyFilters = false; @TestOnly public Editor getEditor() { @@ -820,51 +821,55 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo myHyperlinks.highlightHyperlinks(myCustomFilter, myPredefinedMessageFilter, line1, endLine); } - if (myPredefinedMessageFilter.isAnyHeavy() && myPredefinedMessageFilter.shouldRunHeavy()) { - final int startLine = Math.max(0, line1); - - final Document document = getEditor().getDocument(); - final Document documentCopy = new DocumentImpl(true); - final int startOffset = document.getLineStartOffset(startLine); - documentCopy.setText(new String(document.getText(new TextRange(startOffset, document.getLineEndOffset(endLine))))); - documentCopy.setReadOnly(true); - - myJLayeredPane.startUpdating(); - final int currentValue = myHeavyUpdateTicket; - myHeavyAlarm.addRequest(new Runnable() { - @Override - public void run() { - if (! myPredefinedMessageFilter.shouldRunHeavy()) return; - myPredefinedMessageFilter.applyHeavyFilter(documentCopy, startOffset, startLine, new Consumer() { - @Override - public void consume(final FilterMixin.AdditionalHighlight additionalHighlight) { - SwingUtilities.invokeLater( - new Runnable() { - @Override - public void run() { - if (myFlushAlarm.isDisposed()) return; - myFlushAlarm.addRequest(new Runnable() { - @Override - public void run() { - if (myHeavyUpdateTicket != currentValue) return; - myHyperlinks.adjustHighlighters(Collections.singletonList(additionalHighlight)); - } - }, 0); - } - }); - } - }); - if (myHeavyAlarm.getActiveRequestCount() == 0) { - SwingUtilities.invokeLater(myFinishProgress); - } - } - }, 0); + if (myAllowHeavyFilters && myPredefinedMessageFilter.isAnyHeavy() && myPredefinedMessageFilter.shouldRunHeavy()) { + runHeavyFilters(line1, endLine); } if (myUpdateFoldingsEnabled) { updateFoldings(line1, endLine, true); } } + private void runHeavyFilters(int line1, int endLine) { + final int startLine = Math.max(0, line1); + + final Document document = getEditor().getDocument(); + final Document documentCopy = new DocumentImpl(true); + final int startOffset = document.getLineStartOffset(startLine); + documentCopy.setText(new String(document.getText(new TextRange(startOffset, document.getLineEndOffset(endLine))))); + documentCopy.setReadOnly(true); + + myJLayeredPane.startUpdating(); + final int currentValue = myHeavyUpdateTicket; + myHeavyAlarm.addRequest(new Runnable() { + @Override + public void run() { + if (! myPredefinedMessageFilter.shouldRunHeavy()) return; + myPredefinedMessageFilter.applyHeavyFilter(documentCopy, startOffset, startLine, new Consumer() { + @Override + public void consume(final FilterMixin.AdditionalHighlight additionalHighlight) { + SwingUtilities.invokeLater( + new Runnable() { + @Override + public void run() { + if (myFlushAlarm.isDisposed()) return; + myFlushAlarm.addRequest(new Runnable() { + @Override + public void run() { + if (myHeavyUpdateTicket != currentValue) return; + myHyperlinks.adjustHighlighters(Collections.singletonList(additionalHighlight)); + } + }, 0); + } + }); + } + }); + if (myHeavyAlarm.getActiveRequestCount() == 0) { + SwingUtilities.invokeLater(myFinishProgress); + } + } + }, 0); + } + private void updateFoldings(final int line1, final int endLine, boolean immediately) { final Document document = myEditor.getDocument(); final CharSequence chars = document.getCharsSequence(); @@ -1364,6 +1369,11 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo return result; } + @Override + public void allowHeavyFilters() { + myAllowHeavyFilters = true; + } + protected void scrollToTheEnd() { myEditor.getCaretModel().moveToOffset(myEditor.getDocument().getTextLength()); myEditor.getSelectionModel().removeSelection(); diff --git a/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceDialog.java b/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceDialog.java index 1b86de5c279c..b901d97e4fb2 100644 --- a/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceDialog.java +++ b/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceDialog.java @@ -16,10 +16,10 @@ package com.intellij.unscramble; +import com.intellij.execution.ui.ConsoleView; import com.intellij.ide.IdeBundle; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.execution.ui.ConsoleView; import javax.swing.*; import java.awt.*; @@ -50,6 +50,7 @@ public class AnalyzeStacktraceDialog extends DialogWrapper { @Override protected void doOKAction() { final ConsoleView consoleView = AnalyzeStacktraceUtil.addConsole(myProject, null, ""); + consoleView.allowHeavyFilters(); AnalyzeStacktraceUtil.printStacktrace(consoleView, myEditorPanel.getText()); super.doOKAction(); } diff --git a/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceOnErrorAction.java b/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceOnErrorAction.java index 94ada404ec3e..c78d56646833 100644 --- a/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceOnErrorAction.java +++ b/platform/lang-impl/src/com/intellij/unscramble/AnalyzeStacktraceOnErrorAction.java @@ -38,6 +38,7 @@ public class AnalyzeStacktraceOnErrorAction extends AnAction { final String message = IdeErrorsDialog.CURRENT_TRACE_KEY.getData(dataContext); if (message != null) { final ConsoleView consoleView = AnalyzeStacktraceUtil.addConsole(project, null, ""); + consoleView.allowHeavyFilters(); AnalyzeStacktraceUtil.printStacktrace(consoleView, message); } } diff --git a/platform/testRunner/src/com/intellij/execution/testframework/ui/BaseTestsOutputConsoleView.java b/platform/testRunner/src/com/intellij/execution/testframework/ui/BaseTestsOutputConsoleView.java index 0bd578cd979a..45d3a4be00a6 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/ui/BaseTestsOutputConsoleView.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/ui/BaseTestsOutputConsoleView.java @@ -68,6 +68,10 @@ public abstract class BaseTestsOutputConsoleView implements ConsoleView, Observa }); } + @Override + public void allowHeavyFilters() { + } + public void clear() { myConsole.clear(); } diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/AnalyzeTaskStacktraceAction.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/AnalyzeTaskStacktraceAction.java index 60de3e7e302e..0d7953954ee0 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/AnalyzeTaskStacktraceAction.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/AnalyzeTaskStacktraceAction.java @@ -50,6 +50,7 @@ public class AnalyzeTaskStacktraceAction extends BaseTaskAction { Comment[] comments = stacktraceDialog.getTraces(); for (Comment comment : comments) { ConsoleView consoleView = AnalyzeStacktraceUtil.addConsole(project, null, task.getId()); + consoleView.allowHeavyFilters(); AnalyzeStacktraceUtil.printStacktrace(consoleView, comment.getText()); } }