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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
inline private fun rewriteNextTypeInsn(
|
private inline fun rewriteNextTypeInsn(
|
||||||
marker: MethodInsnNode,
|
marker: MethodInsnNode,
|
||||||
expectedNextOpcode: Int,
|
expectedNextOpcode: Int,
|
||||||
rewrite: (AbstractInsnNode) -> Boolean
|
rewrite: (AbstractInsnNode) -> Boolean
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ plugins {
|
|||||||
id("jps-compatible")
|
id("jps-compatible")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
embedded(project(":kotlinx-serialization-compiler-plugin.common"))
|
embedded(project(":kotlinx-serialization-compiler-plugin.common"))
|
||||||
embedded(project(":kotlinx-serialization-compiler-plugin.k1"))
|
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.common.extensions.FirIncompatiblePluginAPI
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||||
import org.jetbrains.kotlin.backend.jvm.codegen.BlockInfo
|
import org.jetbrains.kotlin.backend.jvm.codegen.*
|
||||||
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.intrinsics.IntrinsicMethod
|
import org.jetbrains.kotlin.backend.jvm.intrinsics.IntrinsicMethod
|
||||||
import org.jetbrains.kotlin.backend.jvm.ir.representativeUpperBound
|
import org.jetbrains.kotlin.backend.jvm.ir.representativeUpperBound
|
||||||
import org.jetbrains.kotlin.backend.jvm.mapping.mapClass
|
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.Opcodes
|
||||||
import org.jetbrains.org.objectweb.asm.Type
|
import org.jetbrains.org.objectweb.asm.Type
|
||||||
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
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.InsnList
|
||||||
import org.jetbrains.org.objectweb.asm.tree.MethodInsnNode
|
import org.jetbrains.org.objectweb.asm.tree.MethodInsnNode
|
||||||
|
import org.jetbrains.org.objectweb.asm.tree.VarInsnNode
|
||||||
|
|
||||||
class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContext) : SerializationBaseContext {
|
class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContext) : SerializationBaseContext {
|
||||||
companion object {
|
sealed class IntrinsicType(val methodDescriptor: String) {
|
||||||
fun isSerializerReifiedFunction(targetFunction: IrFunction): Boolean =
|
object Simple : IntrinsicType(stubCallDescriptor)
|
||||||
targetFunction.fqNameWhenAvailable?.asString() == "kotlinx.serialization.SerializersKt.serializer"
|
|
||||||
&& targetFunction.valueParameters.isEmpty()
|
class WithModule(val storedIndex: Int) :
|
||||||
&& targetFunction.typeParameters.size == 1
|
IntrinsicType(stubCallDescriptorWithModule) {
|
||||||
&& targetFunction.dispatchReceiverParameter == null
|
}
|
||||||
&& targetFunction.extensionReceiverParameter == null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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(
|
override fun invoke(
|
||||||
expression: IrFunctionAccessExpression,
|
expression: IrFunctionAccessExpression,
|
||||||
codegen: ExpressionCodegen,
|
codegen: ExpressionCodegen,
|
||||||
@@ -71,10 +89,21 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
): PromisedValue {
|
): PromisedValue {
|
||||||
with(codegen) {
|
with(codegen) {
|
||||||
val argument = expression.getTypeArgument(0)!!
|
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(
|
SerializationJvmIrIntrinsicSupport(codegen.context).generateSerializerForType(
|
||||||
argument,
|
argument,
|
||||||
mv
|
mv,
|
||||||
|
intrinsicType
|
||||||
)
|
)
|
||||||
|
if (withModule) {
|
||||||
|
frameMap.leaveTemp(serializersModuleType)
|
||||||
|
}
|
||||||
return MaterialValue(codegen, kSerializerType, expression.type)
|
return MaterialValue(codegen, kSerializerType, expression.type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,17 +144,50 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
instructions: InsnList,
|
instructions: InsnList,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
): Int {
|
): Int {
|
||||||
|
val intrinsicType = getOperationTypeFromInsn(insn) ?: return -1
|
||||||
val newMethodNode = newMethodNodeWithCorrectStackSize {
|
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)
|
instructions.insert(insn, newMethodNode.instructions)
|
||||||
|
|
||||||
return newMethodNode.maxStack
|
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) {
|
with(typeSystemContext) {
|
||||||
val typeDescriptor = type.typeConstructor().getTypeParameterClassifier()
|
val typeDescriptor = type.typeConstructor().getTypeParameterClassifier()
|
||||||
if (typeDescriptor != null) { // need further reification
|
if (typeDescriptor != null) { // need further reification
|
||||||
@@ -136,7 +198,10 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
this@putReifyMarkerIfNeeded,
|
this@putReifyMarkerIfNeeded,
|
||||||
typeSystemContext
|
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 true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -144,10 +209,11 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
|
|
||||||
fun generateSerializerForType(
|
fun generateSerializerForType(
|
||||||
type: IrType,
|
type: IrType,
|
||||||
adapter: InstructionAdapter
|
adapter: InstructionAdapter,
|
||||||
|
intrinsicType: IntrinsicType
|
||||||
) {
|
) {
|
||||||
with(typeSystemContext) {
|
with(typeSystemContext) {
|
||||||
if (adapter.putReifyMarkerIfNeeded(type)) return
|
if (adapter.putReifyMarkerIfNeeded(type, intrinsicType)) return
|
||||||
val typeDescriptor: IrClass = type.classOrNull!!.owner
|
val typeDescriptor: IrClass = type.classOrNull!!.owner
|
||||||
|
|
||||||
val support = this@SerializationJvmIrIntrinsicSupport
|
val support = this@SerializationJvmIrIntrinsicSupport
|
||||||
@@ -158,7 +224,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
val companionType = if (typeDescriptor.isSerializableObject) typeDescriptor else typeDescriptor.companionObject()!!
|
val companionType = if (typeDescriptor.isSerializableObject) typeDescriptor else typeDescriptor.companionObject()!!
|
||||||
support.instantiateObject(adapter, companionType.symbol)
|
support.instantiateObject(adapter, companionType.symbol)
|
||||||
val args = type.getArguments().map { it.getType() }
|
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)
|
val signature = kSerializerType.descriptor.repeat(args.size)
|
||||||
adapter.invokevirtual(
|
adapter.invokevirtual(
|
||||||
typeMapper.mapClass(companionType).internalName,
|
typeMapper.mapClass(companionType).internalName,
|
||||||
@@ -172,9 +238,10 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
support.stackValueSerializerInstance(
|
support.stackValueSerializerInstance(
|
||||||
type,
|
type,
|
||||||
serializer,
|
serializer,
|
||||||
adapter
|
adapter,
|
||||||
|
intrinsicType
|
||||||
) { genericArg ->
|
) { genericArg ->
|
||||||
assert(putReifyMarkerIfNeeded(genericArg))
|
assert(putReifyMarkerIfNeeded(genericArg, intrinsicType))
|
||||||
}
|
}
|
||||||
if (type.isMarkedNullable()) adapter.wrapStackValueIntoNullableSerializer()
|
if (type.isMarkedNullable()) adapter.wrapStackValueIntoNullableSerializer()
|
||||||
}
|
}
|
||||||
@@ -183,30 +250,31 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
|
|
||||||
private fun stackValueSerializerInstance(
|
private fun stackValueSerializerInstance(
|
||||||
kType: IrType, maybeSerializer: IrClassSymbol?,
|
kType: IrType, maybeSerializer: IrClassSymbol?,
|
||||||
iv: InstructionAdapter?,
|
iv: InstructionAdapter,
|
||||||
|
intrinsicType: IntrinsicType,
|
||||||
genericIndex: Int? = null,
|
genericIndex: Int? = null,
|
||||||
genericSerializerFieldGetter: (InstructionAdapter.(IrType) -> Unit)? = null,
|
genericSerializerFieldGetter: (InstructionAdapter.(IrType) -> Unit)? = null,
|
||||||
): Boolean = with(typeSystemContext) {
|
): Boolean = with(typeSystemContext) {
|
||||||
if (maybeSerializer == null && genericIndex != null) {
|
if (maybeSerializer == null && genericIndex != null) {
|
||||||
// get field from serializer object
|
// get field from serializer object
|
||||||
iv?.run { genericSerializerFieldGetter?.invoke(this, kType) }
|
genericSerializerFieldGetter?.invoke(iv, kType)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
val serializer = maybeSerializer ?: run {
|
if (maybeSerializer == null && intrinsicType == IntrinsicType.Simple) {
|
||||||
iv?.apply {
|
iv.apply {
|
||||||
aconst(kType.classFqName!!.asString())
|
aconst(kType.classFqName!!.asString())
|
||||||
invokestatic(
|
invokestatic(
|
||||||
"kotlinx/serialization/SerializersKt",
|
serializersKtInternalName,
|
||||||
"noCompiledSerializer",
|
noCompiledSerializerMethodName,
|
||||||
"(Ljava/lang/String;)Lkotlinx/serialization/KSerializer;",
|
"(Ljava/lang/String;)${kSerializerType.descriptor}",
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if (serializer.owner.isObject) {
|
if (maybeSerializer != null && maybeSerializer.owner.isObject) {
|
||||||
// singleton serializer -- just get it
|
// singleton serializer -- just get it
|
||||||
iv?.let { instantiateObject(it, serializer) }
|
instantiateObject(iv, maybeSerializer)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// serializer is not singleton object and shall be instantiated
|
// 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
|
// check if it can be properly serialized with its args recursively
|
||||||
Pair(argType, argSerializer)
|
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
|
// new serializer if needed
|
||||||
iv?.apply {
|
iv.apply {
|
||||||
val serializerType = typeMapper.mapClass(serializer.owner)
|
val serializerType = typeMapper.mapClass(serializer.owner)
|
||||||
if (serializer.owner.classId == enumSerializerId && runtimeHasEnumSerializerFactoryFunctions) {
|
if (serializer.owner.classId == enumSerializerId && runtimeHasEnumSerializerFactoryFunctions) {
|
||||||
val enumIrClass = kType.classOrNull!!.owner
|
val enumIrClass = kType.classOrNull!!.owner
|
||||||
@@ -277,21 +387,6 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
dup()
|
dup()
|
||||||
// instantiate all arg serializers on stack
|
// instantiate all arg serializers on stack
|
||||||
val signature = StringBuilder("(")
|
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()
|
val serialName = kType.serialName()
|
||||||
when (serializer.owner.classId) {
|
when (serializer.owner.classId) {
|
||||||
enumSerializerId -> {
|
enumSerializerId -> {
|
||||||
@@ -314,13 +409,13 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
// append new additional arguments
|
// append new additional arguments
|
||||||
val fallbackDefaultSerializer = findTypeSerializer(this@SerializationJvmIrIntrinsicSupport, kType)
|
val fallbackDefaultSerializer = findTypeSerializer(this@SerializationJvmIrIntrinsicSupport, kType)
|
||||||
if (fallbackDefaultSerializer != null && fallbackDefaultSerializer != serializer) {
|
if (fallbackDefaultSerializer != null && fallbackDefaultSerializer != serializer) {
|
||||||
instantiate(kType to fallbackDefaultSerializer, writeSignature = false)
|
instantiate(kType to fallbackDefaultSerializer, null)
|
||||||
} else {
|
} else {
|
||||||
aconst(null)
|
aconst(null)
|
||||||
}
|
}
|
||||||
signature.append(kSerializerType.descriptor)
|
signature.append(kSerializerType.descriptor)
|
||||||
fillArray(kSerializerType, argSerializers) { _, serializer ->
|
fillArray(kSerializerType, argSerializers) { _, serializer ->
|
||||||
instantiate(serializer, writeSignature = false)
|
instantiate(serializer, null)
|
||||||
}
|
}
|
||||||
signature.append(kSerializerArrayType.descriptor)
|
signature.append(kSerializerArrayType.descriptor)
|
||||||
}
|
}
|
||||||
@@ -331,7 +426,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
AsmUtil.wrapJavaClassIntoKClass(this)
|
AsmUtil.wrapJavaClassIntoKClass(this)
|
||||||
signature.append(AsmTypes.K_CLASS_TYPE.descriptor)
|
signature.append(AsmTypes.K_CLASS_TYPE.descriptor)
|
||||||
// Reference array serializer still needs serializer for its argument type
|
// Reference array serializer still needs serializer for its argument type
|
||||||
instantiate(argSerializers[0])
|
instantiate(argSerializers[0], signature)
|
||||||
}
|
}
|
||||||
sealedSerializerId -> {
|
sealedSerializerId -> {
|
||||||
aconst(serialName)
|
aconst(serialName)
|
||||||
@@ -357,6 +452,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
argType,
|
argType,
|
||||||
argSerializer,
|
argSerializer,
|
||||||
this,
|
this,
|
||||||
|
intrinsicType,
|
||||||
argType.genericIndex
|
argType.genericIndex
|
||||||
) { genericType ->
|
) { genericType ->
|
||||||
// if we encountered generic type parameter in one of subclasses of sealed class, use polymorphism from upper bound
|
// 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(
|
stackValueSerializerInstance(
|
||||||
(genericType.classifierOrNull as IrTypeParameterSymbol).owner.representativeUpperBound,
|
(genericType.classifierOrNull as IrTypeParameterSymbol).owner.representativeUpperBound,
|
||||||
jvmBackendContext.referenceClass(module.getClassFromSerializationPackage(SpecialBuiltins.polymorphicSerializer)),
|
jvmBackendContext.referenceClass(module.getClassFromSerializationPackage(SpecialBuiltins.polymorphicSerializer)),
|
||||||
this
|
this, intrinsicType
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -380,7 +476,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex
|
|||||||
signature.append("Ljava/lang/Object;")
|
signature.append("Ljava/lang/Object;")
|
||||||
}
|
}
|
||||||
// all serializers get arguments with serializers of their generic types
|
// all serializers get arguments with serializers of their generic types
|
||||||
else -> argSerializers.forEach { instantiate(it) }
|
else -> argSerializers.forEach { instantiate(it, signature) }
|
||||||
}
|
}
|
||||||
signature.append(")V")
|
signature.append(")V")
|
||||||
// invoke constructor
|
// invoke constructor
|
||||||
|
|||||||
+1
-2
@@ -139,8 +139,7 @@ open class SerializationLoweringExtension @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun retrieveIntrinsic(symbol: IrFunctionSymbol): Any? {
|
override fun retrieveIntrinsic(symbol: IrFunctionSymbol): Any? {
|
||||||
if (!SerializationJvmIrIntrinsicSupport.isSerializerReifiedFunction(symbol.owner)) return null
|
return SerializationJvmIrIntrinsicSupport.intrinsicForMethod(symbol.owner)
|
||||||
return SerializationJvmIrIntrinsicSupport.ReifiedSerializerMethod
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun applyPluginDefinedReifiedOperationMarker(
|
override fun applyPluginDefinedReifiedOperationMarker(
|
||||||
|
|||||||
+15
-12
@@ -7,6 +7,7 @@ import kotlinx.serialization.*
|
|||||||
import kotlinx.serialization.json.*
|
import kotlinx.serialization.json.*
|
||||||
import kotlinx.serialization.internal.*
|
import kotlinx.serialization.internal.*
|
||||||
import kotlinx.serialization.descriptors.*
|
import kotlinx.serialization.descriptors.*
|
||||||
|
import kotlinx.serialization.modules.*
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
class Simple(val firstName: String, val lastName: String)
|
class Simple(val firstName: String, val lastName: String)
|
||||||
@@ -17,16 +18,18 @@ data class Box<out T>(val boxed: T)
|
|||||||
@Serializable
|
@Serializable
|
||||||
object SerializableObject {}
|
object SerializableObject {}
|
||||||
|
|
||||||
inline fun <reified T : Any> getSer(): KSerializer<T> {
|
val module = SerializersModule {}
|
||||||
return serializer<T>()
|
|
||||||
|
inline fun <reified T: Any> getSer(module: SerializersModule): KSerializer<T> {
|
||||||
|
return module.serializer<T>()
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun <reified T : Any> getBoxSer(): KSerializer<Box<T>> {
|
inline fun <reified T : Any> getBoxSer(module: SerializersModule): KSerializer<Box<T>> {
|
||||||
return serializer<Box<T>>()
|
return module.serializer<Box<T>>()
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun <reified T : Any> listSer(): KSerializer<List<T>> {
|
inline fun <reified T : Any> listSer(module: SerializersModule): KSerializer<List<T>> {
|
||||||
return serializer<List<T>>()
|
return module.serializer<List<T>>()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun SerialDescriptor.recursiveToString(): String {
|
fun SerialDescriptor.recursiveToString(): String {
|
||||||
@@ -46,17 +49,17 @@ fun assertHasSerializers(kSerializer: KSerializer<*>, list: List<String>) {
|
|||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
assertHasSerializers(serializer<Simple>(), listOf("Simple"))
|
assertHasSerializers(serializer<Simple>(), listOf("Simple"))
|
||||||
assertHasSerializers(getSer<Simple>(), listOf("Simple"))
|
assertHasSerializers(getSer<Simple>(module), listOf("Simple"))
|
||||||
|
|
||||||
assertHasSerializers(getSer<Box<Simple>>(), listOf("Box", "Simple"))
|
assertHasSerializers(getSer<Box<Simple>>(module), listOf("Box", "Simple"))
|
||||||
assertHasSerializers(getBoxSer<Simple>(), 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(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<Int>(), listOf("Int"))
|
||||||
assertHasSerializers(serializer<SerializableObject>(), listOf("SerializableObject"))
|
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"
|
return "OK"
|
||||||
}
|
}
|
||||||
+6
-6
@@ -85,7 +85,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
|||||||
GETSTATIC (Simple, Companion, LSimple$Companion;)
|
GETSTATIC (Simple, Companion, LSimple$Companion;)
|
||||||
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
||||||
LABEL (L2)
|
LABEL (L2)
|
||||||
LINENUMBER (44)
|
LINENUMBER (45)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L3)
|
LABEL (L3)
|
||||||
POP
|
POP
|
||||||
@@ -99,7 +99,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
|||||||
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
||||||
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
||||||
LABEL (L6)
|
LABEL (L6)
|
||||||
LINENUMBER (45)
|
LINENUMBER (46)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L7)
|
LABEL (L7)
|
||||||
POP
|
POP
|
||||||
@@ -113,7 +113,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
|||||||
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
||||||
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
||||||
LABEL (L10)
|
LABEL (L10)
|
||||||
LINENUMBER (46)
|
LINENUMBER (47)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L11)
|
LABEL (L11)
|
||||||
POP
|
POP
|
||||||
@@ -128,7 +128,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
|||||||
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;)
|
||||||
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
||||||
LABEL (L14)
|
LABEL (L14)
|
||||||
LINENUMBER (47)
|
LINENUMBER (48)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L15)
|
LABEL (L15)
|
||||||
POP
|
POP
|
||||||
@@ -154,7 +154,7 @@ public final class IntrinsicsKt : java/lang/Object {
|
|||||||
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;)
|
||||||
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
||||||
LABEL (L18)
|
LABEL (L18)
|
||||||
LINENUMBER (48)
|
LINENUMBER (49)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L19)
|
LABEL (L19)
|
||||||
POP
|
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)
|
||||||
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, <init>, (Lkotlinx/serialization/KSerializer;)V)
|
||||||
LABEL (L22)
|
LABEL (L22)
|
||||||
LINENUMBER (49)
|
LINENUMBER (50)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L23)
|
LABEL (L23)
|
||||||
POP
|
POP
|
||||||
+42
-42
@@ -76,55 +76,55 @@ public final class IntrinsicsKt : java/lang/Object {
|
|||||||
LDC (LSimple;)
|
LDC (LSimple;)
|
||||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||||
LABEL (L2)
|
LABEL (L2)
|
||||||
LINENUMBER (50)
|
LINENUMBER (51)
|
||||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||||
ASTORE (1)
|
ASTORE (1)
|
||||||
LABEL (L3)
|
LABEL (L3)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (2)
|
ISTORE (2)
|
||||||
LABEL (L4)
|
LABEL (L4)
|
||||||
LINENUMBER (51)
|
LINENUMBER (52)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
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)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
LABEL (L5)
|
LABEL (L5)
|
||||||
LINENUMBER (50)
|
LINENUMBER (51)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L6)
|
LABEL (L6)
|
||||||
LINENUMBER (29)
|
LINENUMBER (29)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (0)
|
ISTORE (0)
|
||||||
LABEL (L7)
|
LABEL (L7)
|
||||||
LINENUMBER (52)
|
LINENUMBER (53)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (1)
|
ISTORE (1)
|
||||||
LABEL (L8)
|
LABEL (L8)
|
||||||
LDC (LSimple;)
|
LDC (LSimple;)
|
||||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||||
LABEL (L9)
|
LABEL (L9)
|
||||||
LINENUMBER (53)
|
LINENUMBER (54)
|
||||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||||
ASTORE (2)
|
ASTORE (2)
|
||||||
LABEL (L10)
|
LABEL (L10)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (3)
|
ISTORE (3)
|
||||||
LABEL (L11)
|
LABEL (L11)
|
||||||
LINENUMBER (54)
|
LINENUMBER (55)
|
||||||
ALOAD (2)
|
ALOAD (2)
|
||||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
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)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
LABEL (L12)
|
LABEL (L12)
|
||||||
LINENUMBER (53)
|
LINENUMBER (54)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L13)
|
LABEL (L13)
|
||||||
LINENUMBER (52)
|
LINENUMBER (53)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L14)
|
LABEL (L14)
|
||||||
LINENUMBER (30)
|
LINENUMBER (30)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (0)
|
ISTORE (0)
|
||||||
LABEL (L15)
|
LABEL (L15)
|
||||||
LINENUMBER (55)
|
LINENUMBER (56)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (1)
|
ISTORE (1)
|
||||||
LABEL (L16)
|
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;)
|
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 (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||||
LABEL (L17)
|
LABEL (L17)
|
||||||
LINENUMBER (56)
|
LINENUMBER (57)
|
||||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||||
ASTORE (2)
|
ASTORE (2)
|
||||||
LABEL (L18)
|
LABEL (L18)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (3)
|
ISTORE (3)
|
||||||
LABEL (L19)
|
LABEL (L19)
|
||||||
LINENUMBER (57)
|
LINENUMBER (58)
|
||||||
ALOAD (2)
|
ALOAD (2)
|
||||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
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)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
LABEL (L20)
|
LABEL (L20)
|
||||||
LINENUMBER (56)
|
LINENUMBER (57)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L21)
|
LABEL (L21)
|
||||||
LINENUMBER (55)
|
LINENUMBER (56)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L22)
|
LABEL (L22)
|
||||||
LINENUMBER (31)
|
LINENUMBER (31)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (0)
|
ISTORE (0)
|
||||||
LABEL (L23)
|
LABEL (L23)
|
||||||
LINENUMBER (58)
|
LINENUMBER (59)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (1)
|
ISTORE (1)
|
||||||
LABEL (L24)
|
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;)
|
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 (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||||
LABEL (L25)
|
LABEL (L25)
|
||||||
LINENUMBER (59)
|
LINENUMBER (60)
|
||||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||||
ASTORE (2)
|
ASTORE (2)
|
||||||
LABEL (L26)
|
LABEL (L26)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (3)
|
ISTORE (3)
|
||||||
LABEL (L27)
|
LABEL (L27)
|
||||||
LINENUMBER (60)
|
LINENUMBER (61)
|
||||||
ALOAD (2)
|
ALOAD (2)
|
||||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
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)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
LABEL (L28)
|
LABEL (L28)
|
||||||
LINENUMBER (59)
|
LINENUMBER (60)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L29)
|
LABEL (L29)
|
||||||
LINENUMBER (58)
|
LINENUMBER (59)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L30)
|
LABEL (L30)
|
||||||
LINENUMBER (32)
|
LINENUMBER (32)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (0)
|
ISTORE (0)
|
||||||
LABEL (L31)
|
LABEL (L31)
|
||||||
LINENUMBER (61)
|
LINENUMBER (62)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (1)
|
ISTORE (1)
|
||||||
LABEL (L32)
|
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;)
|
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 (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||||
LABEL (L33)
|
LABEL (L33)
|
||||||
LINENUMBER (62)
|
LINENUMBER (63)
|
||||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||||
ASTORE (2)
|
ASTORE (2)
|
||||||
LABEL (L34)
|
LABEL (L34)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (3)
|
ISTORE (3)
|
||||||
LABEL (L35)
|
LABEL (L35)
|
||||||
LINENUMBER (63)
|
LINENUMBER (64)
|
||||||
ALOAD (2)
|
ALOAD (2)
|
||||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
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)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
LABEL (L36)
|
LABEL (L36)
|
||||||
LINENUMBER (62)
|
LINENUMBER (63)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L37)
|
LABEL (L37)
|
||||||
LINENUMBER (61)
|
LINENUMBER (62)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L38)
|
LABEL (L38)
|
||||||
LINENUMBER (34)
|
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;)
|
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 (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||||
LABEL (L40)
|
LABEL (L40)
|
||||||
LINENUMBER (64)
|
LINENUMBER (65)
|
||||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||||
ASTORE (1)
|
ASTORE (1)
|
||||||
LABEL (L41)
|
LABEL (L41)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (2)
|
ISTORE (2)
|
||||||
LABEL (L42)
|
LABEL (L42)
|
||||||
LINENUMBER (65)
|
LINENUMBER (66)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
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)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
LABEL (L43)
|
LABEL (L43)
|
||||||
LINENUMBER (64)
|
LINENUMBER (65)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L44)
|
LABEL (L44)
|
||||||
LINENUMBER (36)
|
LINENUMBER (36)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (0)
|
ISTORE (0)
|
||||||
LABEL (L45)
|
LABEL (L45)
|
||||||
LINENUMBER (66)
|
LINENUMBER (67)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (1)
|
ISTORE (1)
|
||||||
LABEL (L46)
|
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;)
|
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 (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||||
LABEL (L47)
|
LABEL (L47)
|
||||||
LINENUMBER (67)
|
LINENUMBER (68)
|
||||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||||
ASTORE (2)
|
ASTORE (2)
|
||||||
LABEL (L48)
|
LABEL (L48)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (3)
|
ISTORE (3)
|
||||||
LABEL (L49)
|
LABEL (L49)
|
||||||
LINENUMBER (68)
|
LINENUMBER (69)
|
||||||
ALOAD (2)
|
ALOAD (2)
|
||||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
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)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
LABEL (L50)
|
LABEL (L50)
|
||||||
LINENUMBER (67)
|
LINENUMBER (68)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L51)
|
LABEL (L51)
|
||||||
LINENUMBER (66)
|
LINENUMBER (67)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L52)
|
LABEL (L52)
|
||||||
LINENUMBER (38)
|
LINENUMBER (38)
|
||||||
@@ -297,19 +297,19 @@ public final class IntrinsicsKt : java/lang/Object {
|
|||||||
GETSTATIC (java/lang/Integer, TYPE, Ljava/lang/Class;)
|
GETSTATIC (java/lang/Integer, TYPE, Ljava/lang/Class;)
|
||||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||||
LABEL (L54)
|
LABEL (L54)
|
||||||
LINENUMBER (69)
|
LINENUMBER (70)
|
||||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||||
ASTORE (1)
|
ASTORE (1)
|
||||||
LABEL (L55)
|
LABEL (L55)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (2)
|
ISTORE (2)
|
||||||
LABEL (L56)
|
LABEL (L56)
|
||||||
LINENUMBER (70)
|
LINENUMBER (71)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
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)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
LABEL (L57)
|
LABEL (L57)
|
||||||
LINENUMBER (69)
|
LINENUMBER (70)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L58)
|
LABEL (L58)
|
||||||
LINENUMBER (40)
|
LINENUMBER (40)
|
||||||
@@ -319,26 +319,26 @@ public final class IntrinsicsKt : java/lang/Object {
|
|||||||
LDC (LSerializableObject;)
|
LDC (LSerializableObject;)
|
||||||
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;)
|
||||||
LABEL (L60)
|
LABEL (L60)
|
||||||
LINENUMBER (71)
|
LINENUMBER (72)
|
||||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||||
ASTORE (1)
|
ASTORE (1)
|
||||||
LABEL (L61)
|
LABEL (L61)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (2)
|
ISTORE (2)
|
||||||
LABEL (L62)
|
LABEL (L62)
|
||||||
LINENUMBER (72)
|
LINENUMBER (73)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
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)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
LABEL (L63)
|
LABEL (L63)
|
||||||
LINENUMBER (71)
|
LINENUMBER (72)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L64)
|
LABEL (L64)
|
||||||
LINENUMBER (42)
|
LINENUMBER (42)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (0)
|
ISTORE (0)
|
||||||
LABEL (L65)
|
LABEL (L65)
|
||||||
LINENUMBER (73)
|
LINENUMBER (74)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (1)
|
ISTORE (1)
|
||||||
LABEL (L66)
|
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;)
|
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 (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;)
|
||||||
LABEL (L67)
|
LABEL (L67)
|
||||||
LINENUMBER (74)
|
LINENUMBER (75)
|
||||||
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;)
|
||||||
ASTORE (2)
|
ASTORE (2)
|
||||||
LABEL (L68)
|
LABEL (L68)
|
||||||
ICONST_0
|
ICONST_0
|
||||||
ISTORE (3)
|
ISTORE (3)
|
||||||
LABEL (L69)
|
LABEL (L69)
|
||||||
LINENUMBER (75)
|
LINENUMBER (76)
|
||||||
ALOAD (2)
|
ALOAD (2)
|
||||||
LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
|
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)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
LABEL (L70)
|
LABEL (L70)
|
||||||
LINENUMBER (74)
|
LINENUMBER (75)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L71)
|
LABEL (L71)
|
||||||
LINENUMBER (73)
|
LINENUMBER (74)
|
||||||
NOP
|
NOP
|
||||||
LABEL (L72)
|
LABEL (L72)
|
||||||
LINENUMBER (43)
|
LINENUMBER (43)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
// CURIOUS_ABOUT test
|
// CURIOUS_ABOUT: test
|
||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
|
|
||||||
import kotlinx.serialization.*
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("Sealed.kt")
|
@TestMetadata("Sealed.kt")
|
||||||
public void testSealed() throws Exception {
|
public void testSealed() throws Exception {
|
||||||
|
|||||||
+6
@@ -57,6 +57,12 @@ public class SerializationFirBlackBoxTestGenerated extends AbstractSerialization
|
|||||||
runTest("plugins/kotlinx-serialization/testData/boxIr/inlineClasses.kt");
|
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
|
@Test
|
||||||
@TestMetadata("metaSerializable.kt")
|
@TestMetadata("metaSerializable.kt")
|
||||||
public void testMetaSerializable() throws Exception {
|
public void testMetaSerializable() throws Exception {
|
||||||
|
|||||||
+6
@@ -43,6 +43,12 @@ public class SerializationIrAsmLikeInstructionsListingTestGenerated extends Abst
|
|||||||
runTest("plugins/kotlinx-serialization/testData/codegen/Intrinsics.kt");
|
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
|
@Test
|
||||||
@TestMetadata("Sealed.kt")
|
@TestMetadata("Sealed.kt")
|
||||||
public void testSealed() throws Exception {
|
public void testSealed() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user