From f6d8c3d8599957dc2f5c843d0e1e7243e84d4cb9 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Thu, 15 Feb 2024 01:02:21 +0100 Subject: Turns out value boxing is regretably still a thing --- src/main/java/at/hannibal2/skyhanni/utils/const/Const.kt | 10 +++------- .../java/at/hannibal2/skyhanni/test/const/TestConst.kt | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 src/test/java/at/hannibal2/skyhanni/test/const/TestConst.kt diff --git a/src/main/java/at/hannibal2/skyhanni/utils/const/Const.kt b/src/main/java/at/hannibal2/skyhanni/utils/const/Const.kt index 30d8ef0c6..26e568431 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/const/Const.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/const/Const.kt @@ -80,9 +80,7 @@ inline fun Const.tryCast(): Const? = (unsafeMutable as? * mutable as long. The caller may never cast the returned instance to [MutableList]. */ fun Const>.liftList(): List> { - @Suppress("UNCHECKED_CAST") - // This cast is valid since List and List> are always the same at runtime, guaranteed by `@JvmInline` - return unsafeMutable as List> + return unsafeMutable.map(Const.Companion::newUnchecked) } /** @@ -90,8 +88,6 @@ fun Const>.liftList(): List> { * either constructed directly as a [List] or if it originally comes from a [MutableList], mutations operations on this * instance are never used. */ -fun List>.unliftList(): Const> { - @Suppress("UNCHECKED_CAST") - // This cast is valid since List and List> are always the same at runtime, guaranteed by `@JvmInline` - return Const.newUnchecked(this as List) +fun List>.liftConst(): Const> { + return Const.newUnchecked(this.map { it.unsafeMutable }) } diff --git a/src/test/java/at/hannibal2/skyhanni/test/const/TestConst.kt b/src/test/java/at/hannibal2/skyhanni/test/const/TestConst.kt new file mode 100644 index 000000000..3826e09fd --- /dev/null +++ b/src/test/java/at/hannibal2/skyhanni/test/const/TestConst.kt @@ -0,0 +1,15 @@ +package at.hannibal2.skyhanni.test.const + +import at.hannibal2.skyhanni.utils.const.Const +import at.hannibal2.skyhanni.utils.const.liftConst +import at.hannibal2.skyhanni.utils.const.unconst +import org.junit.jupiter.api.Test + +class TestConst { + @Test + fun testConstListLayout() { + val list = listOf(Const.newUnchecked("")) + val liftedList = list.liftConst() + require(liftedList.unsafeMap { it[0] }.unconst == "") + } +} -- cgit