Skip to content

Commit 800b6a8

Browse files
author
Andrei Shikov
committed
Add synthetic flags for IR
1 parent 20170ab commit 800b6a8

File tree

4 files changed

+13
-6
lines changed

4 files changed

+13
-6
lines changed

build.gradle

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,3 @@ allprojects {
1515
group 'me.shika'
1616
version '1.0.1'
1717
}
18-
19-
dependencies {
20-
testCompile group: 'junit', name: 'junit', version: '4.12'
21-
}

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#Wed Dec 18 22:46:33 GMT 2019
2-
distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip
2+
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip
33
distributionBase=GRADLE_USER_HOME
44
distributionPath=wrapper/dists
55
zipStorePath=wrapper/dists

kotlin-plugin/src/main/kotlin/me/shika/generation/ObjectSerializationIRGeneration.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,23 @@ package me.shika.generation
33
import org.jetbrains.kotlin.backend.common.BackendContext
44
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
55
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
6+
import org.jetbrains.kotlin.descriptors.Visibilities
67
import org.jetbrains.kotlin.ir.IrElement
78
import org.jetbrains.kotlin.ir.builders.declarations.addFunction
89
import org.jetbrains.kotlin.ir.builders.irBlockBody
910
import org.jetbrains.kotlin.ir.builders.irGetObject
1011
import org.jetbrains.kotlin.ir.builders.irReturn
1112
import org.jetbrains.kotlin.ir.declarations.IrClass
13+
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
1214
import org.jetbrains.kotlin.ir.declarations.IrFile
1315
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
1416
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
1517
import org.jetbrains.kotlin.ir.visitors.acceptVoid
18+
import org.jetbrains.kotlin.name.Name
1619
import org.jetbrains.kotlin.resolve.BindingContext
1720

21+
private object ObjectSerializationOrigin : IrDeclarationOriginImpl("object-serialization-fix", isSynthetic = true)
22+
1823
class ObjectSerializationIrGeneration : IrGenerationExtension {
1924
override fun generate(file: IrFile, backendContext: BackendContext, bindingContext: BindingContext) {
2025
file.acceptVoid(
@@ -27,7 +32,12 @@ class ObjectSerializationIrGeneration : IrGenerationExtension {
2732
}
2833

2934
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 ->
3141
function.body = context.createIrBuilder(function.symbol).irBlockBody {
3242
+irReturn(irGetObject(cls.symbol))
3343
}

kotlin-plugin/src/test/kotlin/me/shika/ObjectSerializationFixTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ class ObjectSerializationFixTest(enableIr: Boolean) {
7070
name == "readResolve"
7171
&& parameterCount == 0
7272
&& returnType == Object::class.java
73+
&& isSynthetic
7374
}
7475

7576
fun String.source() = SourceFile.kotlin("Source.kt", this, trimIndent = true)

0 commit comments

Comments
 (0)