From 1e988028a9380d0bac8dc6a06c6b222536f0133c Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 16 Jun 2015 13:18:16 +0300 Subject: [PATCH] Optimization --- j2k/src/org/jetbrains/kotlin/j2k/CodeBuilder.kt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/CodeBuilder.kt b/j2k/src/org/jetbrains/kotlin/j2k/CodeBuilder.kt index caf49caa4ca..17c9f2a3af7 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/CodeBuilder.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/CodeBuilder.kt @@ -83,8 +83,10 @@ class CodeBuilder(private val topElement: PsiElement?) { return this } + assert(text.indexOf('\r') < 0, "No '\\r' allowed") + if (endOfLineCommentAtEnd) { - if (text[0] != '\n' && text[0] != '\r') builder.append('\n') + if (text[0] != '\n') builder.append('\n') endOfLineCommentAtEnd = false } @@ -343,14 +345,16 @@ class CodeBuilder(private val topElement: PsiElement?) { fun PsiElement.isEmptyElement() = getFirstChild() == null && getTextLength() == 0 - fun PsiWhiteSpace.lineBreakCount() = StringUtil.getLineBreakCount(getText()!!) + fun PsiWhiteSpace.lineBreakCount() = StringUtil.getLineBreakCount(getText()) - fun PsiWhiteSpace.hasLineBreaks() = StringUtil.containsLineBreak(getText()!!) + fun PsiWhiteSpace.hasLineBreaks() = StringUtil.containsLineBreak(getText()) fun CharSequence.trailingLineBreakCount(): Int { - val index = ((length()-1 downTo 0).firstOrNull { val c = this[it]; c != '\n' && c != '\r' } ?: -1) + 1 - if (index == length()) return 0 - return StringUtil.getLineBreakCount(subSequence(index, length())) + var i = length() - 1 + while (i >= 0 && this[i] == '\n') { + i-- + } + return length() - i - 1 } } }