mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't let invalid fold regions and hyperlink highlights add up on console overflow (IDEA-117120)
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user