From 8945d7871356f0b772a2ab69973bd3a07df422db Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 25 Nov 2013 16:34:34 +0100 Subject: [PATCH] IDEA-116945 IDE unresponsive with too many console foldings --- .../openapi/editor/impl/FoldRegionsTree.java | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java index d3fa3b8f30ae..cf3b6136e047 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java @@ -81,35 +81,28 @@ abstract class FoldRegionsTree { ArrayList topLevels = new ArrayList(myRegions.size() / 2); ArrayList visible = new ArrayList(myRegions.size()); FoldRegion[] regions = toFoldArray(myRegions); - FoldRegion currentToplevel = null; + FoldRegion currentCollapsed = null; for (FoldRegion region : regions) { - if (region.isValid()) { + if (!region.isValid()) { + continue; + } + + if (currentCollapsed == null || !contains(currentCollapsed, region)) { visible.add(region); - if (!region.isExpanded()) { - if (currentToplevel == null || currentToplevel.getEndOffset() < region.getStartOffset()) { - currentToplevel = region; - topLevels.add(region); - } + } + + if (!region.isExpanded()) { + if (currentCollapsed == null || currentCollapsed.getEndOffset() < region.getStartOffset()) { + currentCollapsed = region; + topLevels.add(region); } } } myCachedTopLevelRegions = toFoldArray(topLevels); - - Arrays.sort(myCachedTopLevelRegions, BY_END_OFFSET); - - FoldRegion[] visibleArrayed = toFoldArray(visible); - for (FoldRegion visibleRegion : visibleArrayed) { - for (FoldRegion topLevelRegion : myCachedTopLevelRegions) { - if (contains(topLevelRegion, visibleRegion)) { - visible.remove(visibleRegion); - break; - } - } - } - myCachedVisible = toFoldArray(visible); + Arrays.sort(myCachedTopLevelRegions, BY_END_OFFSET); Arrays.sort(myCachedVisible, BY_END_OFFSET_REVERSE); updateCachedOffsets();