From 0db9326105ad74ba40000c30e3b7292de2de2edb Mon Sep 17 00:00:00 2001 From: Abduqodiri Qurbonzoda Date: Thu, 8 Sep 2022 14:34:38 +0000 Subject: [PATCH] Introduce a deprecated StringBuilder.append(CharArray, Int, Int) in Common #KT-52336 --- libraries/stdlib/api/js-v1/kotlin.text.kt | 4 ++++ libraries/stdlib/api/js/kotlin.text.kt | 4 ++++ .../jvm/test/text/StringBuilderJVMTest.kt | 20 +++++++++++++++++++ .../stdlib/src/kotlin/text/StringBuilder.kt | 6 ++++++ .../stdlib/test/text/StringBuilderTest.kt | 18 +++++++++++++++++ 5 files changed, 52 insertions(+) create mode 100644 libraries/stdlib/jvm/test/text/StringBuilderJVMTest.kt diff --git a/libraries/stdlib/api/js-v1/kotlin.text.kt b/libraries/stdlib/api/js-v1/kotlin.text.kt index 9728d39ad4a..f430e45028c 100644 --- a/libraries/stdlib/api/js-v1/kotlin.text.kt +++ b/libraries/stdlib/api/js-v1/kotlin.text.kt @@ -41,6 +41,10 @@ public fun kotlin.text.StringBuilder.append(vararg value: kotlin.Any?): kotlin.t public fun kotlin.text.StringBuilder.append(vararg value: kotlin.String?): kotlin.text.StringBuilder +@kotlin.Deprecated(level = DeprecationLevel.ERROR, message = "Use appendRange instead.", replaceWith = kotlin.ReplaceWith(expression = "this.appendRange(str, offset, offset + len)", imports = {})) +@kotlin.internal.InlineOnly +public inline fun kotlin.text.StringBuilder.append(str: kotlin.CharArray, offset: kotlin.Int, len: kotlin.Int): kotlin.text.StringBuilder + @kotlin.SinceKotlin(version = "1.4") @kotlin.internal.InlineOnly public inline fun kotlin.text.Appendable.appendLine(): kotlin.text.Appendable diff --git a/libraries/stdlib/api/js/kotlin.text.kt b/libraries/stdlib/api/js/kotlin.text.kt index 9728d39ad4a..f430e45028c 100644 --- a/libraries/stdlib/api/js/kotlin.text.kt +++ b/libraries/stdlib/api/js/kotlin.text.kt @@ -41,6 +41,10 @@ public fun kotlin.text.StringBuilder.append(vararg value: kotlin.Any?): kotlin.t public fun kotlin.text.StringBuilder.append(vararg value: kotlin.String?): kotlin.text.StringBuilder +@kotlin.Deprecated(level = DeprecationLevel.ERROR, message = "Use appendRange instead.", replaceWith = kotlin.ReplaceWith(expression = "this.appendRange(str, offset, offset + len)", imports = {})) +@kotlin.internal.InlineOnly +public inline fun kotlin.text.StringBuilder.append(str: kotlin.CharArray, offset: kotlin.Int, len: kotlin.Int): kotlin.text.StringBuilder + @kotlin.SinceKotlin(version = "1.4") @kotlin.internal.InlineOnly public inline fun kotlin.text.Appendable.appendLine(): kotlin.text.Appendable diff --git a/libraries/stdlib/jvm/test/text/StringBuilderJVMTest.kt b/libraries/stdlib/jvm/test/text/StringBuilderJVMTest.kt new file mode 100644 index 00000000000..6d898a2ce9f --- /dev/null +++ b/libraries/stdlib/jvm/test/text/StringBuilderJVMTest.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package test.text + +import kotlin.test.* + +class StringBuilderJVMTest { + // KT-52336 + // Tests that the deprecated Common StringBuilder.append(CharArray, Int, Int) does not affect JVM target. + @Test + fun deprecatedAppend() { + val chars = charArrayOf('a', 'b', 'c', 'd') + val sb = StringBuilder() + sb.append(chars, 1, 2) + assertEquals("bc", sb.toString()) + } +} \ No newline at end of file diff --git a/libraries/stdlib/src/kotlin/text/StringBuilder.kt b/libraries/stdlib/src/kotlin/text/StringBuilder.kt index a020f4acd2a..966d1db040d 100644 --- a/libraries/stdlib/src/kotlin/text/StringBuilder.kt +++ b/libraries/stdlib/src/kotlin/text/StringBuilder.kt @@ -437,6 +437,12 @@ public fun StringBuilder.append(vararg value: Any?): StringBuilder { return this } +// KT-52336 +@Deprecated("Use appendRange instead.", ReplaceWith("this.appendRange(str, offset, offset + len)"), level = DeprecationLevel.ERROR) +@kotlin.internal.InlineOnly +@Suppress("UNUSED_PARAMETER") +public inline fun StringBuilder.append(str: CharArray, offset: Int, len: Int): StringBuilder = throw NotImplementedError() + /** Appends a line feed character (`\n`) to this StringBuilder. */ @SinceKotlin("1.4") @kotlin.internal.InlineOnly diff --git a/libraries/stdlib/test/text/StringBuilderTest.kt b/libraries/stdlib/test/text/StringBuilderTest.kt index 8549df1deb9..8340b812027 100644 --- a/libraries/stdlib/test/text/StringBuilderTest.kt +++ b/libraries/stdlib/test/text/StringBuilderTest.kt @@ -5,6 +5,7 @@ package test.text +import test.testOnJvm import kotlin.random.Random import kotlin.test.* import kotlin.text.* @@ -32,6 +33,23 @@ class StringBuilderTest { }) } + // KT-52336 + @Test + @Suppress("DEPRECATION_ERROR") + fun deprecatedAppend() { + val chars = charArrayOf('a', 'b', 'c', 'd') + val sb = StringBuilder() + testOnJvm { + sb.append(chars, 1, 2) // Should fail after KT-15220 gets fixed + assertEquals("bc", sb.toString()) + } + if (sb.isEmpty()) { + assertFailsWith { + sb.append(chars, 1, 2) + } + } + } + @Test fun asCharSequence() { val original = "Some test string" val sb = StringBuilder(original)