From 18d4a2e56271f2bed6eb26e612d3a3eec2be0b7f Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 10 Feb 2017 14:48:49 +0300 Subject: [PATCH] optimisation: remove the leaves first to minimize maxEndOf recalculations --- .../src/com/intellij/openapi/editor/impl/RangeMarkerTree.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java index a9def5d1f808..58dd4a8e0b7f 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java @@ -192,7 +192,9 @@ public class RangeMarkerTree extends IntervalTreeImpl node : affected) { + // reverse direction to visit leaves first - it's cheaper to compute maxEndOf for them first + for (int i = affected.size() - 1; i >= 0; i--) { + IntervalNode node = affected.get(i); // assumption: interval.getEndOffset() will never be accessed during remove() int startOffset = node.intervalStart(); int endOffset = node.intervalEnd();