From b859639a82c8d93c8ee5cdd1cc083f75a2d5deb7 Mon Sep 17 00:00:00 2001 From: Bogdan Kirilenko Date: Mon, 29 Jun 2026 16:29:12 +0400 Subject: [PATCH] [minimap] IJPL-248674 avoid quadratic minimap color lookup (cherry picked from commit 2872db6eece859e673c4d4dac961b0b75961d95d) IJ-CR-210985 GitOrigin-RevId: b011da98e97c12c82c2d0afc5e811dba3e878120 --- .../render/MinimapTokenColorContext.kt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/minimap/render/MinimapTokenColorContext.kt b/platform/platform-impl/src/com/intellij/ide/minimap/render/MinimapTokenColorContext.kt index 27860f7c8234..bffb97e9fea2 100644 --- a/platform/platform-impl/src/com/intellij/ide/minimap/render/MinimapTokenColorContext.kt +++ b/platform/platform-impl/src/com/intellij/ide/minimap/render/MinimapTokenColorContext.kt @@ -82,13 +82,22 @@ class MinimapTokenColorContext( computeLineColorRuns(editorEx, lineStart, lineEnd) } - for (run in runs) { - if (probeOffset in run.startOffset until run.endOffset) { - return run.color + return runForOffset(runs, probeOffset)?.color ?: defaultForeground + } + + private fun runForOffset(runs: List, offset: Int): ColorRun? { + var low = 0 + var high = runs.size - 1 + while (low <= high) { + val mid = (low + high) ushr 1 + val run = runs[mid] + when { + offset < run.startOffset -> high = mid - 1 + offset >= run.endOffset -> low = mid + 1 + else -> return run } } - - return defaultForeground + return null } private fun computeLineColorRuns(editorEx: EditorEx, lineStart: Int, lineEnd: Int): List {