diff --git a/js/js.libraries/src/core/collections/ArrayList.kt b/js/js.libraries/src/core/collections/ArrayList.kt index 63bc17cc00a..1d7f21ba451 100644 --- a/js/js.libraries/src/core/collections/ArrayList.kt +++ b/js/js.libraries/src/core/collections/ArrayList.kt @@ -117,7 +117,7 @@ public open class ArrayList internal constructor(private var array: Array = array.copyOf() + override fun toArray(): Array = js("[]").slice.call(array) private fun rangeCheck(index: Int) = index.apply { diff --git a/libraries/stdlib/test/js/JsCollectionsTest.kt b/libraries/stdlib/test/js/JsCollectionsTest.kt index 3cf5fe2170e..8cea1d5591f 100644 --- a/libraries/stdlib/test/js/JsCollectionsTest.kt +++ b/libraries/stdlib/test/js/JsCollectionsTest.kt @@ -36,6 +36,13 @@ class JsCollectionsTest { snapshotDoesNotCreateView(arrayOf("first", "last"), { arrayListOf(*it) }) } + @Suppress("USELESS_CAST") + @Test fun asListHidesPrimitivenessOfArray() { + assertTrue(intArrayOf(1).asList().toTypedArray() as Any is Array<*>, "IntArray primitiveness leaks") + assertTrue(longArrayOf(1).asList().toTypedArray() as Any is Array<*>, "LongArray primitiveness leaks") + assertTrue(charArrayOf(' ').asList().toTypedArray() as Any is Array<*>, "CharArray primitiveness leaks") + } + @Test fun arrayListCapacity() { val list = ArrayList(20) list.ensureCapacity(100)