From c78b9f2f2900f4f4c6d8c8d63cf246cdb0f81c3c Mon Sep 17 00:00:00 2001 From: Tianyu Zhu Date: Tue, 17 Dec 2024 13:20:00 -0700 Subject: [PATCH 1/3] Support Kotlin 2 --- build.gradle | 2 +- gradle-plugin/build.gradle | 4 +- gradle/utils/embedded.gradle | 40 ------------------- kotlin-plugin/build.gradle | 3 +- .../ObjectSerializationIRGeneration.kt | 4 +- .../me/shika/ObjectSerializationFixTest.kt | 13 +----- 6 files changed, 7 insertions(+), 59 deletions(-) delete mode 100644 gradle/utils/embedded.gradle diff --git a/build.gradle b/build.gradle index 08257c3..3966b49 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id 'java' - id 'org.jetbrains.kotlin.jvm' version '1.8.20' + id 'org.jetbrains.kotlin.jvm' version '2.0.0' } allprojects { diff --git a/gradle-plugin/build.gradle b/gradle-plugin/build.gradle index e711846..b3fff09 100644 --- a/gradle-plugin/build.gradle +++ b/gradle-plugin/build.gradle @@ -5,8 +5,6 @@ plugins { id 'org.jetbrains.kotlin.jvm' } -apply from: rootProject.file('gradle/utils/embedded.gradle') - gradlePlugin { website = 'https://github.com/ShikaSD/kotlin-object-serialization-fix' vcsUrl = 'https://github.com/ShikaSD/kotlin-object-serialization-fix.git' @@ -26,5 +24,5 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" implementation "org.jetbrains.kotlin:kotlin-gradle-plugin-api" - embedded project(':kotlin-plugin') + runtimeOnly(project(':kotlin-plugin')) } diff --git a/gradle/utils/embedded.gradle b/gradle/utils/embedded.gradle deleted file mode 100644 index 216a871..0000000 --- a/gradle/utils/embedded.gradle +++ /dev/null @@ -1,40 +0,0 @@ -configurations { - embedded { - transitive = false - } - compileOnly.extendsFrom(embedded) -} - -def embeddedProjects() { - return project.configurations.findByName('embedded') - .resolvedConfiguration - .resolvedArtifacts - .findAll { it.id.componentIdentifier instanceof ProjectComponentIdentifier } - .collect { project(it.id.componentIdentifier.projectPath) } -} - -afterEvaluate { - dependencies { - embeddedProjects().collect { it.configurations.findByName("published") } - .forEach { - it.dependencies.forEach { - runtime "$it.group:$it.name:$it.version" - } - } - } - - jar { - from project.configurations.embedded.collect { - zipTree(it) - } - } - - tasks.getByName("sourcesJar") { - archiveClassifier = 'sources' - from embeddedProjects().collect { it.sourceSets.main.allSource } - } - - artifacts { - archives sourcesJar - } -} diff --git a/kotlin-plugin/build.gradle b/kotlin-plugin/build.gradle index 887317a..f529774 100644 --- a/kotlin-plugin/build.gradle +++ b/kotlin-plugin/build.gradle @@ -10,7 +10,8 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-gradle-plugin-api" compileOnly "org.jetbrains.kotlin:kotlin-compiler-embeddable" - testImplementation 'com.github.tschuchortdev:kotlin-compile-testing:1.5.0' + // testImplementation 'com.github.tschuchortdev:kotlin-compile-testing:1.5.0' does not support Kotlin 2 + testImplementation 'dev.zacsweers.kctfork:core:0.6.0' // Fork of kotlin-compile-testing that supports Kotlin 2 testImplementation 'junit:junit:4.12' testImplementation 'org.jetbrains.kotlin:kotlin-compiler-embeddable' } diff --git a/kotlin-plugin/src/main/kotlin/me/shika/generation/ObjectSerializationIRGeneration.kt b/kotlin-plugin/src/main/kotlin/me/shika/generation/ObjectSerializationIRGeneration.kt index 8a97222..880dd62 100644 --- a/kotlin-plugin/src/main/kotlin/me/shika/generation/ObjectSerializationIRGeneration.kt +++ b/kotlin-plugin/src/main/kotlin/me/shika/generation/ObjectSerializationIRGeneration.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid -private object ObjectSerializationOrigin : IrDeclarationOriginImpl("object-serialization-fix", isSynthetic = true) +private val objectSerializationOrigin = IrDeclarationOriginImpl("object-serialization-fix", isSynthetic = true) class ObjectSerializationIrGeneration : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { @@ -37,7 +37,7 @@ class ObjectSerializationIrGeneration : IrGenerationExtension { name = SERIALIZABLE_READ returnType = context.irBuiltIns.anyNType visibility = DescriptorVisibilities.PUBLIC - origin = ObjectSerializationOrigin + origin = objectSerializationOrigin }.also { function -> // Ensure it is not static function.dispatchReceiverParameter = cls.thisReceiver?.copyTo(function) diff --git a/kotlin-plugin/src/test/kotlin/me/shika/ObjectSerializationFixTest.kt b/kotlin-plugin/src/test/kotlin/me/shika/ObjectSerializationFixTest.kt index 697df7d..28054d7 100644 --- a/kotlin-plugin/src/test/kotlin/me/shika/ObjectSerializationFixTest.kt +++ b/kotlin-plugin/src/test/kotlin/me/shika/ObjectSerializationFixTest.kt @@ -5,25 +5,14 @@ import com.tschuchort.compiletesting.SourceFile import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi import org.junit.Assert.assertTrue import org.junit.Test -import org.junit.runner.RunWith -import org.junit.runners.Parameterized import org.junit.runners.Parameterized.Parameters import java.lang.reflect.Method @OptIn(ExperimentalCompilerApi::class) -@RunWith(Parameterized::class) -class ObjectSerializationFixTest(enableIr: Boolean, enableFir: Boolean) { - companion object { - @Parameters(name = "IR: {0}, FIR: {1}") - @JvmStatic - fun data() = arrayOf(arrayOf(false, false), arrayOf(true, false), arrayOf(true, true)) - } - +class ObjectSerializationFixTest { private val compiler = KotlinCompilation().apply { compilerPluginRegistrars = listOf(ObjectSerializationCompilerPluginRegistrar()) - useIR = enableIr supportsK2 = true - useK2 = enableFir } private val SERIALIZABLE_OBJECT = """ From 056f4e634df2923b1b457baadc46a759395bed20 Mon Sep 17 00:00:00 2001 From: Tianyu Zhu Date: Tue, 17 Dec 2024 13:21:30 -0700 Subject: [PATCH 2/3] Upgrade junit to 4.13.2 --- integration-test/build.gradle | 2 +- kotlin-plugin/build.gradle | 2 +- .../src/test/kotlin/me/shika/ObjectSerializationFixTest.kt | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/integration-test/build.gradle b/integration-test/build.gradle index daf228f..1e8e328 100644 --- a/integration-test/build.gradle +++ b/integration-test/build.gradle @@ -7,7 +7,7 @@ plugins { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" implementation project('scala-module') - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13.2' kotlinCompilerPluginClasspath project(':kotlin-plugin') } \ No newline at end of file diff --git a/kotlin-plugin/build.gradle b/kotlin-plugin/build.gradle index f529774..d7216bf 100644 --- a/kotlin-plugin/build.gradle +++ b/kotlin-plugin/build.gradle @@ -12,6 +12,6 @@ dependencies { // testImplementation 'com.github.tschuchortdev:kotlin-compile-testing:1.5.0' does not support Kotlin 2 testImplementation 'dev.zacsweers.kctfork:core:0.6.0' // Fork of kotlin-compile-testing that supports Kotlin 2 - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13.2' testImplementation 'org.jetbrains.kotlin:kotlin-compiler-embeddable' } diff --git a/kotlin-plugin/src/test/kotlin/me/shika/ObjectSerializationFixTest.kt b/kotlin-plugin/src/test/kotlin/me/shika/ObjectSerializationFixTest.kt index 28054d7..dc2b789 100644 --- a/kotlin-plugin/src/test/kotlin/me/shika/ObjectSerializationFixTest.kt +++ b/kotlin-plugin/src/test/kotlin/me/shika/ObjectSerializationFixTest.kt @@ -5,7 +5,6 @@ import com.tschuchort.compiletesting.SourceFile import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi import org.junit.Assert.assertTrue import org.junit.Test -import org.junit.runners.Parameterized.Parameters import java.lang.reflect.Method @OptIn(ExperimentalCompilerApi::class) From 9c537a7ae688f9e086b80884b1fa08b31374d8b3 Mon Sep 17 00:00:00 2001 From: Tianyu Zhu Date: Thu, 2 Jan 2025 07:58:55 -0700 Subject: [PATCH 3/3] Resurrect embedded.gradle --- gradle-plugin/build.gradle | 4 +++- gradle/utils/embedded.gradle | 40 ++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gradle/utils/embedded.gradle diff --git a/gradle-plugin/build.gradle b/gradle-plugin/build.gradle index b3fff09..e711846 100644 --- a/gradle-plugin/build.gradle +++ b/gradle-plugin/build.gradle @@ -5,6 +5,8 @@ plugins { id 'org.jetbrains.kotlin.jvm' } +apply from: rootProject.file('gradle/utils/embedded.gradle') + gradlePlugin { website = 'https://github.com/ShikaSD/kotlin-object-serialization-fix' vcsUrl = 'https://github.com/ShikaSD/kotlin-object-serialization-fix.git' @@ -24,5 +26,5 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" implementation "org.jetbrains.kotlin:kotlin-gradle-plugin-api" - runtimeOnly(project(':kotlin-plugin')) + embedded project(':kotlin-plugin') } diff --git a/gradle/utils/embedded.gradle b/gradle/utils/embedded.gradle new file mode 100644 index 0000000..216a871 --- /dev/null +++ b/gradle/utils/embedded.gradle @@ -0,0 +1,40 @@ +configurations { + embedded { + transitive = false + } + compileOnly.extendsFrom(embedded) +} + +def embeddedProjects() { + return project.configurations.findByName('embedded') + .resolvedConfiguration + .resolvedArtifacts + .findAll { it.id.componentIdentifier instanceof ProjectComponentIdentifier } + .collect { project(it.id.componentIdentifier.projectPath) } +} + +afterEvaluate { + dependencies { + embeddedProjects().collect { it.configurations.findByName("published") } + .forEach { + it.dependencies.forEach { + runtime "$it.group:$it.name:$it.version" + } + } + } + + jar { + from project.configurations.embedded.collect { + zipTree(it) + } + } + + tasks.getByName("sourcesJar") { + archiveClassifier = 'sources' + from embeddedProjects().collect { it.sourceSets.main.allSource } + } + + artifacts { + archives sourcesJar + } +}