From 1c7ab68872ff599fd043c5e4b2e73ccbed523db5 Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Thu, 19 May 2016 15:17:17 +0300 Subject: [PATCH] Some optimization --- .../application/options/ChangesDiffCalculator.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/application/options/ChangesDiffCalculator.java b/platform/lang-impl/src/com/intellij/application/options/ChangesDiffCalculator.java index 2c856cf8597e..981122da686a 100644 --- a/platform/lang-impl/src/com/intellij/application/options/ChangesDiffCalculator.java +++ b/platform/lang-impl/src/com/intellij/application/options/ChangesDiffCalculator.java @@ -25,6 +25,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.progress.DumbProgressIndicator; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.text.CharArrayUtil; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -88,14 +89,23 @@ public class ChangesDiffCalculator { return new TextRange(startOffset, startOffset); } - CharSequence originalSequence = text.subSequence(startOffset, endOffset); + int originalStartOffset = startOffset; + int originalEndOffset = endOffset; while (endOffset < text.length() && - StringUtil.equals(originalSequence, text.subSequence(startOffset + 1, endOffset + 1))) { + rangesEqual(text, originalStartOffset, originalEndOffset, startOffset + 1, endOffset + 1)) { startOffset++; endOffset++; } return new TextRange(startOffset, endOffset); } + + private static boolean rangesEqual(@NotNull CharSequence text, int start1, int end1, int start2, int end2) { + if (end1 - start1 != end2 - start2) return false; + for (int i = start1; i < end1; i++) { + if (text.charAt(i) != text.charAt(i - start1 + start2)) return false; + } + return true; + } }