Do not pre-generate writeSelf function for non-JVM platforms

write$Self in K1 is created only on JVM, so we need this check to avoid
creating IR function without original descriptor — it will lead to various
bugs in JS and Native, such as superclass properties missing from output
when super.writeSelf is not found in descriptor.

Fixes #KT-55180
This commit is contained in:
Leonid Startsev
2022-11-30 18:46:47 +01:00
committed by Space Team
parent 3f4a937ad6
commit ee9d9d7b32
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.companionObject
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPluginContext
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames
import org.jetbrains.kotlinx.serialization.compiler.resolve.bitMaskSlotCount
@@ -38,6 +39,8 @@ class IrPreGenerator(
}
private fun preGenerateWriteSelfMethodIfNeeded() {
// write$Self in K1 is created only on JVM (see SerializationResolveExtension)
if (!compilerContext.platform.isJvm()) return
if (!irClass.isInternalSerializable) return
val serializerDescriptor = irClass.classSerializer(compilerContext)?.owner ?: return
if (!irClass.shouldHaveSpecificSyntheticMethods {