mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[coverage] EA-846712 Fix ConcurrentModificationException access list only with lock
GitOrigin-RevId: dcd1b7b3d81eb3ddcb99770843c5a1e5b3738ba5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
fe3da5ffb9
commit
79d5aa0eeb
+15
-10
@@ -203,19 +203,10 @@ public class CoverageEditorAnnotatorImpl implements CoverageEditorAnnotator, Dis
|
||||
@Override
|
||||
public void documentChanged(@NotNull final DocumentEvent e) {
|
||||
myMapper.clear();
|
||||
var rangeHighlighters = getOrCreateHighlighters(false);
|
||||
if (rangeHighlighters == null) return;
|
||||
int offset = e.getOffset();
|
||||
final int lineNumber = document.getLineNumber(offset);
|
||||
final int lastLineNumber = document.getLineNumber(offset + e.getNewLength());
|
||||
var changeRange = new TextRange(document.getLineStartOffset(lineNumber), document.getLineEndOffset(lastLineNumber));
|
||||
for (var it = rangeHighlighters.iterator(); it.hasNext(); ) {
|
||||
final RangeHighlighter highlighter = it.next();
|
||||
if (!highlighter.isValid() || highlighter.getTextRange().intersects(changeRange)) {
|
||||
ApplicationManager.getApplication().invokeLater(() -> highlighter.dispose());
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
if (!removeChangedHighlighters(lineNumber, lastLineNumber, document)) return;
|
||||
if (!myUpdateAlarm.isDisposed()) {
|
||||
myUpdateAlarm.addRequest(() -> {
|
||||
Int2IntMap newToOldLineMapping = myMapper.canGetFastMapping() ? myMapper.getNewToOldLineMapping() : null;
|
||||
@@ -238,6 +229,20 @@ public class CoverageEditorAnnotatorImpl implements CoverageEditorAnnotator, Dis
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized boolean removeChangedHighlighters(int lineNumber, int lastLineNumber, Document document) {
|
||||
var rangeHighlighters = getOrCreateHighlighters(false);
|
||||
if (rangeHighlighters == null) return false;
|
||||
var changeRange = new TextRange(document.getLineStartOffset(lineNumber), document.getLineEndOffset(lastLineNumber));
|
||||
for (var it = rangeHighlighters.iterator(); it.hasNext(); ) {
|
||||
final RangeHighlighter highlighter = it.next();
|
||||
if (!highlighter.isValid() || highlighter.getTextRange().intersects(changeRange)) {
|
||||
ApplicationManager.getApplication().invokeLater(() -> highlighter.dispose());
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void collectLinesInFile(@NotNull CoverageSuitesBundle suite,
|
||||
@NotNull PsiFile psiFile,
|
||||
Module module,
|
||||
|
||||
Reference in New Issue
Block a user