From 85a4a63d95f499a1dd2e1ed20dd84bb5a081b611 Mon Sep 17 00:00:00 2001 From: Mehmet Karaman Date: Mon, 16 Mar 2026 13:32:32 +0100 Subject: [PATCH] Improve DocLineComparator performance #2575 Add a lightweight preliminary check before invoking String.equals(), which avoids unnecessary overhead while preserving correctness for other comparison cases. Fixes https://github.com/eclipse-platform/eclipse.platform/issues/2575 --- .../compare/internal/DocLineComparator.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java b/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java index 5cda5fbb815..f8105830230 100644 --- a/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java +++ b/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java @@ -183,7 +183,19 @@ public boolean rangesEqual(int thisIndex, IRangeComparator otherComparator, int int olen= other.getTokenLength(otherIndex); if (tlen == olen) { String[] linesToCompare = extract(thisIndex, otherIndex, other, false); - return linesToCompare[0].equals(linesToCompare[1]); + String s1 = linesToCompare[0]; + String s2 = linesToCompare[1]; + if (s1.isEmpty() == s2.isEmpty()) { + return true; + } + if (s1.isEmpty() || s2.isEmpty()) { + return false; + } + if (s1.length() != s2.length() || s1.charAt(0) != s2.charAt(0) + || s1.charAt(s1.length() - 1) != s2.charAt(s2.length() - 1)) { + return false; + } + return s1.equals(s2); } else if (fCompareFilters != null && fCompareFilters.length > 0) { String[] linesToCompare = extract(thisIndex, otherIndex, other, true); return linesToCompare[0].equals(linesToCompare[1]);