diff --git a/platform/lang-impl/src/com/intellij/execution/console/FoldLinesWithSubstring.java b/platform/lang-impl/src/com/intellij/execution/console/FoldLinesLikeThis.java similarity index 89% rename from platform/lang-impl/src/com/intellij/execution/console/FoldLinesWithSubstring.java rename to platform/lang-impl/src/com/intellij/execution/console/FoldLinesLikeThis.java index 0c04f8ba69c1..f5e7072ce0c0 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/FoldLinesWithSubstring.java +++ b/platform/lang-impl/src/com/intellij/execution/console/FoldLinesLikeThis.java @@ -1,5 +1,6 @@ package com.intellij.execution.console; +import com.intellij.execution.impl.ConsoleViewImpl; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; @@ -14,12 +15,14 @@ import org.jetbrains.annotations.Nullable; /** * @author peter */ -public class FoldLinesWithSubstring extends DumbAwareAction { +public class FoldLinesLikeThis extends DumbAwareAction { private final Editor myEditor; + private final ConsoleViewImpl myConsole; - public FoldLinesWithSubstring(Editor editor) { + public FoldLinesLikeThis(Editor editor, ConsoleViewImpl console) { super("Fold lines like this"); myEditor = editor; + myConsole = console; } @Nullable @@ -71,5 +74,6 @@ public class FoldLinesWithSubstring extends DumbAwareAction { }, ModalityState.stateForComponent(createComponent())); } }); + myConsole.foldImmediately(); } } 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 c67b24f4ee41..a19cc284deac 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java @@ -19,7 +19,7 @@ package com.intellij.execution.impl; import com.intellij.codeInsight.navigation.IncrementalSearchHandler; import com.intellij.execution.ConsoleFolding; import com.intellij.execution.ExecutionBundle; -import com.intellij.execution.console.FoldLinesWithSubstring; +import com.intellij.execution.console.FoldLinesLikeThis; import com.intellij.execution.filters.*; import com.intellij.execution.process.ProcessHandler; import com.intellij.execution.ui.ConsoleView; @@ -146,6 +146,23 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo myEditor.getCaretModel().moveToOffset(myEditor.getDocument().getTextLength()); } + public void foldImmediately() { + ApplicationManager.getApplication().assertIsDispatchThread(); + myFoldingAlarm.cancelAllRequests(); + + myPendingFoldRegions.clear(); + final FoldingModel model = myEditor.getFoldingModel(); + model.runBatchFoldingOperation(new Runnable() { + public void run() { + for (FoldRegion region : model.getAllFoldRegions()) { + model.removeFoldRegion(region); + } + } + }); + + updateFoldings(0, myEditor.getDocument().getLineCount() - 1, true); + } + private static class TokenInfo{ private final ConsoleViewContentType contentType; private int startOffset; @@ -763,7 +780,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo final DefaultActionGroup group = new DefaultActionGroup(); group.add(new ClearAllAction()); group.add(new CopyAction()); - group.add(new FoldLinesWithSubstring(myEditor)); + group.add(new FoldLinesLikeThis(myEditor, this)); group.addSeparator(); final ActionManager actionManager = ActionManager.getInstance(); group.add(actionManager.getAction(DiffActions.COMPARE_WITH_CLIPBOARD)); @@ -832,10 +849,10 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo ApplicationManager.getApplication().assertIsDispatchThread(); PsiDocumentManager.getInstance(myProject).commitAllDocuments(); highlightHyperlinks(myEditor, myHyperlinks, myCustomFilter, myPredefinedMessageFilter, line1, endLine); - updateFoldings(line1, endLine); + updateFoldings(line1, endLine, false); } - private void updateFoldings(final int line1, final int endLine) { + private void updateFoldings(final int line1, final int endLine, boolean immediately) { final Document document = myEditor.getDocument(); final CharSequence chars = document.getCharsSequence(); final int startLine = Math.max(0, line1); @@ -844,7 +861,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo addFolding(document, chars, line, toAdd); } if (!toAdd.isEmpty()) { - doUpdateFolding(toAdd); + doUpdateFolding(toAdd, immediately); } } @@ -878,7 +895,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo } } - private void doUpdateFolding(final List toAdd) { + private void doUpdateFolding(final List toAdd, final boolean immediately) { assertIsDispatchThread(); myPendingFoldRegions.addAll(toAdd); @@ -887,7 +904,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo public void run() { assertIsDispatchThread(); final FoldingModel model = myEditor.getFoldingModel(); - model.runBatchFoldingOperationDoNotCollapseCaret(new Runnable() { + final Runnable operation = new Runnable() { public void run() { assertIsDispatchThread(); for (FoldRegion region : myPendingFoldRegions) { @@ -896,10 +913,15 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo } myPendingFoldRegions.clear(); } - }); + }; + if (immediately) { + model.runBatchFoldingOperation(operation); + } else { + model.runBatchFoldingOperationDoNotCollapseCaret(operation); + } } }; - if (myPendingFoldRegions.size() > 100) { + if (immediately || myPendingFoldRegions.size() > 100) { runnable.run(); } else { myFoldingAlarm.addRequest(runnable, 50);