From 876501f5927882a8d7c7f57782536793b5d03476 Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Fri, 29 Mar 2024 10:39:34 +0530 Subject: [PATCH] Use string builder for truncation --- .../cli/diagnostics/DiagnosticAnnotation.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/cli/ballerina-cli/src/main/java/io/ballerina/cli/diagnostics/DiagnosticAnnotation.java b/cli/ballerina-cli/src/main/java/io/ballerina/cli/diagnostics/DiagnosticAnnotation.java index 953394c63840..b1e77f0051a9 100644 --- a/cli/ballerina-cli/src/main/java/io/ballerina/cli/diagnostics/DiagnosticAnnotation.java +++ b/cli/ballerina-cli/src/main/java/io/ballerina/cli/diagnostics/DiagnosticAnnotation.java @@ -161,19 +161,24 @@ protected static TruncateResult truncate(String line, int maxLength, int diagnos if (line.length() < maxLength - 3) { return new TruncateResult(line, diagnosticStart, diagnosticLength); } + + StringBuilder truncatedLineBuilder = new StringBuilder(); + String ellipsis = "..."; if (diagnosticStart + diagnosticLength <= maxLength - 3) { - return new TruncateResult(line.substring(0, maxLength - 3) + "...", diagnosticStart, diagnosticLength); + truncatedLineBuilder.append(line, 0, maxLength - 3).append(ellipsis); + return new TruncateResult(truncatedLineBuilder.toString(), diagnosticStart, diagnosticLength); } + int diagnosticMid = diagnosticStart + (diagnosticLength / 2); int stepsToMoveWindow = Math.max(0, diagnosticMid - (maxLength / 2)); int border = Math.min(line.length() - 1, stepsToMoveWindow + maxLength - 3); int newDiagnosticStart = Math.max(3, diagnosticStart - stepsToMoveWindow); int newDiagnosticLength = Math.min(diagnosticLength, maxLength - newDiagnosticStart - 3); int stringStart = Math.min(stepsToMoveWindow + 3, border); - int stringEnd = border; - String truncatedLine = "..." + line.substring(stringStart, stringEnd) + "..."; - return new TruncateResult(truncatedLine, newDiagnosticStart, Math.max(0, newDiagnosticLength)); + truncatedLineBuilder.append(ellipsis).append(line, stringStart, border).append(ellipsis); + return new TruncateResult(truncatedLineBuilder.toString(), newDiagnosticStart, + Math.max(0, newDiagnosticLength)); }