From d3427169fb2ce31ff0fb20f9ddbe529a7c0f38e0 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 18 Jul 2012 16:23:00 +0400 Subject: [PATCH] Optimize indent() implementation --- .../jet/test/util/NamespaceComparator.java | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java b/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java index c7964f4e546..511d7577493 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java +++ b/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java @@ -36,10 +36,8 @@ import org.jetbrains.jet.lang.types.Variance; import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.junit.Assert; -import java.io.BufferedReader; import java.io.File; import java.io.IOException; -import java.io.StringReader; import java.lang.reflect.Method; import java.util.*; @@ -732,23 +730,28 @@ public class NamespaceComparator { private static String indent(String string) { - try { - StringBuilder r = new StringBuilder(); - BufferedReader reader = new BufferedReader(new StringReader(string)); - while (true) { - String line = reader.readLine(); - if (line == null) { - break; + // This method gets called a lot, so the performance is critical + // That's why the hand-written code + + String indent = " "; + StringBuilder r = new StringBuilder(string.length()); + r.append(indent); + boolean lastCharIsNewLine = false; + for (int i = 0; i < string.length(); i++) { + char c = string.charAt(i); + r.append(c); + if (c == '\n') { + if (i != string.length() - 1) { + r.append(indent); + } + else { + lastCharIsNewLine = true; } - r.append(" "); - r.append(line); - r.append("\n"); } - return r.toString(); - } catch (IOException e) { - throw new RuntimeException(e); } + if (!lastCharIsNewLine) { + r.append("\n"); + } + return r.toString(); } - - }