From c78b9f2f2900f4f4c6d8c8d63cf246cdb0f81c3c Mon Sep 17 00:00:00 2001 From: Tianyu Zhu Date: Tue, 17 Dec 2024 13:20:00 -0700 Subject: [PATCH] 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 = """