diff --git a/build-support/build.gradle.kts b/build-support/build.gradle.kts index a2cdb9ee63..52e0708ceb 100644 --- a/build-support/build.gradle.kts +++ b/build-support/build.gradle.kts @@ -81,7 +81,7 @@ allprojects { tasks.withType().configureEach { compilerOptions { jvmTarget.set(JvmTarget.JVM_11) - freeCompilerArgs.add("-Xjvm-default=all") + freeCompilerArgs.add("-jvm-default=no-compatibility") } } } diff --git a/build-support/src/main/kotlin/com/squareup/wire/buildsupport/WireBuildPlugin.kt b/build-support/src/main/kotlin/com/squareup/wire/buildsupport/WireBuildPlugin.kt index 01eb44e881..1feb9747b9 100644 --- a/build-support/src/main/kotlin/com/squareup/wire/buildsupport/WireBuildPlugin.kt +++ b/build-support/src/main/kotlin/com/squareup/wire/buildsupport/WireBuildPlugin.kt @@ -50,7 +50,6 @@ import org.gradle.kotlin.dsl.register import org.gradle.kotlin.dsl.withType import org.jetbrains.dokka.gradle.DokkaExtension import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinVersion @@ -231,7 +230,7 @@ class WireBuildPlugin : Plugin { tasks.withType(KotlinJvmCompile::class.java).configureEach { compilerOptions { jvmTarget.set(JvmTarget.fromTarget(javaVersion.toString())) - freeCompilerArgs.add("-Xjvm-default=all") + freeCompilerArgs.add("-jvm-default=no-compatibility") } } // Kotlin requires the Java compatibility matches. @@ -252,48 +251,46 @@ class WireBuildPlugin : Plugin { kotlin.configureWebKotlinLibraries() } plugins.withId("org.jetbrains.kotlin.js") { - val kotlin = extensions.getByName("kotlin") as KotlinJsProjectExtension - kotlin.configureWebKotlinLibraries() + val kotlin = extensions.getByName("kotlin") as KotlinProjectExtension + kotlin.configureJsKotlinLibraries() } } // For KotlinWasm/Js, versions of toolchain and stdlib need to be the same: // https://youtrack.jetbrains.com/issue/KT-71032 - private fun KotlinProjectExtension.configureWebKotlinLibraries() { + private fun KotlinProjectExtension.configureJsKotlinLibraries() { val kotlinVersion = project.getVersionByName("kotlin") - when (this) { - is KotlinJsProjectExtension -> { - val suffix = "js" - sourceSets.apply { - getByName("main").dependencies { - implementation("org.jetbrains.kotlin:kotlin-stdlib-$suffix:$kotlinVersion") - } - getByName("test").dependencies { - implementation("org.jetbrains.kotlin:kotlin-stdlib-$suffix:$kotlinVersion") - implementation("org.jetbrains.kotlin:kotlin-test-$suffix:$kotlinVersion") - } - } + val suffix = "js" + sourceSets.apply { + getByName("main").dependencies { + implementation("org.jetbrains.kotlin:kotlin-stdlib-$suffix:$kotlinVersion") } + getByName("test").dependencies { + implementation("org.jetbrains.kotlin:kotlin-stdlib-$suffix:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-test-$suffix:$kotlinVersion") + } + } + } - is KotlinMultiplatformExtension -> { - targets.matching { it.platformType in listOf(KotlinPlatformType.js, KotlinPlatformType.wasm) }.configureEach { - val suffix = when (platformType) { - KotlinPlatformType.js -> "js" - KotlinPlatformType.wasm -> if (targetName.contains("wasi", true)) "wasm-wasi" else "wasm-js" - else -> return@configureEach - } + private fun KotlinMultiplatformExtension.configureWebKotlinLibraries() { + val kotlinVersion = project.getVersionByName("kotlin") - this@configureWebKotlinLibraries.sourceSets.apply { - getByName("${targetName}Main").dependencies { - implementation("org.jetbrains.kotlin:kotlin-stdlib-$suffix:$kotlinVersion") - } + targets.matching { it.platformType in listOf(KotlinPlatformType.js, KotlinPlatformType.wasm) }.configureEach { + val suffix = when (platformType) { + KotlinPlatformType.js -> "js" + KotlinPlatformType.wasm -> if (targetName.contains("wasi", true)) "wasm-wasi" else "wasm-js" + else -> return@configureEach + } - getByName("${targetName}Test").dependencies { - implementation("org.jetbrains.kotlin:kotlin-stdlib-$suffix:$kotlinVersion") - implementation("org.jetbrains.kotlin:kotlin-test-$suffix:$kotlinVersion") - } - } + this@configureWebKotlinLibraries.sourceSets.apply { + getByName("${targetName}Main").dependencies { + implementation("org.jetbrains.kotlin:kotlin-stdlib-$suffix:$kotlinVersion") + } + + getByName("${targetName}Test").dependencies { + implementation("org.jetbrains.kotlin:kotlin-stdlib-$suffix:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-test-$suffix:$kotlinVersion") } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d34b443904..8018f4ea60 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ jimfs = "1.3.1" jmh = "1.37" jsr305 = "3.0.2" junit = "4.13.2" -kotlin = "2.3.21" +kotlin = "2.4.0" # Set to lower version than KGP version to maximize compatibility kotlinCoreLibrariesVersion = "2.0.21" kotlinpoet = "2.3.0" diff --git a/samples/js/build.gradle.kts b/samples/js/build.gradle.kts index 053722d0e0..a413b8ce4f 100644 --- a/samples/js/build.gradle.kts +++ b/samples/js/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - kotlin("js") + kotlin("multiplatform") id("com.squareup.wire") } diff --git a/samples/wire-grpc-sample/server/build.gradle.kts b/samples/wire-grpc-sample/server/build.gradle.kts index 1dcfc165ed..7b672374d7 100644 --- a/samples/wire-grpc-sample/server/build.gradle.kts +++ b/samples/wire-grpc-sample/server/build.gradle.kts @@ -19,7 +19,7 @@ tasks.withType().configureEach { tasks.withType().configureEach { compilerOptions { jvmTarget.set(JvmTarget.JVM_17) - freeCompilerArgs.add("-Xjvm-default=all") + freeCompilerArgs.add("-jvm-default=no-compatibility") } } diff --git a/wire-gradle-plugin/src/main/kotlin/com/squareup/wire/gradle/WirePlugin.kt b/wire-gradle-plugin/src/main/kotlin/com/squareup/wire/gradle/WirePlugin.kt index fbff3d7eba..986851ebcf 100644 --- a/wire-gradle-plugin/src/main/kotlin/com/squareup/wire/gradle/WirePlugin.kt +++ b/wire-gradle-plugin/src/main/kotlin/com/squareup/wire/gradle/WirePlugin.kt @@ -28,8 +28,8 @@ import org.gradle.api.Project import org.gradle.api.artifacts.UnknownConfigurationException import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSetContainer -import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet class WirePlugin : Plugin { @@ -270,7 +270,7 @@ class WirePlugin : Plugin { isJsOnly -> { val sourceSets = - project.extensions.getByType(KotlinJsProjectExtension::class.java).sourceSets + project.extensions.getByType(KotlinProjectExtension::class.java).sourceSets val sourceSet = (sourceSets.getByName("main") as DefaultKotlinSourceSet) project.dependencies.add(sourceSet.apiConfigurationName, runtimeDependency) } diff --git a/wire-gradle-plugin/src/test/kotlin/com/squareup/wire/gradle/WirePluginTest.kt b/wire-gradle-plugin/src/test/kotlin/com/squareup/wire/gradle/WirePluginTest.kt index 5565e19e48..8d09a92a91 100644 --- a/wire-gradle-plugin/src/test/kotlin/com/squareup/wire/gradle/WirePluginTest.kt +++ b/wire-gradle-plugin/src/test/kotlin/com/squareup/wire/gradle/WirePluginTest.kt @@ -1266,7 +1266,7 @@ class WirePluginTest { } assertThat(buildCacheDir.exists()).isFalse() - val generatedProto = "build/generated/source/wire/com/squareup/geology/Period.kt" + val generatedProto = "build/generated/source/wire/com/squareup/geology/Period.java" val fixtureRoot = File("src/test/projects/cache-relocation-1") val result = fixtureGradleRunner(fixtureRoot) @@ -1319,7 +1319,7 @@ class WirePluginTest { } assertThat(buildCacheDir.exists()).isFalse() - val generatedStatus = "build/generated/source/wire/com/google/rpc/Status.kt" + val generatedStatus = "build/generated/source/wire/com/google/rpc/Status.java" val fixtureRoot = File("src/test/projects/cache-source-relocation-1") val result = fixtureGradleRunner(fixtureRoot) diff --git a/wire-gradle-plugin/src/test/projects/cache-relocation-1/build.gradle b/wire-gradle-plugin/src/test/projects/cache-relocation-1/build.gradle index c33f6c7b57..d6c72cb929 100644 --- a/wire-gradle-plugin/src/test/projects/cache-relocation-1/build.gradle +++ b/wire-gradle-plugin/src/test/projects/cache-relocation-1/build.gradle @@ -1,7 +1,6 @@ buildscript { dependencies { classpath "com.squareup.wire:wire-gradle-plugin:$wireVersion" - classpath libs.pluginz.kotlin } repositories { @@ -14,7 +13,6 @@ buildscript { } apply plugin: 'application' -apply plugin: 'org.jetbrains.kotlin.jvm' apply plugin: 'com.squareup.wire' // The code in this test project should be identical to @@ -35,6 +33,6 @@ dependencies { } wire { - kotlin { + java { } } diff --git a/wire-gradle-plugin/src/test/projects/cache-relocation-2/build.gradle b/wire-gradle-plugin/src/test/projects/cache-relocation-2/build.gradle index 09df7f5971..5a63d86e86 100644 --- a/wire-gradle-plugin/src/test/projects/cache-relocation-2/build.gradle +++ b/wire-gradle-plugin/src/test/projects/cache-relocation-2/build.gradle @@ -1,7 +1,6 @@ buildscript { dependencies { classpath "com.squareup.wire:wire-gradle-plugin:$wireVersion" - classpath libs.pluginz.kotlin } repositories { @@ -14,7 +13,6 @@ buildscript { } apply plugin: 'application' -apply plugin: 'org.jetbrains.kotlin.jvm' apply plugin: 'com.squareup.wire' // The code in this test project should be identical to @@ -35,6 +33,6 @@ dependencies { } wire { - kotlin { + java { } } diff --git a/wire-gradle-plugin/src/test/projects/cache-source-relocation-1/build.gradle b/wire-gradle-plugin/src/test/projects/cache-source-relocation-1/build.gradle index 16a5bec382..d25aecd8ab 100644 --- a/wire-gradle-plugin/src/test/projects/cache-source-relocation-1/build.gradle +++ b/wire-gradle-plugin/src/test/projects/cache-source-relocation-1/build.gradle @@ -1,7 +1,6 @@ buildscript { dependencies { classpath "com.squareup.wire:wire-gradle-plugin:$wireVersion" - classpath libs.pluginz.kotlin } repositories { @@ -14,7 +13,6 @@ buildscript { } apply plugin: 'application' -apply plugin: 'org.jetbrains.kotlin.jvm' apply plugin: 'com.squareup.wire' // The code in this test project should be identical to @@ -36,6 +34,6 @@ wire { srcJar("com.google.api.grpc:proto-google-common-protos:2.57.0") include("google/rpc/status.proto") } - kotlin { + java { } } diff --git a/wire-gradle-plugin/src/test/projects/cache-source-relocation-2/build.gradle b/wire-gradle-plugin/src/test/projects/cache-source-relocation-2/build.gradle index 36b0c36863..21bc96026d 100644 --- a/wire-gradle-plugin/src/test/projects/cache-source-relocation-2/build.gradle +++ b/wire-gradle-plugin/src/test/projects/cache-source-relocation-2/build.gradle @@ -1,7 +1,6 @@ buildscript { dependencies { classpath "com.squareup.wire:wire-gradle-plugin:$wireVersion" - classpath libs.pluginz.kotlin } repositories { @@ -14,7 +13,6 @@ buildscript { } apply plugin: 'application' -apply plugin: 'org.jetbrains.kotlin.jvm' apply plugin: 'com.squareup.wire' // The code in this test project should be identical to @@ -36,6 +34,6 @@ wire { srcJar("com.google.api.grpc:proto-google-common-protos:2.57.0") include("google/rpc/status.proto") } - kotlin { + java { } } diff --git a/wire-schema/src/commonMain/kotlin/com/squareup/wire/schema/Service.kt b/wire-schema/src/commonMain/kotlin/com/squareup/wire/schema/Service.kt index 87d339381f..517f9e44c4 100644 --- a/wire-schema/src/commonMain/kotlin/com/squareup/wire/schema/Service.kt +++ b/wire-schema/src/commonMain/kotlin/com/squareup/wire/schema/Service.kt @@ -133,7 +133,9 @@ data class Service( ) } - @JvmStatic internal fun fromElements( + @JvmStatic + @JvmName("fromElements\$wire_schema") // Preserve the Kotlin 2.3 internal JVM name. + internal fun fromElements( packageName: String?, elements: List, ): List = elements.map { service -> @@ -141,7 +143,9 @@ data class Service( fromElement(protoType, service) } - @JvmStatic internal fun toElements(services: List): List = services.map { service -> + @JvmStatic + @JvmName("toElements\$wire_schema") // Preserve the Kotlin 2.3 internal JVM name. + internal fun toElements(services: List): List = services.map { service -> ServiceElement( service.location, service.name,