@@ -3,18 +3,23 @@ package me.shika.generation
3
3
import org.jetbrains.kotlin.backend.common.BackendContext
4
4
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
5
5
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
6
+ import org.jetbrains.kotlin.descriptors.Visibilities
6
7
import org.jetbrains.kotlin.ir.IrElement
7
8
import org.jetbrains.kotlin.ir.builders.declarations.addFunction
8
9
import org.jetbrains.kotlin.ir.builders.irBlockBody
9
10
import org.jetbrains.kotlin.ir.builders.irGetObject
10
11
import org.jetbrains.kotlin.ir.builders.irReturn
11
12
import org.jetbrains.kotlin.ir.declarations.IrClass
13
+ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
12
14
import org.jetbrains.kotlin.ir.declarations.IrFile
13
15
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
14
16
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
15
17
import org.jetbrains.kotlin.ir.visitors.acceptVoid
18
+ import org.jetbrains.kotlin.name.Name
16
19
import org.jetbrains.kotlin.resolve.BindingContext
17
20
21
+ private object ObjectSerializationOrigin : IrDeclarationOriginImpl(" object-serialization-fix" , isSynthetic = true )
22
+
18
23
class ObjectSerializationIrGeneration : IrGenerationExtension {
19
24
override fun generate (file : IrFile , backendContext : BackendContext , bindingContext : BindingContext ) {
20
25
file.acceptVoid(
@@ -27,7 +32,12 @@ class ObjectSerializationIrGeneration : IrGenerationExtension {
27
32
}
28
33
29
34
private fun fixSerializable (cls : IrClass , context : BackendContext ) {
30
- cls.addFunction(SERIALIZABLE_READ , context.irBuiltIns.anyNType).also { function ->
35
+ cls.addFunction {
36
+ name = Name .identifier(SERIALIZABLE_READ )
37
+ returnType = context.irBuiltIns.anyNType
38
+ visibility = Visibilities .PUBLIC
39
+ origin = ObjectSerializationOrigin
40
+ }.also { function ->
31
41
function.body = context.createIrBuilder(function.symbol).irBlockBody {
32
42
+ irReturn(irGetObject(cls.symbol))
33
43
}
0 commit comments