From f78c3b295be52018570504354b6a62051c11b5a9 Mon Sep 17 00:00:00 2001 From: zsu Date: Sun, 29 May 2022 23:45:51 +0800 Subject: [PATCH 01/12] Fix a bug caused by too long return expressions --- .../java/com/squareup/kotlinpoet/CodeBlock.kt | 8 +++++- .../java/com/squareup/kotlinpoet/FunSpec.kt | 4 +-- .../com/squareup/kotlinpoet/FunSpecTest.kt | 25 +++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt index 3683902079..93e4e55f14 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt @@ -270,7 +270,11 @@ public class CodeBlock private constructor( if (format[p] != '%') { var nextP = format.nextPotentialPlaceholderPosition(startIndex = p + 1) if (nextP == -1) nextP = format.length - formatParts += format.substring(p, nextP) + var formatPart = format.substring(p, nextP) + if (formatPart.startsWith(RETURN_WITH_SPACE)) { + formatPart = formatPart.replaceRange(RETURN_WITH_SPACE.indices, RETURN_WITH_NBSP) + } + formatParts += formatPart p = nextP continue } @@ -458,6 +462,8 @@ public class CodeBlock private constructor( private const val TYPE_NAME = 2 private val NO_ARG_PLACEHOLDERS = setOf("⇥", "⇤", "«", "»") internal val EMPTY = CodeBlock(emptyList(), emptyList()) + internal const val RETURN_WITH_SPACE = "return " + internal const val RETURN_WITH_NBSP = "return·" @JvmStatic public fun of(format: String, vararg args: Any?): CodeBlock = Builder().add(format, *args).build() diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt index 2266f6dd79..067f415486 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt @@ -558,8 +558,8 @@ public class FunSpec private constructor( internal val String.isConstructor get() = this == CONSTRUCTOR internal val String.isAccessor get() = this.isOneOf(GETTER, SETTER) - private val RETURN_EXPRESSION_BODY_PREFIX_SPACE = CodeBlock.of("return ") - private val RETURN_EXPRESSION_BODY_PREFIX_NBSP = CodeBlock.of("return·") + private val RETURN_EXPRESSION_BODY_PREFIX_SPACE = CodeBlock.of(CodeBlock.RETURN_WITH_SPACE) + private val RETURN_EXPRESSION_BODY_PREFIX_NBSP = CodeBlock.of(CodeBlock.RETURN_WITH_NBSP) private val THROW_EXPRESSION_BODY_PREFIX_SPACE = CodeBlock.of("throw ") private val THROW_EXPRESSION_BODY_PREFIX_NBSP = CodeBlock.of("throw·") diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt index df93cfcb6f..aa7efc4bc7 100644 --- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt +++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt @@ -206,6 +206,31 @@ class FunSpecTest { ) } + @Test fun returnLongExpression(){ + val funSpec = FunSpec.builder("foo") + .returns(String::class) + .addStatement("val placeholder = 1") + .addStatement("return \"Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong\"") + .build() + val sb = StringBuilder() + CodeWriter(sb).use { + funSpec.emit( + codeWriter = it, + enclosingName = null, + implicitModifiers = setOf(KModifier.PUBLIC), + includeKdocTags = false + ) + } + assertThat(sb.toString()).isEqualTo( + """ + |public fun foo(): kotlin.String { + | val placeholder = 1 + | return "Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong" + |} + |""".trimMargin() + ) + } + @Test fun functionParamWithKdoc() { val funSpec = FunSpec.builder("foo") .addParameter( From bf1a26dceb2e36ec5803cee203a33ca4594901cc Mon Sep 17 00:00:00 2001 From: zsu Date: Sun, 29 May 2022 23:59:16 +0800 Subject: [PATCH 02/12] Fix a bug caused by too long return expressions --- kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt index aa7efc4bc7..ed619ab4b7 100644 --- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt +++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt @@ -206,7 +206,7 @@ class FunSpecTest { ) } - @Test fun returnLongExpression(){ + @Test fun returnLongExpression() { val funSpec = FunSpec.builder("foo") .returns(String::class) .addStatement("val placeholder = 1") From b0c9036571e8fa665b928247319072597bf40a44 Mon Sep 17 00:00:00 2001 From: zsu Date: Mon, 30 May 2022 23:07:41 +0800 Subject: [PATCH 03/12] Auto-identify extra spaces before and after return --- .../java/com/squareup/kotlinpoet/CodeBlock.kt | 6 +--- .../java/com/squareup/kotlinpoet/FunSpec.kt | 14 +++++++- .../com/squareup/kotlinpoet/FunSpecTest.kt | 33 ++++++++++++++++++- 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt index 93e4e55f14..f290fe8d3e 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt @@ -270,11 +270,7 @@ public class CodeBlock private constructor( if (format[p] != '%') { var nextP = format.nextPotentialPlaceholderPosition(startIndex = p + 1) if (nextP == -1) nextP = format.length - var formatPart = format.substring(p, nextP) - if (formatPart.startsWith(RETURN_WITH_SPACE)) { - formatPart = formatPart.replaceRange(RETURN_WITH_SPACE.indices, RETURN_WITH_NBSP) - } - formatParts += formatPart + formatParts += format.substring(p, nextP) p = nextP continue } diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt index 067f415486..9ad1b345f4 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt @@ -114,7 +114,7 @@ public class FunSpec private constructor( } else if (!isEmptySetter) { codeWriter.emitCode("·{\n") codeWriter.indent() - codeWriter.emitCode(body, ensureTrailingNewline = true) + codeWriter.emitCode(body.returnsWithoutLinebreak(), ensureTrailingNewline = true) codeWriter.unindent() codeWriter.emit("}\n") } else { @@ -245,6 +245,18 @@ public class FunSpec private constructor( return null } + private fun CodeBlock.returnsWithoutLinebreak(): CodeBlock { + val originCodeBlockBuilder = toBuilder() + originCodeBlockBuilder.formatParts.replaceAll { formatPart -> + val startReturnIndex = formatPart.indexOf(CodeBlock.RETURN_WITH_SPACE) + if (startReturnIndex == -1) return@replaceAll formatPart + var endIndex = startReturnIndex + CodeBlock.RETURN_WITH_SPACE.length - 1 + while (formatPart[endIndex] == ' ') endIndex++ + CodeBlock.RETURN_WITH_NBSP + formatPart.substring(endIndex, formatPart.length) + } + return originCodeBlockBuilder.build() + } + override fun equals(other: Any?): Boolean { if (this === other) return true if (other == null) return false diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt index ed619ab4b7..24396464b1 100644 --- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt +++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt @@ -206,10 +206,38 @@ class FunSpecTest { ) } - @Test fun returnLongExpression() { + @Test fun returnsLongExpression() { val funSpec = FunSpec.builder("foo") .returns(String::class) .addStatement("val placeholder = 1") + .addStatement("return \"Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong\"") + .build() + val sb = StringBuilder() + CodeWriter(sb).use { + funSpec.emit( + codeWriter = it, + enclosingName = null, + implicitModifiers = setOf(KModifier.PUBLIC), + includeKdocTags = false + ) + } + assertThat(sb.toString()).isEqualTo( + """ + |public fun foo(): kotlin.String { + | val placeholder = 1 + | return "Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong" + |} + |""".trimMargin() + ) + } + + @Test fun returnsLongExpressions() { + val funSpec = FunSpec.builder("foo") + .returns(String::class) + .addStatement("val placeholder = 1") + .beginControlFlow("if (placeholder == 0)") + .addStatement(" return \"LooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpressionInControlFlow\"") + .endControlFlow() .addStatement("return \"Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong\"") .build() val sb = StringBuilder() @@ -225,6 +253,9 @@ class FunSpecTest { """ |public fun foo(): kotlin.String { | val placeholder = 1 + | if (placeholder == 0) { + | return "LooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpressionInControlFlow" + | } | return "Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong" |} |""".trimMargin() From 367265ac4a82a61bfcd057c19874b6db93eb2555 Mon Sep 17 00:00:00 2001 From: zsu Date: Mon, 30 May 2022 23:43:19 +0800 Subject: [PATCH 04/12] Auto-identify extra spaces before and after return --- .../java/com/squareup/kotlinpoet/FunSpec.kt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt index 9ad1b345f4..e6e0f1777d 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt @@ -247,11 +247,18 @@ public class FunSpec private constructor( private fun CodeBlock.returnsWithoutLinebreak(): CodeBlock { val originCodeBlockBuilder = toBuilder() - originCodeBlockBuilder.formatParts.replaceAll { formatPart -> - val startReturnIndex = formatPart.indexOf(CodeBlock.RETURN_WITH_SPACE) - if (startReturnIndex == -1) return@replaceAll formatPart - var endIndex = startReturnIndex + CodeBlock.RETURN_WITH_SPACE.length - 1 - while (formatPart[endIndex] == ' ') endIndex++ + val returnWithSpace = CodeBlock.RETURN_WITH_SPACE + originCodeBlockBuilder.formatParts.clear() + formatParts.mapTo(originCodeBlockBuilder.formatParts) { formatPart -> + if (formatPart.isEmpty()) return@mapTo formatPart + var startReturnIndex = 0 + while (formatPart[startReturnIndex] == ' ') startReturnIndex++ + var endIndex = startReturnIndex + returnWithSpace.length + if (endIndex > formatPart.length) return@mapTo formatPart + if (formatPart.substring(startReturnIndex, endIndex) != returnWithSpace) { + return@mapTo formatPart + } + while (endIndex < formatPart.length && formatPart[endIndex] == ' ') endIndex++ CodeBlock.RETURN_WITH_NBSP + formatPart.substring(endIndex, formatPart.length) } return originCodeBlockBuilder.build() From 9a968de5654e053093e1945a599e4f002fb48535 Mon Sep 17 00:00:00 2001 From: zsu Date: Mon, 30 May 2022 23:51:39 +0800 Subject: [PATCH 05/12] Fix possible array out-of-bounds --- kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt index e6e0f1777d..f4ecc136f5 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt @@ -252,7 +252,7 @@ public class FunSpec private constructor( formatParts.mapTo(originCodeBlockBuilder.formatParts) { formatPart -> if (formatPart.isEmpty()) return@mapTo formatPart var startReturnIndex = 0 - while (formatPart[startReturnIndex] == ' ') startReturnIndex++ + while (startReturnIndex < formatPart.length && formatPart[startReturnIndex] == ' ') startReturnIndex++ var endIndex = startReturnIndex + returnWithSpace.length if (endIndex > formatPart.length) return@mapTo formatPart if (formatPart.substring(startReturnIndex, endIndex) != returnWithSpace) { From 290da1fecce0f8e2389f1175b2c6231f537b4b12 Mon Sep 17 00:00:00 2001 From: yuejunyu Date: Tue, 31 May 2022 23:30:33 +0800 Subject: [PATCH 06/12] Making judgement easy --- .../java/com/squareup/kotlinpoet/CodeBlock.kt | 2 -- .../java/com/squareup/kotlinpoet/FunSpec.kt | 20 +++++------- .../com/squareup/kotlinpoet/FunSpecTest.kt | 31 ------------------- 3 files changed, 7 insertions(+), 46 deletions(-) diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt index f290fe8d3e..3683902079 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/CodeBlock.kt @@ -458,8 +458,6 @@ public class CodeBlock private constructor( private const val TYPE_NAME = 2 private val NO_ARG_PLACEHOLDERS = setOf("⇥", "⇤", "«", "»") internal val EMPTY = CodeBlock(emptyList(), emptyList()) - internal const val RETURN_WITH_SPACE = "return " - internal const val RETURN_WITH_NBSP = "return·" @JvmStatic public fun of(format: String, vararg args: Any?): CodeBlock = Builder().add(format, *args).build() diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt index f4ecc136f5..ecb3844800 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt @@ -247,19 +247,13 @@ public class FunSpec private constructor( private fun CodeBlock.returnsWithoutLinebreak(): CodeBlock { val originCodeBlockBuilder = toBuilder() - val returnWithSpace = CodeBlock.RETURN_WITH_SPACE + val returnWithSpace = "return " + val returnWithNbsp = "return·" originCodeBlockBuilder.formatParts.clear() formatParts.mapTo(originCodeBlockBuilder.formatParts) { formatPart -> - if (formatPart.isEmpty()) return@mapTo formatPart - var startReturnIndex = 0 - while (startReturnIndex < formatPart.length && formatPart[startReturnIndex] == ' ') startReturnIndex++ - var endIndex = startReturnIndex + returnWithSpace.length - if (endIndex > formatPart.length) return@mapTo formatPart - if (formatPart.substring(startReturnIndex, endIndex) != returnWithSpace) { - return@mapTo formatPart - } - while (endIndex < formatPart.length && formatPart[endIndex] == ' ') endIndex++ - CodeBlock.RETURN_WITH_NBSP + formatPart.substring(endIndex, formatPart.length) + if (formatPart.startsWith(returnWithSpace)) { + formatPart.replaceFirst(returnWithSpace, returnWithNbsp) + } else formatPart } return originCodeBlockBuilder.build() } @@ -577,8 +571,8 @@ public class FunSpec private constructor( internal val String.isConstructor get() = this == CONSTRUCTOR internal val String.isAccessor get() = this.isOneOf(GETTER, SETTER) - private val RETURN_EXPRESSION_BODY_PREFIX_SPACE = CodeBlock.of(CodeBlock.RETURN_WITH_SPACE) - private val RETURN_EXPRESSION_BODY_PREFIX_NBSP = CodeBlock.of(CodeBlock.RETURN_WITH_NBSP) + private val RETURN_EXPRESSION_BODY_PREFIX_SPACE = CodeBlock.of("return ") + private val RETURN_EXPRESSION_BODY_PREFIX_NBSP = CodeBlock.of("return·") private val THROW_EXPRESSION_BODY_PREFIX_SPACE = CodeBlock.of("throw ") private val THROW_EXPRESSION_BODY_PREFIX_NBSP = CodeBlock.of("throw·") diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt index 24396464b1..e33ba0bd92 100644 --- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt +++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt @@ -210,34 +210,6 @@ class FunSpecTest { val funSpec = FunSpec.builder("foo") .returns(String::class) .addStatement("val placeholder = 1") - .addStatement("return \"Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong\"") - .build() - val sb = StringBuilder() - CodeWriter(sb).use { - funSpec.emit( - codeWriter = it, - enclosingName = null, - implicitModifiers = setOf(KModifier.PUBLIC), - includeKdocTags = false - ) - } - assertThat(sb.toString()).isEqualTo( - """ - |public fun foo(): kotlin.String { - | val placeholder = 1 - | return "Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong" - |} - |""".trimMargin() - ) - } - - @Test fun returnsLongExpressions() { - val funSpec = FunSpec.builder("foo") - .returns(String::class) - .addStatement("val placeholder = 1") - .beginControlFlow("if (placeholder == 0)") - .addStatement(" return \"LooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpressionInControlFlow\"") - .endControlFlow() .addStatement("return \"Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong\"") .build() val sb = StringBuilder() @@ -253,9 +225,6 @@ class FunSpecTest { """ |public fun foo(): kotlin.String { | val placeholder = 1 - | if (placeholder == 0) { - | return "LooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpressionInControlFlow" - | } | return "Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong" |} |""".trimMargin() From 010689e008d396fa63290ad3142df8d6b9e15f97 Mon Sep 17 00:00:00 2001 From: zsub <49520432+zsqw123@users.noreply.github.com> Date: Wed, 1 Jun 2022 01:14:13 +0800 Subject: [PATCH 07/12] add comments --- kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt index e33ba0bd92..5a1a5c7323 100644 --- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt +++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt @@ -213,6 +213,8 @@ class FunSpecTest { .addStatement("return \"Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong\"") .build() val sb = StringBuilder() + // The FunSpec#toString columnLimit is Integer.MAX_VALUE, + // It will not cause problems with returns long expressions. CodeWriter(sb).use { funSpec.emit( codeWriter = it, From 5679344002ac68b722d6b75c1d430de735d0a1dc Mon Sep 17 00:00:00 2001 From: zsub <49520432+zsqw123@users.noreply.github.com> Date: Wed, 1 Jun 2022 01:16:27 +0800 Subject: [PATCH 08/12] Update kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt Co-authored-by: Egor Andreevich --- kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt index 5a1a5c7323..c9859a1b5c 100644 --- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt +++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt @@ -210,7 +210,7 @@ class FunSpecTest { val funSpec = FunSpec.builder("foo") .returns(String::class) .addStatement("val placeholder = 1") - .addStatement("return \"Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong\"") + .addStatement("return %S", "Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong") .build() val sb = StringBuilder() // The FunSpec#toString columnLimit is Integer.MAX_VALUE, From e75e343986cf50a098d424ca75ce03c85281ccbf Mon Sep 17 00:00:00 2001 From: zsub <49520432+zsqw123@users.noreply.github.com> Date: Wed, 1 Jun 2022 01:23:26 +0800 Subject: [PATCH 09/12] Update kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt Co-authored-by: Egor Andreevich --- kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt index ecb3844800..ec6cf74d26 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt @@ -247,8 +247,8 @@ public class FunSpec private constructor( private fun CodeBlock.returnsWithoutLinebreak(): CodeBlock { val originCodeBlockBuilder = toBuilder() - val returnWithSpace = "return " - val returnWithNbsp = "return·" + val returnWithSpace = RETURN_EXPRESSION_BODY_PREFIX_SPACE + val returnWithNbsp = RETURN_EXPRESSION_BODY_PREFIX_NBSP originCodeBlockBuilder.formatParts.clear() formatParts.mapTo(originCodeBlockBuilder.formatParts) { formatPart -> if (formatPart.startsWith(returnWithSpace)) { From f57439761411bdd35a4ebb64e676c790c063d41c Mon Sep 17 00:00:00 2001 From: zsub <49520432+zsqw123@users.noreply.github.com> Date: Wed, 1 Jun 2022 01:25:07 +0800 Subject: [PATCH 10/12] Update FunSpec.kt --- kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt index ec6cf74d26..abdee07b96 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt @@ -253,7 +253,9 @@ public class FunSpec private constructor( formatParts.mapTo(originCodeBlockBuilder.formatParts) { formatPart -> if (formatPart.startsWith(returnWithSpace)) { formatPart.replaceFirst(returnWithSpace, returnWithNbsp) - } else formatPart + } else { + formatPart + } } return originCodeBlockBuilder.build() } From d5e2f2dafd5751353d6caf11a048f229d76c77fe Mon Sep 17 00:00:00 2001 From: zsu Date: Wed, 1 Jun 2022 09:24:06 +0800 Subject: [PATCH 11/12] format if required --- .../java/com/squareup/kotlinpoet/FunSpec.kt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt index abdee07b96..28c5ca23e2 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt @@ -246,18 +246,17 @@ public class FunSpec private constructor( } private fun CodeBlock.returnsWithoutLinebreak(): CodeBlock { - val originCodeBlockBuilder = toBuilder() - val returnWithSpace = RETURN_EXPRESSION_BODY_PREFIX_SPACE - val returnWithNbsp = RETURN_EXPRESSION_BODY_PREFIX_NBSP - originCodeBlockBuilder.formatParts.clear() - formatParts.mapTo(originCodeBlockBuilder.formatParts) { formatPart -> + val returnWithSpace = RETURN_EXPRESSION_BODY_PREFIX_SPACE.formatParts[0] + val returnWithNbsp = RETURN_EXPRESSION_BODY_PREFIX_NBSP.formatParts[0] + var originCodeBlockBuilder: CodeBlock.Builder? = null + for ((i, formatPart) in formatParts.withIndex()) { if (formatPart.startsWith(returnWithSpace)) { - formatPart.replaceFirst(returnWithSpace, returnWithNbsp) - } else { - formatPart + val builder = originCodeBlockBuilder ?: toBuilder() + originCodeBlockBuilder = builder + builder.formatParts[i] = formatPart.replaceFirst(returnWithSpace, returnWithNbsp) } } - return originCodeBlockBuilder.build() + return originCodeBlockBuilder?.build() ?: this } override fun equals(other: Any?): Boolean { From 3fec9b00dca5d7664678c0045848ef40a2db54b9 Mon Sep 17 00:00:00 2001 From: zsu Date: Wed, 1 Jun 2022 09:25:59 +0800 Subject: [PATCH 12/12] spotless --- kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt index c9859a1b5c..a3fe63863e 100644 --- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt +++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FunSpecTest.kt @@ -213,7 +213,7 @@ class FunSpecTest { .addStatement("return %S", "Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong") .build() val sb = StringBuilder() - // The FunSpec#toString columnLimit is Integer.MAX_VALUE, + // The FunSpec#toString columnLimit is Integer.MAX_VALUE, // It will not cause problems with returns long expressions. CodeWriter(sb).use { funSpec.emit(