From 472d02996944c4fc73b2c13cf0ef48a44f4b76d1 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Tue, 20 Mar 2018 16:21:02 +0300 Subject: [PATCH] prevent fold regions from 'disappearing' if no one references them supposedly fixes EA-107809 - AIOOBE: TIntArrayList.insert --- .../openapi/editor/impl/FoldRegionImpl.java | 8 +++++++- .../openapi/editor/impl/FoldingModelImpl.java | 20 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionImpl.java index a997cb37d67d..b4a0e062763e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionImpl.java @@ -7,11 +7,12 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.FoldRegion; import com.intellij.openapi.editor.FoldingGroup; import com.intellij.openapi.editor.event.DocumentEvent; +import com.intellij.openapi.util.Getter; import com.intellij.util.DocumentUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -class FoldRegionImpl extends RangeMarkerImpl implements FoldRegion { +class FoldRegionImpl extends RangeMarkerImpl implements FoldRegion, Getter { private boolean myIsExpanded; private final EditorImpl myEditor; private final String myPlaceholderText; @@ -65,6 +66,11 @@ class FoldRegionImpl extends RangeMarkerImpl implements FoldRegion { } } + @Override + public FoldRegionImpl get() { + return this; + } + private static void doSetExpanded(boolean expanded, FoldingModelImpl foldingModel, FoldRegion region, boolean notify) { if (expanded) { foldingModel.expandFoldRegion(region, notify); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java index 7040c5b6cb9d..00a9317e3bc2 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java @@ -15,6 +15,7 @@ import com.intellij.openapi.editor.ex.FoldingModelEx; import com.intellij.openapi.editor.ex.PrioritizedInternalDocumentListener; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.Getter; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.ModificationTracker; import com.intellij.util.DocumentUtil; @@ -59,7 +60,24 @@ public class FoldingModelImpl implements FoldingModelEx, PrioritizedInternalDocu myIsFoldingEnabled = true; myIsBatchFoldingProcessing = false; myDoNotCollapseCaret = false; - myRegionTree = new RangeMarkerTree<>(editor.getDocument()); + myRegionTree = new RangeMarkerTree(editor.getDocument()) { + @NotNull + @Override + protected RMNode createNewNode(@NotNull FoldRegionImpl key, + int start, + int end, + boolean greedyToLeft, + boolean greedyToRight, + boolean stickingToRight, + int layer) { + return new RMNode(this, key, start, end, greedyToLeft, greedyToRight, stickingToRight) { + @Override + protected Getter createGetter(@NotNull FoldRegionImpl region) { + return region; + } + }; + } + }; myFoldTree = new FoldRegionsTree(myRegionTree) { @Override protected boolean isFoldingEnabled() {