Also support intrinsification for SerializersModule.serializer<T>()
method that fallbacks to module.getContextual().
This commit is contained in:
@@ -298,7 +298,7 @@ class ReifiedTypeInliner<KT : KotlinTypeMarker>(
|
||||
return true
|
||||
}
|
||||
|
||||
inline private fun rewriteNextTypeInsn(
|
||||
private inline fun rewriteNextTypeInsn(
|
||||
marker: MethodInsnNode,
|
||||
expectedNextOpcode: Int,
|
||||
rewrite: (AbstractInsnNode) -> Boolean
|
||||
|
||||
@@ -5,6 +5,10 @@ plugins {
|
||||
id("jps-compatible")
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
embedded(project(":kotlinx-serialization-compiler-plugin.common"))
|
||||
embedded(project(":kotlinx-serialization-compiler-plugin.k1"))
|
||||
|
||||
+148
-52
@@ -7,10 +7,7 @@ package org.jetbrains.kotlinx.serialization.compiler.backend.ir
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.extensions.FirIncompatiblePluginAPI
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.backend.jvm.codegen.BlockInfo
|
||||
import org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen
|
||||
import org.jetbrains.kotlin.backend.jvm.codegen.MaterialValue
|
||||
import org.jetbrains.kotlin.backend.jvm.codegen.PromisedValue
|
||||
import org.jetbrains.kotlin.backend.jvm.codegen.*
|
||||
import org.jetbrains.kotlin.backend.jvm.intrinsics.IntrinsicMethod
|
||||
import org.jetbrains.kotlin.backend.jvm.ir.representativeUpperBound
|
||||
import org.jetbrains.kotlin.backend.jvm.mapping.mapClass
|
||||
@@ -50,20 +47,41 @@ import org.jetbrains.kotlinx.serialization.compiler.resolve.getClassFromSerializ
|
||||
import org.jetbrains.org.objectweb.asm.Opcodes
|
||||
import org.jetbrains.org.objectweb.asm.Type
|
||||
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
||||
import org.jetbrains.org.objectweb.asm.tree.AbstractInsnNode
|
||||
import org.jetbrains.org.objectweb.asm.tree.InsnList
|
||||
import org.jetbrains.org.objectweb.asm.tree.MethodInsnNode
|
||||
import org.jetbrains.org.objectweb.asm.tree.VarInsnNode
|
||||
|
||||
class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContext) : SerializationBaseContext {
|
||||
companion object {
|
||||
fun isSerializerReifiedFunction(targetFunction: IrFunction): Boolean =
|
||||
targetFunction.fqNameWhenAvailable?.asString() == "kotlinx.serialization.SerializersKt.serializer"
|
||||
&& targetFunction.valueParameters.isEmpty()
|
||||
&& targetFunction.typeParameters.size == 1
|
||||
&& targetFunction.dispatchReceiverParameter == null
|
||||
&& targetFunction.extensionReceiverParameter == null
|
||||
sealed class IntrinsicType(val methodDescriptor: String) {
|
||||
object Simple : IntrinsicType(stubCallDescriptor)
|
||||
|
||||
class WithModule(val storedIndex: Int) :
|
||||
IntrinsicType(stubCallDescriptorWithModule) {
|
||||
}
|
||||
}
|
||||
|
||||
object ReifiedSerializerMethod : IntrinsicMethod() {
|
||||
companion object {
|
||||
fun intrinsicForMethod(method: IrFunction): IntrinsicMethod? {
|
||||
if (method.fqNameWhenAvailable?.asString() != "kotlinx.serialization.SerializersKt.serializer"
|
||||
|| method.dispatchReceiverParameter != null
|
||||
|| method.typeParameters.size != 1
|
||||
|| method.valueParameters.isNotEmpty()
|
||||
) return null
|
||||
return ReifiedSerializerMethod(method.extensionReceiverParameter != null)
|
||||
}
|
||||
|
||||
val serializersModuleType: Type = Type.getObjectType("kotlinx/serialization/modules/SerializersModule")
|
||||
|
||||
val stubCallDescriptorWithModule = "(${serializersModuleType.descriptor})${kSerializerType.descriptor}"
|
||||
val stubCallDescriptor = "()${kSerializerType.descriptor}"
|
||||
const val serializersKtInternalName = "kotlinx/serialization/SerializersKt"
|
||||
const val callMethodName = "serializer"
|
||||
const val noCompiledSerializerMethodName = "noCompiledSerializer"
|
||||
|
||||
}
|
||||
|
||||
class ReifiedSerializerMethod(private val withModule: Boolean) : IntrinsicMethod() {
|
||||
override fun invoke(
|
||||
expression: IrFunctionAccessExpression,
|
||||
codegen: ExpressionCodegen,
|
||||
@@ -71,10 +89,21 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
): PromisedValue {
|
||||
with(codegen) {
|
||||
val argument = expression.getTypeArgument(0)!!
|
||||
val intrinsicType = if (withModule) {
|
||||
val moduleReceiver = expression.extensionReceiver!!
|
||||
val materialVal = moduleReceiver.accept(codegen, data).materializedAt(moduleReceiver.type)
|
||||
val storedIndex = frameMap.enterTemp(materialVal.type)
|
||||
mv.store(storedIndex, materialVal.type)
|
||||
IntrinsicType.WithModule(storedIndex)
|
||||
} else IntrinsicType.Simple
|
||||
SerializationJvmIrIntrinsicSupport(codegen.context).generateSerializerForType(
|
||||
argument,
|
||||
mv
|
||||
mv,
|
||||
intrinsicType
|
||||
)
|
||||
if (withModule) {
|
||||
frameMap.leaveTemp(serializersModuleType)
|
||||
}
|
||||
return MaterialValue(codegen, kSerializerType, expression.type)
|
||||
}
|
||||
}
|
||||
@@ -115,17 +144,50 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
instructions: InsnList,
|
||||
type: IrType,
|
||||
): Int {
|
||||
val intrinsicType = getOperationTypeFromInsn(insn) ?: return -1
|
||||
val newMethodNode = newMethodNodeWithCorrectStackSize {
|
||||
generateSerializerForType(type, it)
|
||||
generateSerializerForType(type, it, intrinsicType)
|
||||
}
|
||||
|
||||
instructions.remove(insn.next)
|
||||
when (intrinsicType) {
|
||||
is IntrinsicType.Simple -> instructions.remove(insn.next)
|
||||
is IntrinsicType.WithModule -> {
|
||||
instructions.remove(insn.next.next)
|
||||
instructions.remove(insn.next)
|
||||
}
|
||||
}
|
||||
instructions.insert(insn, newMethodNode.instructions)
|
||||
|
||||
return newMethodNode.maxStack
|
||||
}
|
||||
|
||||
private fun InstructionAdapter.putReifyMarkerIfNeeded(type: KotlinTypeMarker): Boolean =
|
||||
private fun getOperationTypeFromInsn(insn: MethodInsnNode): IntrinsicType? {
|
||||
// insn is reification marker
|
||||
// insn.next is serializer() OR load(module)
|
||||
// insn.next.next is serializer(module) if insn.next was load(module)
|
||||
val mayBeSerializerModuleCall: AbstractInsnNode? = insn.next?.next
|
||||
val next = insn.next ?: error("Reification marker cannot be the last instruction in method")
|
||||
if (
|
||||
mayBeSerializerModuleCall is MethodInsnNode
|
||||
&& mayBeSerializerModuleCall.opcode == Opcodes.INVOKESTATIC
|
||||
&& mayBeSerializerModuleCall.owner == serializersKtInternalName
|
||||
&& mayBeSerializerModuleCall.name == callMethodName
|
||||
&& mayBeSerializerModuleCall.desc == stubCallDescriptorWithModule
|
||||
) {
|
||||
val loadIns = next as? VarInsnNode ?: error("Expected load(SerializersModule) instruction")
|
||||
// It's possible to also check opcode, but that doesn't seem necessary
|
||||
return IntrinsicType.WithModule(loadIns.`var`)
|
||||
} else if (next is MethodInsnNode
|
||||
&& next.opcode == Opcodes.INVOKESTATIC
|
||||
&& next.owner == serializersKtInternalName
|
||||
&& next.name == callMethodName
|
||||
&& next.desc == stubCallDescriptor
|
||||
) {
|
||||
return IntrinsicType.Simple
|
||||
} else return null // May be reification marker from other plugin
|
||||
}
|
||||
|
||||
private fun InstructionAdapter.putReifyMarkerIfNeeded(type: KotlinTypeMarker, intrinsicType: IntrinsicType): Boolean =
|
||||
with(typeSystemContext) {
|
||||
val typeDescriptor = type.typeConstructor().getTypeParameterClassifier()
|
||||
if (typeDescriptor != null) { // need further reification
|
||||
@@ -136,7 +198,10 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
this@putReifyMarkerIfNeeded,
|
||||
typeSystemContext
|
||||
)
|
||||
invokestatic("kotlinx/serialization/SerializersKt", "serializer", "()Lkotlinx/serialization/KSerializer;", false)
|
||||
if (intrinsicType is IntrinsicType.WithModule) {
|
||||
load(intrinsicType.storedIndex, serializersModuleType)
|
||||
}
|
||||
invokestatic(serializersKtInternalName, callMethodName, intrinsicType.methodDescriptor, false)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@@ -144,10 +209,11 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
|
||||
fun generateSerializerForType(
|
||||
type: IrType,
|
||||
adapter: InstructionAdapter
|
||||
adapter: InstructionAdapter,
|
||||
intrinsicType: IntrinsicType
|
||||
) {
|
||||
with(typeSystemContext) {
|
||||
if (adapter.putReifyMarkerIfNeeded(type)) return
|
||||
if (adapter.putReifyMarkerIfNeeded(type, intrinsicType)) return
|
||||
val typeDescriptor: IrClass = type.classOrNull!!.owner
|
||||
|
||||
val support = this@SerializationJvmIrIntrinsicSupport
|
||||
@@ -158,7 +224,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
val companionType = if (typeDescriptor.isSerializableObject) typeDescriptor else typeDescriptor.companionObject()!!
|
||||
support.instantiateObject(adapter, companionType.symbol)
|
||||
val args = type.getArguments().map { it.getType() }
|
||||
args.forEach { generateSerializerForType(it, adapter) }
|
||||
args.forEach { generateSerializerForType(it, adapter, intrinsicType) }
|
||||
val signature = kSerializerType.descriptor.repeat(args.size)
|
||||
adapter.invokevirtual(
|
||||
typeMapper.mapClass(companionType).internalName,
|
||||
@@ -172,9 +238,10 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
support.stackValueSerializerInstance(
|
||||
type,
|
||||
serializer,
|
||||
adapter
|
||||
adapter,
|
||||
intrinsicType
|
||||
) { genericArg ->
|
||||
assert(putReifyMarkerIfNeeded(genericArg))
|
||||
assert(putReifyMarkerIfNeeded(genericArg, intrinsicType))
|
||||
}
|
||||
if (type.isMarkedNullable()) adapter.wrapStackValueIntoNullableSerializer()
|
||||
}
|
||||
@@ -183,30 +250,31 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
|
||||
private fun stackValueSerializerInstance(
|
||||
kType: IrType, maybeSerializer: IrClassSymbol?,
|
||||
iv: InstructionAdapter?,
|
||||
iv: InstructionAdapter,
|
||||
intrinsicType: IntrinsicType,
|
||||
genericIndex: Int? = null,
|
||||
genericSerializerFieldGetter: (InstructionAdapter.(IrType) -> Unit)? = null,
|
||||
): Boolean = with(typeSystemContext) {
|
||||
if (maybeSerializer == null && genericIndex != null) {
|
||||
// get field from serializer object
|
||||
iv?.run { genericSerializerFieldGetter?.invoke(this, kType) }
|
||||
genericSerializerFieldGetter?.invoke(iv, kType)
|
||||
return true
|
||||
}
|
||||
val serializer = maybeSerializer ?: run {
|
||||
iv?.apply {
|
||||
if (maybeSerializer == null && intrinsicType == IntrinsicType.Simple) {
|
||||
iv.apply {
|
||||
aconst(kType.classFqName!!.asString())
|
||||
invokestatic(
|
||||
"kotlinx/serialization/SerializersKt",
|
||||
"noCompiledSerializer",
|
||||
"(Ljava/lang/String;)Lkotlinx/serialization/KSerializer;",
|
||||
serializersKtInternalName,
|
||||
noCompiledSerializerMethodName,
|
||||
"(Ljava/lang/String;)${kSerializerType.descriptor}",
|
||||
false
|
||||
)
|
||||
}
|
||||
return false
|
||||
}
|
||||
if (serializer.owner.isObject) {
|
||||
if (maybeSerializer != null && maybeSerializer.owner.isObject) {
|
||||
// singleton serializer -- just get it
|
||||
iv?.let { instantiateObject(it, serializer) }
|
||||
instantiateObject(iv, maybeSerializer)
|
||||
return true
|
||||
}
|
||||
// serializer is not singleton object and shall be instantiated
|
||||
@@ -218,8 +286,50 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
// check if it can be properly serialized with its args recursively
|
||||
Pair(argType, argSerializer)
|
||||
}
|
||||
|
||||
fun instantiate(typeArgument: Pair<IrType, IrClassSymbol?>, signature: StringBuilder?) {
|
||||
val (argType, argSerializer) = typeArgument
|
||||
stackValueSerializerInstance(
|
||||
argType,
|
||||
argSerializer,
|
||||
iv,
|
||||
intrinsicType,
|
||||
argType.genericIndex,
|
||||
genericSerializerFieldGetter
|
||||
)
|
||||
// wrap into nullable serializer if argType is nullable
|
||||
if (argType.isMarkedNullable()) iv.wrapStackValueIntoNullableSerializer()
|
||||
signature?.append(kSerializerType.descriptor)
|
||||
}
|
||||
|
||||
val serializer = maybeSerializer ?: iv.run {
|
||||
require(intrinsicType is IntrinsicType.WithModule) // SIMPLE is covered in previous if
|
||||
// SerializersModule
|
||||
load(intrinsicType.storedIndex, serializersModuleType)
|
||||
// KClass
|
||||
aconst(typeMapper.mapTypeCommon(kType, TypeMappingMode.GENERIC_ARGUMENT))
|
||||
AsmUtil.wrapJavaClassIntoKClass(this)
|
||||
|
||||
val descriptor = StringBuilder("(${serializersModuleType.descriptor}${AsmTypes.K_CLASS_TYPE.descriptor}")
|
||||
// Generic args (if present)
|
||||
if (argSerializers.isNotEmpty()) {
|
||||
fillArray(kSerializerType, argSerializers) { _, serializer ->
|
||||
instantiate(serializer, null)
|
||||
}
|
||||
descriptor.append(kSerializerArrayType.descriptor)
|
||||
}
|
||||
descriptor.append(")${kSerializerType.descriptor}")
|
||||
invokestatic(
|
||||
serializersKtInternalName,
|
||||
noCompiledSerializerMethodName,
|
||||
descriptor.toString(),
|
||||
false
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
// new serializer if needed
|
||||
iv?.apply {
|
||||
iv.apply {
|
||||
val serializerType = typeMapper.mapClass(serializer.owner)
|
||||
if (serializer.owner.classId == enumSerializerId && runtimeHasEnumSerializerFactoryFunctions) {
|
||||
val enumIrClass = kType.classOrNull!!.owner
|
||||
@@ -277,21 +387,6 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
dup()
|
||||
// instantiate all arg serializers on stack
|
||||
val signature = StringBuilder("(")
|
||||
|
||||
fun instantiate(typeArgument: Pair<IrType, IrClassSymbol?>, writeSignature: Boolean = true) {
|
||||
val (argType, argSerializer) = typeArgument
|
||||
stackValueSerializerInstance(
|
||||
argType,
|
||||
argSerializer,
|
||||
this,
|
||||
argType.genericIndex,
|
||||
genericSerializerFieldGetter
|
||||
)
|
||||
// wrap into nullable serializer if argType is nullable
|
||||
if (argType.isMarkedNullable()) wrapStackValueIntoNullableSerializer()
|
||||
if (writeSignature) signature.append(kSerializerType.descriptor)
|
||||
}
|
||||
|
||||
val serialName = kType.serialName()
|
||||
when (serializer.owner.classId) {
|
||||
enumSerializerId -> {
|
||||
@@ -314,13 +409,13 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
// append new additional arguments
|
||||
val fallbackDefaultSerializer = findTypeSerializer(this@SerializationJvmIrIntrinsicSupport, kType)
|
||||
if (fallbackDefaultSerializer != null && fallbackDefaultSerializer != serializer) {
|
||||
instantiate(kType to fallbackDefaultSerializer, writeSignature = false)
|
||||
instantiate(kType to fallbackDefaultSerializer, null)
|
||||
} else {
|
||||
aconst(null)
|
||||
}
|
||||
signature.append(kSerializerType.descriptor)
|
||||
fillArray(kSerializerType, argSerializers) { _, serializer ->
|
||||
instantiate(serializer, writeSignature = false)
|
||||
instantiate(serializer, null)
|
||||
}
|
||||
signature.append(kSerializerArrayType.descriptor)
|
||||
}
|
||||
@@ -331,7 +426,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
AsmUtil.wrapJavaClassIntoKClass(this)
|
||||
signature.append(AsmTypes.K_CLASS_TYPE.descriptor)
|
||||
// Reference array serializer still needs serializer for its argument type
|
||||
instantiate(argSerializers[0])
|
||||
instantiate(argSerializers[0], signature)
|
||||
}
|
||||
sealedSerializerId -> {
|
||||
aconst(serialName)
|
||||
@@ -357,6 +452,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
argType,
|
||||
argSerializer,
|
||||
this,
|
||||
intrinsicType,
|
||||
argType.genericIndex
|
||||
) { genericType ->
|
||||
// if we encountered generic type parameter in one of subclasses of sealed class, use polymorphism from upper bound
|
||||
@@ -364,7 +460,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
stackValueSerializerInstance(
|
||||
(genericType.classifierOrNull as IrTypeParameterSymbol).owner.representativeUpperBound,
|
||||
jvmBackendContext.referenceClass(module.getClassFromSerializationPackage(SpecialBuiltins.polymorphicSerializer)),
|
||||
this
|
||||
this, intrinsicType
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -380,7 +476,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
||||
signature.append("Ljava/lang/Object;")
|
||||
}
|
||||
// all serializers get arguments with serializers of their generic types
|
||||
else -> argSerializers.forEach { instantiate(it) }
|
||||
else -> argSerializers.forEach { instantiate(it, signature) }
|
||||
}
|
||||
signature.append(")V")
|
||||
// invoke constructor
|
||||
|
||||
+1
-2
@@ -139,8 +139,7 @@ open class SerializationLoweringExtension @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
override fun retrieveIntrinsic(symbol: IrFunctionSymbol): Any? {
|
||||
if (!SerializationJvmIrIntrinsicSupport.isSerializerReifiedFunction(symbol.owner)) return null
|
||||
return SerializationJvmIrIntrinsicSupport.ReifiedSerializerMethod
|
||||
return SerializationJvmIrIntrinsicSupport.intrinsicForMethod(symbol.owner)
|
||||
}
|
||||
|
||||
override fun applyPluginDefinedReifiedOperationMarker(
|
||||
|
||||
+15
-12
@@ -7,6 +7,7 @@ import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
import kotlinx.serialization.internal.*
|
||||
import kotlinx.serialization.descriptors.*
|
||||
import kotlinx.serialization.modules.*
|
||||
|
||||
@Serializable
|
||||
class Simple(val firstName: String, val lastName: String)
|
||||
@@ -17,16 +18,18 @@ data class Box<out T>(val boxed: T)
|
||||
@Serializable
|
||||
object SerializableObject {}
|
||||
|
||||
inline fun <reified T : Any> getSer(): KSerializer<T> {
|
||||
return serializer<T>()
|
||||
val module = SerializersModule {}
|
||||
|
||||
inline fun <reified T: Any> getSer(module: SerializersModule): KSerializer<T> {
|
||||
return module.serializer<T>()
|
||||
}
|
||||
|
||||
inline fun <reified T : Any> getBoxSer(): KSerializer<Box<T>> {
|
||||
return serializer<Box<T>>()
|
||||
inline fun <reified T : Any> getBoxSer(module: SerializersModule): KSerializer<Box<T>> {
|
||||
return module.serializer<Box<T>>()
|
||||
}
|
||||
|
||||
inline fun <reified T : Any> listSer(): KSerializer<List<T>> {
|
||||
return serializer<List<T>>()
|
||||
inline fun <reified T : Any> listSer(module: SerializersModule): KSerializer<List<T>> {
|
||||
return module.serializer<List<T>>()
|
||||
}
|
||||
|
||||
fun SerialDescriptor.recursiveToString(): String {
|
||||
@@ -46,17 +49,17 @@ fun assertHasSerializers(kSerializer: KSerializer<*>, list: List<String>) {
|
||||
|
||||
fun box(): String {
|
||||
assertHasSerializers(serializer<Simple>(), listOf("Simple"))
|
||||
assertHasSerializers(getSer<Simple>(), listOf("Simple"))
|
||||
assertHasSerializers(getSer<Simple>(module), listOf("Simple"))
|
||||
|
||||
assertHasSerializers(getSer<Box<Simple>>(), listOf("Box", "Simple"))
|
||||
assertHasSerializers(getBoxSer<Simple>(), listOf("Box", "Simple"))
|
||||
assertHasSerializers(getSer<Box<Simple>>(module), listOf("Box", "Simple"))
|
||||
assertHasSerializers(getBoxSer<Simple>(module), listOf("Box", "Simple"))
|
||||
|
||||
assertHasSerializers(listSer<Simple>(), listOf("ArrayList", "Simple"))
|
||||
assertHasSerializers(listSer<Simple>(module), listOf("ArrayList", "Simple"))
|
||||
assertHasSerializers(serializer<Box<List<Simple>>>(), listOf("Box", "ArrayList", "Simple"))
|
||||
assertHasSerializers(listSer<Box<List<Simple>>>(), listOf("ArrayList", "Box", "ArrayList", "Simple"))
|
||||
assertHasSerializers(listSer<Box<List<Simple>>>(module), listOf("ArrayList", "Box", "ArrayList", "Simple"))
|
||||
|
||||
assertHasSerializers(serializer<Int>(), listOf("Int"))
|
||||
assertHasSerializers(serializer<SerializableObject>(), listOf("SerializableObject"))
|
||||
assertHasSerializers(listSer<List<Box<Int>>>(), listOf("ArrayList", "ArrayList", "Box", "Int"))
|
||||
assertHasSerializers(listSer<List<Box<Int>>>(module), listOf("ArrayList", "ArrayList", "Box", "Int"))
|
||||
return "OK"
|
||||
}
|
||||
+7
-7
@@ -85,7 +85,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
GETSTATIC (Simple, Companion, LSimple$Companion;)
|
||||
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
||||
LABEL (L2)
|
||||
LINENUMBER (44)
|
||||
LINENUMBER (45)
|
||||
NOP
|
||||
LABEL (L3)
|
||||
POP
|
||||
@@ -99,7 +99,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
||||
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
||||
LABEL (L6)
|
||||
LINENUMBER (45)
|
||||
LINENUMBER (46)
|
||||
NOP
|
||||
LABEL (L7)
|
||||
POP
|
||||
@@ -113,7 +113,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
||||
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
||||
LABEL (L10)
|
||||
LINENUMBER (46)
|
||||
LINENUMBER (47)
|
||||
NOP
|
||||
LABEL (L11)
|
||||
POP
|
||||
@@ -128,7 +128,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
||||
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
||||
LABEL (L14)
|
||||
LINENUMBER (47)
|
||||
LINENUMBER (48)
|
||||
NOP
|
||||
LABEL (L15)
|
||||
POP
|
||||
@@ -154,7 +154,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
||||
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
||||
LABEL (L18)
|
||||
LINENUMBER (48)
|
||||
LINENUMBER (49)
|
||||
NOP
|
||||
LABEL (L19)
|
||||
POP
|
||||
@@ -179,7 +179,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
||||
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
||||
LABEL (L22)
|
||||
LINENUMBER (49)
|
||||
LINENUMBER (50)
|
||||
NOP
|
||||
LABEL (L23)
|
||||
POP
|
||||
@@ -265,4 +265,4 @@ public final class Simple : java/lang/Object {
|
||||
public final java.lang.String getLastName()
|
||||
|
||||
public final static void write$Self(Simple self, kotlinx.serialization.encoding.CompositeEncoder output, kotlinx.serialization.descriptors.SerialDescriptor serialDesc)
|
||||
}
|
||||
}
|
||||
+42
-42
@@ -76,55 +76,55 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
LDC (LSimple;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
LABEL (L2)
|
||||
LINENUMBER (50)
|
||||
LINENUMBER (51)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (1)
|
||||
LABEL (L3)
|
||||
ICONST_0
|
||||
ISTORE (2)
|
||||
LABEL (L4)
|
||||
LINENUMBER (51)
|
||||
LINENUMBER (52)
|
||||
ALOAD (1)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L5)
|
||||
LINENUMBER (50)
|
||||
LINENUMBER (51)
|
||||
NOP
|
||||
LABEL (L6)
|
||||
LINENUMBER (29)
|
||||
ICONST_0
|
||||
ISTORE (0)
|
||||
LABEL (L7)
|
||||
LINENUMBER (52)
|
||||
LINENUMBER (53)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L8)
|
||||
LDC (LSimple;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
LABEL (L9)
|
||||
LINENUMBER (53)
|
||||
LINENUMBER (54)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (2)
|
||||
LABEL (L10)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L11)
|
||||
LINENUMBER (54)
|
||||
LINENUMBER (55)
|
||||
ALOAD (2)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L12)
|
||||
LINENUMBER (53)
|
||||
LINENUMBER (54)
|
||||
NOP
|
||||
LABEL (L13)
|
||||
LINENUMBER (52)
|
||||
LINENUMBER (53)
|
||||
NOP
|
||||
LABEL (L14)
|
||||
LINENUMBER (30)
|
||||
ICONST_0
|
||||
ISTORE (0)
|
||||
LABEL (L15)
|
||||
LINENUMBER (55)
|
||||
LINENUMBER (56)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L16)
|
||||
@@ -135,29 +135,29 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||
LABEL (L17)
|
||||
LINENUMBER (56)
|
||||
LINENUMBER (57)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (2)
|
||||
LABEL (L18)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L19)
|
||||
LINENUMBER (57)
|
||||
LINENUMBER (58)
|
||||
ALOAD (2)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L20)
|
||||
LINENUMBER (56)
|
||||
LINENUMBER (57)
|
||||
NOP
|
||||
LABEL (L21)
|
||||
LINENUMBER (55)
|
||||
LINENUMBER (56)
|
||||
NOP
|
||||
LABEL (L22)
|
||||
LINENUMBER (31)
|
||||
ICONST_0
|
||||
ISTORE (0)
|
||||
LABEL (L23)
|
||||
LINENUMBER (58)
|
||||
LINENUMBER (59)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L24)
|
||||
@@ -168,29 +168,29 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||
LABEL (L25)
|
||||
LINENUMBER (59)
|
||||
LINENUMBER (60)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (2)
|
||||
LABEL (L26)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L27)
|
||||
LINENUMBER (60)
|
||||
LINENUMBER (61)
|
||||
ALOAD (2)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L28)
|
||||
LINENUMBER (59)
|
||||
LINENUMBER (60)
|
||||
NOP
|
||||
LABEL (L29)
|
||||
LINENUMBER (58)
|
||||
LINENUMBER (59)
|
||||
NOP
|
||||
LABEL (L30)
|
||||
LINENUMBER (32)
|
||||
ICONST_0
|
||||
ISTORE (0)
|
||||
LABEL (L31)
|
||||
LINENUMBER (61)
|
||||
LINENUMBER (62)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L32)
|
||||
@@ -201,22 +201,22 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||
LABEL (L33)
|
||||
LINENUMBER (62)
|
||||
LINENUMBER (63)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (2)
|
||||
LABEL (L34)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L35)
|
||||
LINENUMBER (63)
|
||||
LINENUMBER (64)
|
||||
ALOAD (2)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L36)
|
||||
LINENUMBER (62)
|
||||
LINENUMBER (63)
|
||||
NOP
|
||||
LABEL (L37)
|
||||
LINENUMBER (61)
|
||||
LINENUMBER (62)
|
||||
NOP
|
||||
LABEL (L38)
|
||||
LINENUMBER (34)
|
||||
@@ -234,26 +234,26 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||
LABEL (L40)
|
||||
LINENUMBER (64)
|
||||
LINENUMBER (65)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (1)
|
||||
LABEL (L41)
|
||||
ICONST_0
|
||||
ISTORE (2)
|
||||
LABEL (L42)
|
||||
LINENUMBER (65)
|
||||
LINENUMBER (66)
|
||||
ALOAD (1)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L43)
|
||||
LINENUMBER (64)
|
||||
LINENUMBER (65)
|
||||
NOP
|
||||
LABEL (L44)
|
||||
LINENUMBER (36)
|
||||
ICONST_0
|
||||
ISTORE (0)
|
||||
LABEL (L45)
|
||||
LINENUMBER (66)
|
||||
LINENUMBER (67)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L46)
|
||||
@@ -272,22 +272,22 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||
LABEL (L47)
|
||||
LINENUMBER (67)
|
||||
LINENUMBER (68)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (2)
|
||||
LABEL (L48)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L49)
|
||||
LINENUMBER (68)
|
||||
LINENUMBER (69)
|
||||
ALOAD (2)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L50)
|
||||
LINENUMBER (67)
|
||||
LINENUMBER (68)
|
||||
NOP
|
||||
LABEL (L51)
|
||||
LINENUMBER (66)
|
||||
LINENUMBER (67)
|
||||
NOP
|
||||
LABEL (L52)
|
||||
LINENUMBER (38)
|
||||
@@ -297,19 +297,19 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
GETSTATIC (java/lang/Integer, TYPE, Ljava/lang/Class;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
LABEL (L54)
|
||||
LINENUMBER (69)
|
||||
LINENUMBER (70)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (1)
|
||||
LABEL (L55)
|
||||
ICONST_0
|
||||
ISTORE (2)
|
||||
LABEL (L56)
|
||||
LINENUMBER (70)
|
||||
LINENUMBER (71)
|
||||
ALOAD (1)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L57)
|
||||
LINENUMBER (69)
|
||||
LINENUMBER (70)
|
||||
NOP
|
||||
LABEL (L58)
|
||||
LINENUMBER (40)
|
||||
@@ -319,26 +319,26 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
LDC (LSerializableObject;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
LABEL (L60)
|
||||
LINENUMBER (71)
|
||||
LINENUMBER (72)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (1)
|
||||
LABEL (L61)
|
||||
ICONST_0
|
||||
ISTORE (2)
|
||||
LABEL (L62)
|
||||
LINENUMBER (72)
|
||||
LINENUMBER (73)
|
||||
ALOAD (1)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L63)
|
||||
LINENUMBER (71)
|
||||
LINENUMBER (72)
|
||||
NOP
|
||||
LABEL (L64)
|
||||
LINENUMBER (42)
|
||||
ICONST_0
|
||||
ISTORE (0)
|
||||
LABEL (L65)
|
||||
LINENUMBER (73)
|
||||
LINENUMBER (74)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L66)
|
||||
@@ -357,22 +357,22 @@ public final class IntrinsicsKt : java/lang/Object {
|
||||
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||
LABEL (L67)
|
||||
LINENUMBER (74)
|
||||
LINENUMBER (75)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (2)
|
||||
LABEL (L68)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L69)
|
||||
LINENUMBER (75)
|
||||
LINENUMBER (76)
|
||||
ALOAD (2)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L70)
|
||||
LINENUMBER (74)
|
||||
LINENUMBER (75)
|
||||
NOP
|
||||
LABEL (L71)
|
||||
LINENUMBER (73)
|
||||
LINENUMBER (74)
|
||||
NOP
|
||||
LABEL (L72)
|
||||
LINENUMBER (43)
|
||||
@@ -1,4 +1,4 @@
|
||||
// CURIOUS_ABOUT test
|
||||
// CURIOUS_ABOUT: test
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
|
||||
+203
@@ -0,0 +1,203 @@
|
||||
public final class IntrinsicsAdvancedKt : java/lang/Object {
|
||||
private final static kotlinx.serialization.modules.SerializersModule module
|
||||
|
||||
static void <clinit>()
|
||||
|
||||
public final static kotlinx.serialization.modules.SerializersModule getModule()
|
||||
|
||||
public final static kotlinx.serialization.KSerializer getSer(kotlinx.serialization.modules.SerializersModule module) {
|
||||
LABEL (L0)
|
||||
ALOAD (0)
|
||||
LDC (module)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L1)
|
||||
LINENUMBER (18)
|
||||
ALOAD (0)
|
||||
ASTORE (2)
|
||||
BIPUSH (7)
|
||||
LDC (T)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, reifiedOperationMarker, (ILjava/lang/String;)V)
|
||||
ALOAD (2)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlinx/serialization/modules/SerializersModule;)Lkotlinx/serialization/KSerializer;)
|
||||
ARETURN
|
||||
LABEL (L2)
|
||||
}
|
||||
|
||||
public final static void test() {
|
||||
LABEL (L0)
|
||||
LINENUMBER (22)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
POP
|
||||
GETSTATIC (Simple, Companion, LSimple$Companion;)
|
||||
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
||||
POP
|
||||
LABEL (L1)
|
||||
LINENUMBER (23)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
LDC (LNoSer;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, getOrCreateKotlinClass, (Ljava/lang/Class;)Lkotlin/reflect/KClass;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, noCompiledSerializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer;)
|
||||
POP
|
||||
LABEL (L2)
|
||||
LINENUMBER (24)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
POP
|
||||
NEW (kotlinx/serialization/internal/ArrayListSerializer)
|
||||
DUP
|
||||
GETSTATIC (Simple$$serializer, INSTANCE, LSimple$$serializer;)
|
||||
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
||||
POP
|
||||
LABEL (L3)
|
||||
LINENUMBER (25)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
NEW (kotlinx/serialization/internal/ArrayListSerializer)
|
||||
DUP
|
||||
ALOAD (0)
|
||||
LDC (LNoSer;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, getOrCreateKotlinClass, (Ljava/lang/Class;)Lkotlin/reflect/KClass;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, noCompiledSerializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer;)
|
||||
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
||||
POP
|
||||
LABEL (L4)
|
||||
LINENUMBER (27)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L5)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L6)
|
||||
LINENUMBER (34)
|
||||
GETSTATIC (Simple, Companion, LSimple$Companion;)
|
||||
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
||||
LABEL (L7)
|
||||
POP
|
||||
LABEL (L8)
|
||||
LINENUMBER (28)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L9)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L10)
|
||||
LINENUMBER (35)
|
||||
ALOAD (0)
|
||||
LDC (LNoSer;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, getOrCreateKotlinClass, (Ljava/lang/Class;)Lkotlin/reflect/KClass;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, noCompiledSerializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer;)
|
||||
LABEL (L11)
|
||||
POP
|
||||
LABEL (L12)
|
||||
LINENUMBER (30)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L13)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L14)
|
||||
LINENUMBER (36)
|
||||
ALOAD (0)
|
||||
LDC (LNoSerGeneric;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, getOrCreateKotlinClass, (Ljava/lang/Class;)Lkotlin/reflect/KClass;)
|
||||
ICONST_1
|
||||
ANEWARRAY (kotlinx/serialization/KSerializer)
|
||||
DUP
|
||||
ICONST_0
|
||||
GETSTATIC (Simple$$serializer, INSTANCE, LSimple$$serializer;)
|
||||
AASTORE
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, noCompiledSerializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KClass;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
||||
LABEL (L15)
|
||||
POP
|
||||
LABEL (L16)
|
||||
LINENUMBER (31)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L17)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L18)
|
||||
LINENUMBER (37)
|
||||
ALOAD (0)
|
||||
ASTORE (2)
|
||||
ALOAD (2)
|
||||
LDC (LNoSerGeneric;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, getOrCreateKotlinClass, (Ljava/lang/Class;)Lkotlin/reflect/KClass;)
|
||||
ICONST_1
|
||||
ANEWARRAY (kotlinx/serialization/KSerializer)
|
||||
DUP
|
||||
ICONST_0
|
||||
ALOAD (2)
|
||||
LDC (LNoSer;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, getOrCreateKotlinClass, (Ljava/lang/Class;)Lkotlin/reflect/KClass;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, noCompiledSerializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer;)
|
||||
AASTORE
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, noCompiledSerializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KClass;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
||||
LABEL (L19)
|
||||
POP
|
||||
LABEL (L20)
|
||||
LINENUMBER (32)
|
||||
RETURN
|
||||
}
|
||||
}
|
||||
|
||||
public final class NoSer : java/lang/Object {
|
||||
public void <init>()
|
||||
}
|
||||
|
||||
public final class NoSerGeneric : java/lang/Object {
|
||||
public void <init>()
|
||||
}
|
||||
|
||||
public final class Simple$$serializer : java/lang/Object, kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public final static Simple$$serializer INSTANCE
|
||||
|
||||
private final static kotlinx.serialization.internal.PluginGeneratedSerialDescriptor descriptor
|
||||
|
||||
static void <clinit>()
|
||||
|
||||
private void <init>()
|
||||
|
||||
public kotlinx.serialization.KSerializer[] childSerializers()
|
||||
|
||||
public Simple deserialize(kotlinx.serialization.encoding.Decoder decoder)
|
||||
|
||||
public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder decoder)
|
||||
|
||||
public kotlinx.serialization.descriptors.SerialDescriptor getDescriptor()
|
||||
|
||||
public void serialize(kotlinx.serialization.encoding.Encoder encoder, Simple value)
|
||||
|
||||
public void serialize(kotlinx.serialization.encoding.Encoder encoder, java.lang.Object value)
|
||||
|
||||
public kotlinx.serialization.KSerializer[] typeParametersSerializers()
|
||||
}
|
||||
|
||||
public final class Simple$Companion : java/lang/Object {
|
||||
private void <init>()
|
||||
|
||||
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker)
|
||||
|
||||
public final kotlinx.serialization.KSerializer serializer()
|
||||
}
|
||||
|
||||
public final class Simple : java/lang/Object {
|
||||
public final static Simple$Companion Companion
|
||||
|
||||
private final java.lang.String firstName
|
||||
|
||||
private final java.lang.String lastName
|
||||
|
||||
static void <clinit>()
|
||||
|
||||
public void <init>(java.lang.String firstName, java.lang.String lastName)
|
||||
|
||||
public void <init>(int seen1, java.lang.String firstName, java.lang.String lastName, kotlinx.serialization.internal.SerializationConstructorMarker serializationConstructorMarker)
|
||||
|
||||
public final java.lang.String getFirstName()
|
||||
|
||||
public final java.lang.String getLastName()
|
||||
|
||||
public final static void write$Self(Simple self, kotlinx.serialization.encoding.CompositeEncoder output, kotlinx.serialization.descriptors.SerialDescriptor serialDesc)
|
||||
}
|
||||
@@ -0,0 +1,372 @@
|
||||
public final class IntrinsicsAdvancedKt : java/lang/Object {
|
||||
private final static kotlinx.serialization.modules.SerializersModule module
|
||||
|
||||
static void <clinit>()
|
||||
|
||||
public final static kotlinx.serialization.modules.SerializersModule getModule()
|
||||
|
||||
public final static kotlinx.serialization.KSerializer getSer(kotlinx.serialization.modules.SerializersModule module) {
|
||||
LABEL (L0)
|
||||
LDC (0)
|
||||
ISTORE (1)
|
||||
LABEL (L1)
|
||||
ALOAD (0)
|
||||
LDC (module)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L2)
|
||||
LINENUMBER (18)
|
||||
ALOAD (0)
|
||||
ASTORE (2)
|
||||
LABEL (L3)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L4)
|
||||
LINENUMBER (34)
|
||||
ALOAD (2)
|
||||
BIPUSH (6)
|
||||
LDC (T)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, reifiedOperationMarker, (ILjava/lang/String;)V)
|
||||
ACONST_NULL
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (4)
|
||||
LABEL (L5)
|
||||
ICONST_0
|
||||
ISTORE (5)
|
||||
LABEL (L6)
|
||||
LINENUMBER (35)
|
||||
ALOAD (4)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
ALOAD (4)
|
||||
CHECKCAST (kotlinx/serialization/KSerializer)
|
||||
LABEL (L7)
|
||||
LINENUMBER (34)
|
||||
NOP
|
||||
LABEL (L8)
|
||||
LINENUMBER (18)
|
||||
ARETURN
|
||||
LABEL (L9)
|
||||
}
|
||||
|
||||
public final static void test() {
|
||||
LABEL (L0)
|
||||
LINENUMBER (22)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L1)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L2)
|
||||
LINENUMBER (36)
|
||||
ALOAD (0)
|
||||
LDC (LSimple;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (2)
|
||||
LABEL (L3)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L4)
|
||||
LINENUMBER (37)
|
||||
ALOAD (2)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L5)
|
||||
LINENUMBER (36)
|
||||
NOP
|
||||
LABEL (L6)
|
||||
LINENUMBER (23)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L7)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L8)
|
||||
LINENUMBER (38)
|
||||
ALOAD (0)
|
||||
LDC (LNoSer;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (2)
|
||||
LABEL (L9)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L10)
|
||||
LINENUMBER (39)
|
||||
ALOAD (2)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L11)
|
||||
LINENUMBER (38)
|
||||
NOP
|
||||
LABEL (L12)
|
||||
LINENUMBER (24)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L13)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L14)
|
||||
LINENUMBER (40)
|
||||
ALOAD (0)
|
||||
LDC (Ljava/util/List;)
|
||||
GETSTATIC (kotlin/reflect/KTypeProjection, Companion, Lkotlin/reflect/KTypeProjection$Companion;)
|
||||
LDC (LSimple;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (2)
|
||||
LABEL (L15)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L16)
|
||||
LINENUMBER (41)
|
||||
ALOAD (2)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L17)
|
||||
LINENUMBER (40)
|
||||
NOP
|
||||
LABEL (L18)
|
||||
LINENUMBER (25)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L19)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L20)
|
||||
LINENUMBER (42)
|
||||
ALOAD (0)
|
||||
LDC (Ljava/util/List;)
|
||||
GETSTATIC (kotlin/reflect/KTypeProjection, Companion, Lkotlin/reflect/KTypeProjection$Companion;)
|
||||
LDC (LNoSer;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (2)
|
||||
LABEL (L21)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L22)
|
||||
LINENUMBER (43)
|
||||
ALOAD (2)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L23)
|
||||
LINENUMBER (42)
|
||||
NOP
|
||||
LABEL (L24)
|
||||
LINENUMBER (27)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L25)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L26)
|
||||
LINENUMBER (44)
|
||||
ALOAD (0)
|
||||
ASTORE (2)
|
||||
LABEL (L27)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L28)
|
||||
LINENUMBER (45)
|
||||
ALOAD (2)
|
||||
LDC (LSimple;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (4)
|
||||
LABEL (L29)
|
||||
ICONST_0
|
||||
ISTORE (5)
|
||||
LABEL (L30)
|
||||
LINENUMBER (46)
|
||||
ALOAD (4)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L31)
|
||||
LINENUMBER (45)
|
||||
NOP
|
||||
LABEL (L32)
|
||||
LINENUMBER (44)
|
||||
NOP
|
||||
LABEL (L33)
|
||||
LINENUMBER (28)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L34)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L35)
|
||||
LINENUMBER (47)
|
||||
ALOAD (0)
|
||||
ASTORE (2)
|
||||
LABEL (L36)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L37)
|
||||
LINENUMBER (48)
|
||||
ALOAD (2)
|
||||
LDC (LNoSer;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (4)
|
||||
LABEL (L38)
|
||||
ICONST_0
|
||||
ISTORE (5)
|
||||
LABEL (L39)
|
||||
LINENUMBER (49)
|
||||
ALOAD (4)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L40)
|
||||
LINENUMBER (48)
|
||||
NOP
|
||||
LABEL (L41)
|
||||
LINENUMBER (47)
|
||||
NOP
|
||||
LABEL (L42)
|
||||
LINENUMBER (30)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L43)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L44)
|
||||
LINENUMBER (50)
|
||||
ALOAD (0)
|
||||
ASTORE (2)
|
||||
LABEL (L45)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L46)
|
||||
LINENUMBER (51)
|
||||
ALOAD (2)
|
||||
LDC (LNoSerGeneric;)
|
||||
GETSTATIC (kotlin/reflect/KTypeProjection, Companion, Lkotlin/reflect/KTypeProjection$Companion;)
|
||||
LDC (LSimple;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (4)
|
||||
LABEL (L47)
|
||||
ICONST_0
|
||||
ISTORE (5)
|
||||
LABEL (L48)
|
||||
LINENUMBER (52)
|
||||
ALOAD (4)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L49)
|
||||
LINENUMBER (51)
|
||||
NOP
|
||||
LABEL (L50)
|
||||
LINENUMBER (50)
|
||||
NOP
|
||||
LABEL (L51)
|
||||
LINENUMBER (31)
|
||||
GETSTATIC (IntrinsicsAdvancedKt, module, Lkotlinx/serialization/modules/SerializersModule;)
|
||||
ASTORE (0)
|
||||
LABEL (L52)
|
||||
ICONST_0
|
||||
ISTORE (1)
|
||||
LABEL (L53)
|
||||
LINENUMBER (53)
|
||||
ALOAD (0)
|
||||
ASTORE (2)
|
||||
LABEL (L54)
|
||||
ICONST_0
|
||||
ISTORE (3)
|
||||
LABEL (L55)
|
||||
LINENUMBER (54)
|
||||
ALOAD (2)
|
||||
LDC (LNoSerGeneric;)
|
||||
GETSTATIC (kotlin/reflect/KTypeProjection, Companion, Lkotlin/reflect/KTypeProjection$Companion;)
|
||||
LDC (LNoSer;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||
INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlinx/serialization/modules/SerializersModule;Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||
ASTORE (4)
|
||||
LABEL (L56)
|
||||
ICONST_0
|
||||
ISTORE (5)
|
||||
LABEL (L57)
|
||||
LINENUMBER (55)
|
||||
ALOAD (4)
|
||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
LABEL (L58)
|
||||
LINENUMBER (54)
|
||||
NOP
|
||||
LABEL (L59)
|
||||
LINENUMBER (53)
|
||||
NOP
|
||||
LABEL (L60)
|
||||
LINENUMBER (32)
|
||||
RETURN
|
||||
}
|
||||
}
|
||||
|
||||
public final class NoSer : java/lang/Object {
|
||||
public void <init>()
|
||||
}
|
||||
|
||||
public final class NoSerGeneric : java/lang/Object {
|
||||
public void <init>()
|
||||
}
|
||||
|
||||
public final class Simple$$serializer : java/lang/Object, kotlinx/serialization/internal/GeneratedSerializer {
|
||||
private final static kotlinx.serialization.descriptors.SerialDescriptor $$serialDesc
|
||||
|
||||
public final static Simple$$serializer INSTANCE
|
||||
|
||||
static void <clinit>()
|
||||
|
||||
private void <init>()
|
||||
|
||||
public kotlinx.serialization.KSerializer[] childSerializers()
|
||||
|
||||
public Simple deserialize(kotlinx.serialization.encoding.Decoder decoder)
|
||||
|
||||
public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder p0)
|
||||
|
||||
public kotlinx.serialization.descriptors.SerialDescriptor getDescriptor()
|
||||
|
||||
public void serialize(kotlinx.serialization.encoding.Encoder encoder, Simple value)
|
||||
|
||||
public void serialize(kotlinx.serialization.encoding.Encoder p0, java.lang.Object p1)
|
||||
|
||||
public kotlinx.serialization.KSerializer[] typeParametersSerializers()
|
||||
}
|
||||
|
||||
public final class Simple$Companion : java/lang/Object {
|
||||
private void <init>()
|
||||
|
||||
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker)
|
||||
|
||||
public final kotlinx.serialization.KSerializer serializer()
|
||||
}
|
||||
|
||||
public final class Simple : java/lang/Object {
|
||||
public final static Simple$Companion Companion
|
||||
|
||||
private final java.lang.String firstName
|
||||
|
||||
private final java.lang.String lastName
|
||||
|
||||
static void <clinit>()
|
||||
|
||||
public void <init>(java.lang.String firstName, java.lang.String lastName)
|
||||
|
||||
public void <init>(int seen1, java.lang.String firstName, java.lang.String lastName, kotlinx.serialization.internal.SerializationConstructorMarker serializationConstructorMarker)
|
||||
|
||||
public final java.lang.String getFirstName()
|
||||
|
||||
public final java.lang.String getLastName()
|
||||
|
||||
public final static void write$Self(Simple self, kotlinx.serialization.encoding.CompositeEncoder output, kotlinx.serialization.descriptors.SerialDescriptor serialDesc)
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
// CURIOUS_ABOUT: test, getSer
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
import kotlinx.serialization.modules.*
|
||||
|
||||
@Serializable
|
||||
class Simple(val firstName: String, val lastName: String)
|
||||
|
||||
class NoSer
|
||||
|
||||
class NoSerGeneric<T>
|
||||
|
||||
val module = SerializersModule {}
|
||||
|
||||
inline fun <reified T: Any> getSer(module: SerializersModule): KSerializer<T> {
|
||||
return module.serializer()
|
||||
}
|
||||
|
||||
fun test() {
|
||||
module.serializer<Simple>()
|
||||
module.serializer<NoSer>()
|
||||
module.serializer<List<Simple>>()
|
||||
module.serializer<List<NoSer>>()
|
||||
|
||||
getSer<Simple>(module)
|
||||
getSer<NoSer>(module)
|
||||
|
||||
getSer<NoSerGeneric<Simple>>(module)
|
||||
getSer<NoSerGeneric<NoSer>>(module)
|
||||
}
|
||||
+6
@@ -43,6 +43,12 @@ public class SerializationAsmLikeInstructionsListingTestGenerated extends Abstra
|
||||
runTest("plugins/kotlinx-serialization/testData/codegen/Intrinsics.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("IntrinsicsAdvanced.kt")
|
||||
public void testIntrinsicsAdvanced() throws Exception {
|
||||
runTest("plugins/kotlinx-serialization/testData/codegen/IntrinsicsAdvanced.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("Sealed.kt")
|
||||
public void testSealed() throws Exception {
|
||||
|
||||
+6
@@ -57,6 +57,12 @@ public class SerializationFirBlackBoxTestGenerated extends AbstractSerialization
|
||||
runTest("plugins/kotlinx-serialization/testData/boxIr/inlineClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intrinsicsBox.kt")
|
||||
public void testIntrinsicsBox() throws Exception {
|
||||
runTest("plugins/kotlinx-serialization/testData/boxIr/intrinsicsBox.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("metaSerializable.kt")
|
||||
public void testMetaSerializable() throws Exception {
|
||||
|
||||
+6
@@ -43,6 +43,12 @@ public class SerializationIrAsmLikeInstructionsListingTestGenerated extends Abst
|
||||
runTest("plugins/kotlinx-serialization/testData/codegen/Intrinsics.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("IntrinsicsAdvanced.kt")
|
||||
public void testIntrinsicsAdvanced() throws Exception {
|
||||
runTest("plugins/kotlinx-serialization/testData/codegen/IntrinsicsAdvanced.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("Sealed.kt")
|
||||
public void testSealed() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user