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 @@
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());
}
}