Skip to content

Commit f20e350

Browse files
fzhinkinSpace Team
authored and
Space Team
committed
KT-72138 Stabilize experimental API for 2.2
- Stabilize kotlin-test's assertContains overload for OpenEndRange - Stabilize existing HexFormat API ^KT-72138 Merge-request: KT-MR-21098 Merged-by: Filipp Zhinkin <[email protected]>
1 parent c7251ac commit f20e350

File tree

4 files changed

+56
-68
lines changed

4 files changed

+56
-68
lines changed

libraries/kotlin.test/common/src/main/kotlin/kotlin/test/Assertions.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,8 @@ public fun <T : Comparable<T>> assertContains(range: ClosedRange<T>, value: T, m
280280
}
281281

282282
/** Asserts that the [range] contains the specified [value], with an optional [message]. */
283-
@SinceKotlin("1.7")
284-
@ExperimentalStdlibApi
283+
@SinceKotlin("2.2")
284+
@WasExperimental(ExperimentalStdlibApi::class)
285285
public fun <T : Comparable<T>> assertContains(range: OpenEndRange<T>, value: T, message: String? = null) {
286286
assertRangeContains(range, value, message, OpenEndRange<T>::contains)
287287
}

libraries/stdlib/src/kotlin/text/HexExtensions.kt

+27-39
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ private const val UPPER_CASE_HEX_DIGITS = "0123456789ABCDEF"
1717
* of each Byte value makes it possible to access the table only once per Byte.
1818
* This noticeably improves performance, especially for large ByteArray's.
1919
*/
20-
@ExperimentalStdlibApi
2120
internal val BYTE_TO_LOWER_CASE_HEX_DIGITS = IntArray(256) {
2221
(LOWER_CASE_HEX_DIGITS[(it shr 4)].code shl 8) or LOWER_CASE_HEX_DIGITS[(it and 0xF)].code
2322
}
@@ -79,8 +78,8 @@ private val HEX_DIGITS_TO_LONG_DECIMAL = LongArray(256) { -1 }.apply {
7978
*
8079
* @sample samples.text.HexFormats.Extensions.byteArrayToHexString
8180
*/
82-
@ExperimentalStdlibApi
83-
@SinceKotlin("1.9")
81+
@WasExperimental(ExperimentalStdlibApi::class)
82+
@SinceKotlin("2.2")
8483
public fun ByteArray.toHexString(format: HexFormat = HexFormat.Default): String = toHexString(0, size, format)
8584

8685
/**
@@ -108,8 +107,8 @@ public fun ByteArray.toHexString(format: HexFormat = HexFormat.Default): String
108107
*
109108
* @sample samples.text.HexFormats.Extensions.byteArrayToHexString
110109
*/
111-
@ExperimentalStdlibApi
112-
@SinceKotlin("1.9")
110+
@WasExperimental(ExperimentalStdlibApi::class)
111+
@SinceKotlin("2.2")
113112
public fun ByteArray.toHexString(
114113
startIndex: Int = 0,
115114
endIndex: Int = size,
@@ -132,7 +131,6 @@ public fun ByteArray.toHexString(
132131
return toHexStringSlowPath(startIndex, endIndex, bytesFormat, byteToDigits)
133132
}
134133

135-
@ExperimentalStdlibApi
136134
private fun ByteArray.toHexStringNoLineAndGroupSeparator(
137135
startIndex: Int,
138136
endIndex: Int,
@@ -147,7 +145,6 @@ private fun ByteArray.toHexStringNoLineAndGroupSeparator(
147145
return toHexStringNoLineAndGroupSeparatorSlowPath(startIndex, endIndex, bytesFormat, byteToDigits)
148146
}
149147

150-
@ExperimentalStdlibApi
151148
private fun ByteArray.toHexStringShortByteSeparatorNoPrefixAndSuffix(
152149
startIndex: Int,
153150
endIndex: Int,
@@ -180,7 +177,6 @@ private fun ByteArray.toHexStringShortByteSeparatorNoPrefixAndSuffix(
180177
}
181178
}
182179

183-
@ExperimentalStdlibApi
184180
private fun ByteArray.toHexStringNoLineAndGroupSeparatorSlowPath(
185181
startIndex: Int,
186182
endIndex: Int,
@@ -209,7 +205,6 @@ private fun ByteArray.toHexStringNoLineAndGroupSeparatorSlowPath(
209205
return charArray.concatToString()
210206
}
211207

212-
@ExperimentalStdlibApi
213208
private fun ByteArray.toHexStringSlowPath(
214209
startIndex: Int,
215210
endIndex: Int,
@@ -362,8 +357,8 @@ private fun checkFormatLength(formatLength: Long): Int {
362357
*
363358
* @sample samples.text.HexFormats.Extensions.hexToByteArray
364359
*/
365-
@ExperimentalStdlibApi
366-
@SinceKotlin("1.9")
360+
@WasExperimental(ExperimentalStdlibApi::class)
361+
@SinceKotlin("2.2")
367362
public fun String.hexToByteArray(format: HexFormat = HexFormat.Default): ByteArray = hexToByteArray(0, length, format)
368363

369364
/**
@@ -387,7 +382,7 @@ public fun String.hexToByteArray(format: HexFormat = HexFormat.Default): ByteArr
387382
* @throws IllegalArgumentException when `startIndex > endIndex`.
388383
* @throws IllegalArgumentException if the substring does not conform to the specified [format].
389384
*/
390-
@ExperimentalStdlibApi
385+
//@ExperimentalStdlibApi
391386
//@SinceKotlin("1.9")
392387
private fun String.hexToByteArray(
393388
startIndex: Int = 0,
@@ -410,7 +405,6 @@ private fun String.hexToByteArray(
410405
return hexToByteArraySlowPath(startIndex, endIndex, bytesFormat)
411406
}
412407

413-
@ExperimentalStdlibApi
414408
private fun String.hexToByteArrayNoLineAndGroupSeparator(
415409
startIndex: Int,
416410
endIndex: Int,
@@ -424,7 +418,6 @@ private fun String.hexToByteArrayNoLineAndGroupSeparator(
424418
return hexToByteArrayNoLineAndGroupSeparatorSlowPath(startIndex, endIndex, bytesFormat)
425419
}
426420

427-
@ExperimentalStdlibApi
428421
private fun String.hexToByteArrayShortByteSeparatorNoPrefixAndSuffix(
429422
startIndex: Int,
430423
endIndex: Int,
@@ -463,7 +456,6 @@ private fun String.hexToByteArrayShortByteSeparatorNoPrefixAndSuffix(
463456
}
464457
}
465458

466-
@ExperimentalStdlibApi
467459
private fun String.hexToByteArrayNoLineAndGroupSeparatorSlowPath(
468460
startIndex: Int,
469461
endIndex: Int,
@@ -499,7 +491,6 @@ private fun String.hexToByteArrayNoLineAndGroupSeparatorSlowPath(
499491
return byteArray
500492
}
501493

502-
@ExperimentalStdlibApi
503494
private fun String.hexToByteArraySlowPath(
504495
startIndex: Int,
505496
endIndex: Int,
@@ -660,8 +651,8 @@ private fun String.checkNewLineAt(index: Int, endIndex: Int): Int {
660651
*
661652
* @sample samples.text.HexFormats.Extensions.byteToHexString
662653
*/
663-
@ExperimentalStdlibApi
664-
@SinceKotlin("1.9")
654+
@WasExperimental(ExperimentalStdlibApi::class)
655+
@SinceKotlin("2.2")
665656
public fun Byte.toHexString(format: HexFormat = HexFormat.Default): String {
666657
val digits = if (format.upperCase) UPPER_CASE_HEX_DIGITS else LOWER_CASE_HEX_DIGITS
667658
val numberFormat = format.number
@@ -703,8 +694,8 @@ public fun Byte.toHexString(format: HexFormat = HexFormat.Default): String {
703694
*
704695
* @sample samples.text.HexFormats.Extensions.hexToByte
705696
*/
706-
@ExperimentalStdlibApi
707-
@SinceKotlin("1.9")
697+
@WasExperimental(ExperimentalStdlibApi::class)
698+
@SinceKotlin("2.2")
708699
public fun String.hexToByte(format: HexFormat = HexFormat.Default): Byte = hexToByte(0, length, format)
709700

710701
/**
@@ -731,7 +722,7 @@ public fun String.hexToByte(format: HexFormat = HexFormat.Default): Byte = hexTo
731722
* @throws IllegalArgumentException if the substring does not conform to the specified [format], or if the hexadecimal
732723
* digits represent a value that does not fit into a `Byte`.
733724
*/
734-
@ExperimentalStdlibApi
725+
//@ExperimentalStdlibApi
735726
//@SinceKotlin("1.9")
736727
private fun String.hexToByte(startIndex: Int = 0, endIndex: Int = length, format: HexFormat = HexFormat.Default): Byte =
737728
hexToIntImpl(startIndex, endIndex, format, typeHexLength = 2).toByte()
@@ -758,8 +749,8 @@ private fun String.hexToByte(startIndex: Int = 0, endIndex: Int = length, format
758749
*
759750
* @sample samples.text.HexFormats.Extensions.shortToHexString
760751
*/
761-
@ExperimentalStdlibApi
762-
@SinceKotlin("1.9")
752+
@WasExperimental(ExperimentalStdlibApi::class)
753+
@SinceKotlin("2.2")
763754
public fun Short.toHexString(format: HexFormat = HexFormat.Default): String {
764755
val digits = if (format.upperCase) UPPER_CASE_HEX_DIGITS else LOWER_CASE_HEX_DIGITS
765756
val numberFormat = format.number
@@ -803,8 +794,8 @@ public fun Short.toHexString(format: HexFormat = HexFormat.Default): String {
803794
*
804795
* @sample samples.text.HexFormats.Extensions.hexToShort
805796
*/
806-
@ExperimentalStdlibApi
807-
@SinceKotlin("1.9")
797+
@WasExperimental(ExperimentalStdlibApi::class)
798+
@SinceKotlin("2.2")
808799
public fun String.hexToShort(format: HexFormat = HexFormat.Default): Short = hexToShort(0, length, format)
809800

810801
/**
@@ -831,7 +822,7 @@ public fun String.hexToShort(format: HexFormat = HexFormat.Default): Short = hex
831822
* @throws IllegalArgumentException if the substring does not conform to the specified [format], or if the hexadecimal
832823
* digits represent a value that does not fit into a `Short`.
833824
*/
834-
@ExperimentalStdlibApi
825+
//@ExperimentalStdlibApi
835826
//@SinceKotlin("1.9")
836827
private fun String.hexToShort(startIndex: Int = 0, endIndex: Int = length, format: HexFormat = HexFormat.Default): Short =
837828
hexToIntImpl(startIndex, endIndex, format, typeHexLength = 4).toShort()
@@ -858,8 +849,8 @@ private fun String.hexToShort(startIndex: Int = 0, endIndex: Int = length, forma
858849
*
859850
* @sample samples.text.HexFormats.Extensions.intToHexString
860851
*/
861-
@ExperimentalStdlibApi
862-
@SinceKotlin("1.9")
852+
@WasExperimental(ExperimentalStdlibApi::class)
853+
@SinceKotlin("2.2")
863854
public fun Int.toHexString(format: HexFormat = HexFormat.Default): String {
864855
val digits = if (format.upperCase) UPPER_CASE_HEX_DIGITS else LOWER_CASE_HEX_DIGITS
865856
val numberFormat = format.number
@@ -907,8 +898,8 @@ public fun Int.toHexString(format: HexFormat = HexFormat.Default): String {
907898
*
908899
* @sample samples.text.HexFormats.Extensions.hexToInt
909900
*/
910-
@ExperimentalStdlibApi
911-
@SinceKotlin("1.9")
901+
@WasExperimental(ExperimentalStdlibApi::class)
902+
@SinceKotlin("2.2")
912903
public fun String.hexToInt(format: HexFormat = HexFormat.Default): Int = hexToInt(0, length, format)
913904

914905
/**
@@ -935,7 +926,7 @@ public fun String.hexToInt(format: HexFormat = HexFormat.Default): Int = hexToIn
935926
* @throws IllegalArgumentException if the substring does not conform to the specified [format], or if the hexadecimal
936927
* digits represent a value that does not fit into an `Int`.
937928
*/
938-
@ExperimentalStdlibApi
929+
//@ExperimentalStdlibApi
939930
//@SinceKotlin("1.9")
940931
internal fun String.hexToInt(startIndex: Int = 0, endIndex: Int = length, format: HexFormat = HexFormat.Default): Int =
941932
hexToIntImpl(startIndex, endIndex, format, typeHexLength = 8)
@@ -962,8 +953,8 @@ internal fun String.hexToInt(startIndex: Int = 0, endIndex: Int = length, format
962953
*
963954
* @sample samples.text.HexFormats.Extensions.longToHexString
964955
*/
965-
@ExperimentalStdlibApi
966-
@SinceKotlin("1.9")
956+
@WasExperimental(ExperimentalStdlibApi::class)
957+
@SinceKotlin("2.2")
967958
public fun Long.toHexString(format: HexFormat = HexFormat.Default): String {
968959
val digits = if (format.upperCase) UPPER_CASE_HEX_DIGITS else LOWER_CASE_HEX_DIGITS
969960
val numberFormat = format.number
@@ -1019,8 +1010,8 @@ public fun Long.toHexString(format: HexFormat = HexFormat.Default): String {
10191010
*
10201011
* @sample samples.text.HexFormats.Extensions.hexToLong
10211012
*/
1022-
@ExperimentalStdlibApi
1023-
@SinceKotlin("1.9")
1013+
@WasExperimental(ExperimentalStdlibApi::class)
1014+
@SinceKotlin("2.2")
10241015
public fun String.hexToLong(format: HexFormat = HexFormat.Default): Long = hexToLong(0, length, format)
10251016

10261017
/**
@@ -1047,14 +1038,13 @@ public fun String.hexToLong(format: HexFormat = HexFormat.Default): Long = hexTo
10471038
* @throws IllegalArgumentException if the substring does not conform to the specified [format], or if the hexadecimal
10481039
* digits represent a value that does not fit into a `Long`.
10491040
*/
1050-
@ExperimentalStdlibApi
1041+
//@ExperimentalStdlibApi
10511042
//@SinceKotlin("1.9")
10521043
internal fun String.hexToLong(startIndex: Int = 0, endIndex: Int = length, format: HexFormat = HexFormat.Default): Long =
10531044
hexToLongImpl(startIndex, endIndex, format, typeHexLength = 16)
10541045

10551046
// -------------------------- private format and parse functions --------------------------
10561047

1057-
@ExperimentalStdlibApi
10581048
private fun Long.toHexStringImpl(numberFormat: HexFormat.NumberHexFormat, digits: String, bits: Int): String {
10591049
require(bits and 0x3 == 0)
10601050

@@ -1102,7 +1092,6 @@ private fun String.toCharArrayIfNotEmpty(destination: CharArray, destinationOffs
11021092
return destinationOffset + length
11031093
}
11041094

1105-
@ExperimentalStdlibApi
11061095
private fun String.hexToIntImpl(startIndex: Int, endIndex: Int, format: HexFormat, typeHexLength: Int): Int {
11071096
AbstractList.checkBoundsIndexes(startIndex, endIndex, length)
11081097

@@ -1120,7 +1109,6 @@ private fun String.hexToIntImpl(startIndex: Int, endIndex: Int, format: HexForma
11201109
return parseInt(startIndex + prefix.length, endIndex - suffix.length)
11211110
}
11221111

1123-
@ExperimentalStdlibApi
11241112
private fun String.hexToLongImpl(startIndex: Int, endIndex: Int, format: HexFormat, typeHexLength: Int): Long {
11251113
AbstractList.checkBoundsIndexes(startIndex, endIndex, length)
11261114

libraries/stdlib/src/kotlin/text/HexFormat.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ import kotlin.internal.InlineOnly
3232
* @see Int.toHexString
3333
* @see String.hexToInt
3434
*/
35-
@ExperimentalStdlibApi
36-
@SinceKotlin("1.9")
35+
@WasExperimental(ExperimentalStdlibApi::class)
36+
@SinceKotlin("2.2")
3737
public class HexFormat internal constructor(
3838
/**
3939
* Specifies whether upper-case hexadecimal digits should be used for formatting, `false` by default.
@@ -830,8 +830,8 @@ public class HexFormat internal constructor(
830830
*
831831
* @sample samples.text.HexFormats.HexFormatClass.hexFormatBuilderFunction
832832
*/
833-
@ExperimentalStdlibApi
834-
@SinceKotlin("1.9")
833+
@WasExperimental(ExperimentalStdlibApi::class)
834+
@SinceKotlin("2.2")
835835
@InlineOnly
836836
public inline fun HexFormat(builderAction: HexFormat.Builder.() -> Unit): HexFormat {
837837
return HexFormat.Builder().apply(builderAction).build()
@@ -841,4 +841,4 @@ public inline fun HexFormat(builderAction: HexFormat.Builder.() -> Unit): HexFor
841841

842842
private fun String.isCaseSensitive(): Boolean {
843843
return this.any { it >= '\u0080' || it.isLetter() }
844-
}
844+
}

0 commit comments

Comments
 (0)