From 05dcaccf09c12ab114e321e5f14f6ef0456281bd Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 23 Dec 2016 20:25:17 +0300 Subject: [PATCH] Do not require array extensions being reified to create new array. #KT-15377 --- js/js.libraries/src/core/collections.kt | 5 ++++- js/js.libraries/src/core/kotlin.kt | 2 +- libraries/stdlib/common/src/kotlin/CollectionsH.kt | 4 ++++ libraries/stdlib/src/kotlin/collections/Arrays.kt | 3 --- libraries/stdlib/src/kotlin/collections/ArraysJVM.kt | 3 +++ 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/js/js.libraries/src/core/collections.kt b/js/js.libraries/src/core/collections.kt index 5c9b8f328be..8113057e97b 100644 --- a/js/js.libraries/src/core/collections.kt +++ b/js/js.libraries/src/core/collections.kt @@ -18,8 +18,11 @@ package kotlin.collections import kotlin.comparisons.naturalOrder +/** Returns the array if it's not `null`, or an empty array otherwise. */ +public inline fun Array?.orEmpty(): Array = this ?: arrayOf() + @Suppress("NON_PUBLIC_CALL_FROM_PUBLIC_INLINE") -public inline fun Collection.toTypedArray(): Array = copyToArray(this) +public inline fun Collection.toTypedArray(): Array = copyToArray(this) @JsName("copyToArray") internal fun copyToArray(collection: Collection): Array { diff --git a/js/js.libraries/src/core/kotlin.kt b/js/js.libraries/src/core/kotlin.kt index bbfe454dfc3..4c01a504fcb 100644 --- a/js/js.libraries/src/core/kotlin.kt +++ b/js/js.libraries/src/core/kotlin.kt @@ -19,7 +19,7 @@ package kotlin /** * Returns an empty array of the specified type [T]. */ -public inline fun emptyArray(): Array = js("[]") +public inline fun emptyArray(): Array = js("[]") @library public fun arrayOf(vararg elements: T): Array = noImpl diff --git a/libraries/stdlib/common/src/kotlin/CollectionsH.kt b/libraries/stdlib/common/src/kotlin/CollectionsH.kt index 017c6951c81..ec705b72c6f 100644 --- a/libraries/stdlib/common/src/kotlin/CollectionsH.kt +++ b/libraries/stdlib/common/src/kotlin/CollectionsH.kt @@ -143,6 +143,10 @@ header abstract class AbstractMutableList : MutableList { // From collections.kt +/** Returns the array if it's not `null`, or an empty array otherwise. */ +header inline fun Array?.orEmpty(): Array + + header inline fun Collection.toTypedArray(): Array header fun > MutableList.sort(): Unit diff --git a/libraries/stdlib/src/kotlin/collections/Arrays.kt b/libraries/stdlib/src/kotlin/collections/Arrays.kt index b9369defe97..c5eae3322bb 100644 --- a/libraries/stdlib/src/kotlin/collections/Arrays.kt +++ b/libraries/stdlib/src/kotlin/collections/Arrays.kt @@ -21,9 +21,6 @@ package kotlin.collections -/** Returns the array if it's not `null`, or an empty array otherwise. */ -public inline fun Array?.orEmpty(): Array = this ?: arrayOf() - /** * Returns a single list of all elements from all arrays in the given array. diff --git a/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt b/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt index 589e7f2da45..3c27f040c81 100644 --- a/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt +++ b/libraries/stdlib/src/kotlin/collections/ArraysJVM.kt @@ -23,6 +23,9 @@ package kotlin.collections import java.nio.charset.Charset +/** Returns the array if it's not `null`, or an empty array otherwise. */ +public inline fun Array?.orEmpty(): Array = this ?: arrayOf() + /** * Converts the contents of this byte array to a string using the specified [charset]. */