1 /* 2 * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3 */ 4 5 package kotlinx.serialization.internal 6 7 import kotlinx.serialization.* 8 import kotlin.reflect.* 9 10 @Suppress("NOTHING_TO_INLINE") getCheckednull11internal actual inline fun <T> Array<T>.getChecked(index: Int): T { 12 return get(index) 13 } 14 15 @Suppress("NOTHING_TO_INLINE") getCheckednull16internal actual inline fun BooleanArray.getChecked(index: Int): Boolean { 17 return get(index) 18 } 19 platformSpecificSerializerNotRegisterednull20internal actual fun KClass<*>.platformSpecificSerializerNotRegistered(): Nothing { 21 throw SerializationException( 22 notRegisteredMessage() + 23 "To get enum serializer on Kotlin/Native, it should be annotated with @Serializable annotation.\n" + 24 "To get interface serializer on Kotlin/Native, use PolymorphicSerializer() constructor function.\n" 25 ) 26 } 27 28 @Suppress( 29 "UNCHECKED_CAST", 30 "DEPRECATION_ERROR" 31 ) 32 @OptIn(ExperimentalAssociatedObjects::class) constructSerializerForGivenTypeArgsnull33internal actual fun <T : Any> KClass<T>.constructSerializerForGivenTypeArgs(vararg args: KSerializer<Any?>): KSerializer<T>? = 34 when (val assocObject = findAssociatedObject<SerializableWith>()) { 35 is KSerializer<*> -> assocObject as KSerializer<T> 36 is kotlinx.serialization.internal.SerializerFactory -> assocObject.serializer(*args) as KSerializer<T> 37 else -> null 38 } 39 40 @Suppress("DEPRECATION_ERROR") compiledSerializerImplnull41internal actual fun <T : Any> KClass<T>.compiledSerializerImpl(): KSerializer<T>? = 42 this.constructSerializerForGivenTypeArgs() 43 44 45 internal actual fun <T> createCache(factory: (KClass<*>) -> KSerializer<T>?): SerializerCache<T> { 46 return object: SerializerCache<T> { 47 override fun get(key: KClass<Any>): KSerializer<T>? { 48 return factory(key) 49 } 50 } 51 } 52 createParametrizedCachenull53internal actual fun <T> createParametrizedCache(factory: (KClass<Any>, List<KType>) -> KSerializer<T>?): ParametrizedSerializerCache<T> { 54 return object: ParametrizedSerializerCache<T> { 55 override fun get(key: KClass<Any>, types: List<KType>): Result<KSerializer<T>?> { 56 return kotlin.runCatching { factory(key, types) } 57 } 58 } 59 } 60 toNativeArrayImplnull61internal actual fun <T : Any, E : T?> ArrayList<E>.toNativeArrayImpl(eClass: KClass<T>): Array<E> { 62 val result = arrayOfAnyNulls<E>(size) 63 var index = 0 64 for (element in this) result[index++] = element 65 @Suppress("USELESS_CAST") 66 return result as Array<E> 67 } 68 69 @Suppress("UNCHECKED_CAST") arrayOfAnyNullsnull70private fun <T> arrayOfAnyNulls(size: Int): Array<T> = arrayOfNulls<Any>(size) as Array<T> 71 72 internal actual fun isReferenceArray(rootClass: KClass<Any>): Boolean = rootClass == Array::class 73