don't let invalid fold regions and hyperlink highlights add up on console overflow (IDEA-117120)

This commit is contained in:
peter
2013-11-27 17:58:46 +01:00
parent 25eb9fc13d
commit a8e1e9a802
4 changed files with 32 additions and 7 deletions
@@ -658,6 +658,10 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
final int oldLineCount = document.getLineCount();
final boolean isAtEndOfDocument = myEditor.getCaretModel().getOffset() == document.getTextLength();
boolean cycleUsed = myBuffer.isUseCyclicBuffer() && document.getTextLength() + text.length() > myBuffer.getCyclicBufferSize();
if (cycleUsed) {
clearHyperlinkAndFoldings();
}
CommandProcessor.getInstance().executeCommand(myProject, new Runnable() {
@Override
public void run() {
@@ -707,7 +711,6 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
myPsiDisposedCheck.performCheck();
final int newLineCount = document.getLineCount();
if (cycleUsed) {
clearHyperlinkAndFoldings();
if (!myInSpareTimeUpdate) {
myInSpareTimeUpdate = true;
final EditorNotificationPanel comp = new EditorNotificationPanel() {
@@ -721,7 +724,6 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
@Override
public void run() {
try {
myHyperlinks.clearHyperlinks();
clearHyperlinkAndFoldings();
highlightHyperlinksAndFoldings(0, document.getLineCount() - 1);
}
@@ -743,15 +745,18 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
}
private void clearHyperlinkAndFoldings() {
for (Iterator<RangeHighlighter> it = myHyperlinks.getHyperlinks().keySet().iterator(); it.hasNext();) {
if (!it.next().isValid()) {
it.remove();
}
}
myHyperlinks.clearHyperlinks();
myEditor.getMarkupModel().removeAllHighlighters();
myPendingFoldRegions.clear();
myFolding.clear();
myFoldingAlarm.cancelAllRequests();
myEditor.getFoldingModel().runBatchFoldingOperation(new Runnable() {
@Override
public void run() {
myEditor.getFoldingModel().clearFoldRegions();
}
});
cancelHeavyAlarm();
}
@@ -176,4 +176,9 @@ public class FoldingModelWindow implements FoldingModelEx{
public void rebuild() {
myDelegate.rebuild();
}
@Override
public void clearFoldRegions() {
myDelegate.clearFoldRegions();
}
}
@@ -51,5 +51,7 @@ public interface FoldingModelEx extends FoldingModel {
boolean removeListener(@NotNull FoldingListener listener);
void clearFoldRegions();
void rebuild();
}
@@ -287,6 +287,19 @@ public class FoldingModelImpl implements FoldingModelEx, PrioritizedDocumentList
}
public void dispose() {
doClearFoldRegions();
}
@Override
public void clearFoldRegions() {
if (!myIsBatchFoldingProcessing) {
LOG.error("Fold regions must be added or removed inside batchFoldProcessing() only.");
return;
}
doClearFoldRegions();
}
public void doClearFoldRegions() {
myGroups.clear();
myFoldTree.clear();
}