mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
correctly handle highlighters update inside batch folding operation (EA-85008, IDEA-157464)
This commit is contained in:
+5
@@ -296,6 +296,11 @@ class EditorSizeManager implements PrioritizedDocumentListener, Disposable, Fold
|
||||
myDocumentChangeStartOffset = Math.min(myDocumentChangeStartOffset, startOffset);
|
||||
myDocumentChangeEndOffset = Math.max(myDocumentChangeEndOffset, endOffset);
|
||||
}
|
||||
else if (myFoldingChangeEndOffset != Integer.MIN_VALUE) {
|
||||
// during batch folding processing we delay invalidation requests, as we cannot perform coordinate conversions immediately
|
||||
myFoldingChangeStartOffset = Math.min(myFoldingChangeStartOffset, startOffset);
|
||||
myFoldingChangeEndOffset = Math.max(myFoldingChangeEndOffset, endOffset);
|
||||
}
|
||||
else {
|
||||
doInvalidateRange(startOffset, endOffset);
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import com.intellij.openapi.editor.event.SelectionListener;
|
||||
import com.intellij.openapi.editor.ex.DocumentBulkUpdateListener;
|
||||
import com.intellij.openapi.editor.ex.DocumentEx;
|
||||
import com.intellij.openapi.editor.ex.EditorEx;
|
||||
import com.intellij.openapi.editor.ex.FoldingModelEx;
|
||||
import com.intellij.openapi.editor.ex.util.EditorUtil;
|
||||
import com.intellij.openapi.editor.markup.HighlighterTargetArea;
|
||||
import com.intellij.openapi.editor.markup.RangeHighlighter;
|
||||
@@ -390,4 +391,18 @@ public class EditorImplTest extends AbstractEditorTest {
|
||||
assertEquals(7, highlighters[0].getStartOffset());
|
||||
assertEquals(8, highlighters[0].getEndOffset());
|
||||
}
|
||||
|
||||
public void testChangingHighlightersAfterClearingFoldingsDuringFoldingBatchUpdate() throws Exception {
|
||||
initText("abc\n\ndef");
|
||||
addCollapsedFoldRegion(2, 6, "...");
|
||||
myEditor.getFoldingModel().runBatchFoldingOperation(() -> {
|
||||
((FoldingModelEx)myEditor.getFoldingModel()).clearFoldRegions();
|
||||
myEditor.getMarkupModel().addRangeHighlighter(7, 8, 0, new TextAttributes(null, null, null, null, Font.BOLD),
|
||||
HighlighterTargetArea.EXACT_RANGE);
|
||||
});
|
||||
RangeHighlighter[] highlighters = myEditor.getMarkupModel().getAllHighlighters();
|
||||
assertEquals(1, highlighters.length);
|
||||
assertEquals(7, highlighters[0].getStartOffset());
|
||||
assertEquals(8, highlighters[0].getEndOffset());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user