diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt index 12ecc8b0522..32231aec21a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt @@ -100,16 +100,20 @@ class KotlinFoldingBuilder : CustomFoldingBuilder(), DumbAware { override fun getLanguagePlaceholderText(node: ASTNode, range: TextRange): String = when { node.elementType == KtTokens.BLOCK_COMMENT -> "/${getFirstLineOfComment(node)}.../" node.elementType == KDocTokens.KDOC -> "/**${getFirstLineOfComment(node)}...*/" - node.elementType == KtNodeTypes.STRING_TEMPLATE -> "\"\"\"${getFirstLineOfString(node)}...\"\"\"" + node.elementType == KtNodeTypes.STRING_TEMPLATE -> "\"\"\"${getTrimmedFirstLineOfString(node).addSpaceIfNeeded()}...\"\"\"" node.psi is KtImportList -> "..." else -> "{...}" } - private fun getFirstLineOfString(node: ASTNode): String { - val targetStringLine = node.text.split("\n").asSequence().map { - it.replace("\"\"\"", "") - }.firstOrNull(String::isNotBlank) ?: return "" - return " ${targetStringLine.replace("\"\"\"", "").trim()} " + private fun getTrimmedFirstLineOfString(node: ASTNode): String { + val lines = node.text.split("\n") + val firstLine = lines.asSequence().map { it.replace("\"\"\"", "").trim() }.firstOrNull(String::isNotEmpty) + return firstLine ?: "" + } + + private fun String.addSpaceIfNeeded(): String { + if (isEmpty() || endsWith(" ")) return this + return this + " " } private fun getFirstLineOfComment(node: ASTNode): String { diff --git a/idea/testData/folding/checkCollapse/multilineStrings.kt b/idea/testData/folding/checkCollapse/multilineStrings.kt index 614a915b8d3..f5c3b189e30 100644 --- a/idea/testData/folding/checkCollapse/multilineStrings.kt +++ b/idea/testData/folding/checkCollapse/multilineStrings.kt @@ -1,4 +1,4 @@ -val result1 = """ +val result1 = """ 14.55576559546314 - 0.25, 3.0, 0.25, 0.25, 1.0, 0.25, 1.0, 2.0, 1.0, 0.25, 1.0, 0.5, 2.0, 3.0, 3.0 14.55576559546314 - 0.25, 4.0, 1.0, 0.5, 1.0, 1.0, 3.0, 4.0, 3.0, 0.25, 3.0, 0.5, 3.0, 3.0, 2.0 14.55576559546314 - 0.25, 3.0, 0.25, 0.25, 1.0, 0.25, 2.0, 2.0, 1.0, 0.5, 1.0, 0.5, 2.0, 3.0, 3.0 @@ -22,7 +22,7 @@ val result1 = """other multiline string +val result2 = """other multiline string without spaces """