diff options
4 files changed, 56 insertions, 23 deletions
diff --git a/build.gradle.kts b/build.gradle.kts index 60199de4..88604bbf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,15 +1,11 @@ import com.google.devtools.ksp.configureKtlint import com.google.devtools.ksp.configureKtlintApplyToIdea -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter val sonatypeUserName: String? by project val sonatypePassword: String? by project if (!extra.has("kspVersion")) { - val kotlinBaseVersion: String by project - val today = LocalDateTime.now().format(DateTimeFormatter.BASIC_ISO_DATE) - extra.set("kspVersion", "$kotlinBaseVersion-dev-experimental-$today") + extra.set("kspVersion", "2.0.255-SNAPSHOT") } repositories { @@ -45,12 +41,6 @@ subprojects { maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap/") maven("https://www.jetbrains.com/intellij-repository/snapshots") } - tasks.withType<Jar>().configureEach { - manifest.attributes.apply { - put("Implementation-Vendor", "Google") - put("Implementation-Version", project.version) - } - } pluginManager.withPlugin("maven-publish") { val publishExtension = extensions.getByType<PublishingExtension>() publishExtension.repositories { diff --git a/gradle-plugin/build.gradle.kts b/gradle-plugin/build.gradle.kts index 934cb8bd..41dfe32b 100644 --- a/gradle-plugin/build.gradle.kts +++ b/gradle-plugin/build.gradle.kts @@ -123,3 +123,36 @@ tasks.named<Test>("test").configure { dependsOn(":gradle-plugin:publishAllPublicationsToTestRepository") dependsOn(":symbol-processing:publishAllPublicationsToTestRepository") } + +abstract class WriteVersionSrcTask @Inject constructor( + @get:Input val kspVersion: String, + @get:Input val kotlinVersion: String, + @get:org.gradle.api.tasks.OutputDirectory val outputSrcDir: File +) : DefaultTask() { + @TaskAction + fun generate() { + File(outputSrcDir, "KSPVersions.kt").writeText( + """ + package com.google.devtools.ksp.gradle + val KSP_KOTLIN_BASE_VERSION = "$kotlinVersion" + val KSP_VERSION = "$kspVersion" + """.trimIndent() + ) + } +} + +val kspVersionDir = File(project.buildDir, "generated/ksp-versions") +val writeVersionSrcTask = tasks.register<WriteVersionSrcTask>( + "generateKSPVersions", + version.toString(), + kotlinBaseVersion, + kspVersionDir +) + +kotlin { + sourceSets { + main { + kotlin.srcDir(writeVersionSrcTask.map { it.outputSrcDir }) + } + } +} diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt index b273a6ce..6d5b0fe4 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt @@ -40,6 +40,7 @@ import org.gradle.api.tasks.compile.JavaCompile import org.gradle.language.jvm.tasks.ProcessResources import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.gradle.util.GradleVersion +import org.gradle.util.internal.VersionNumber import org.gradle.work.Incremental import org.jetbrains.kotlin.cli.common.arguments.* import org.jetbrains.kotlin.gradle.dsl.* @@ -141,16 +142,25 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean { val project = kotlinCompilation.target.project - val kspVersion = javaClass.`package`.implementationVersion - val kotlinVersion = project.getKotlinPluginVersion() ?: "N/A" + val kspVersion = VersionNumber.parse(KSP_KOTLIN_BASE_VERSION) + val kotlinVersion = VersionNumber.parse(project.getKotlinPluginVersion()) // Check version and show warning by default. val noVersionCheck = project.findProperty("ksp.version.check")?.toString()?.toBoolean() == false - if (!noVersionCheck && !kspVersion.startsWith(kotlinVersion)) - project.logger.warn( - "ksp-$kspVersion might not work with kotlin-$kotlinVersion properly. " + - "Please pick the same version of ksp and kotlin plugins." - ) + if (!noVersionCheck) { + if (kspVersion < kotlinVersion) { + project.logger.warn( + "ksp-$KSP_VERSION is too old for kotlin-$kotlinVersion. " + + "Please upgrade ksp or downgrade kotlin-gradle-plugin to $KSP_KOTLIN_BASE_VERSION." + ) + } + if (kspVersion > kotlinVersion) { + project.logger.warn( + "ksp-$KSP_VERSION is too new for kotlin-$kotlinVersion. " + + "Please upgrade kotlin-gradle-plugin to $KSP_KOTLIN_BASE_VERSION." + ) + } + } return true } @@ -330,17 +340,17 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool SubpluginArtifact( groupId = "com.google.devtools.ksp", artifactId = KSP_ARTIFACT_NAME, - version = javaClass.`package`.implementationVersion + version = KSP_VERSION ) override fun getPluginArtifactForNative(): SubpluginArtifact? = SubpluginArtifact( groupId = "com.google.devtools.ksp", artifactId = KSP_ARTIFACT_NAME_NATIVE, - version = javaClass.`package`.implementationVersion + version = KSP_VERSION ) - val apiArtifact = "com.google.devtools.ksp:symbol-processing-api:${javaClass.`package`.implementationVersion}" + val apiArtifact = "com.google.devtools.ksp:symbol-processing-api:$KSP_VERSION" } private val artifactType = Attribute.of("artifactType", String::class.java) diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/VersionCheckIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/VersionCheckIT.kt index 2dfe2cb0..fff47f62 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/VersionCheckIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/VersionCheckIT.kt @@ -17,7 +17,7 @@ class VersionCheckIT { val result = gradleRunner.withArguments( "-Dkotlin.compiler.execution.strategy=in-process", "-PkotlinVersion=1.4.20", "clean", "build" ).buildAndFail() - Assert.assertTrue(result.output.contains("Please pick the same version of ksp and kotlin plugins.")) + Assert.assertTrue(result.output.contains("is too new for kotlin")) } @Test @@ -27,6 +27,6 @@ class VersionCheckIT { "-Dkotlin.compiler.execution.strategy=in-process", "-PkotlinVersion=1.4.20", "-Pksp.version.check=false", "clean", "build" ).buildAndFail() - Assert.assertFalse(result.output.contains("Please pick the same version of ksp and kotlin plugins.")) + Assert.assertFalse(result.output.contains("is too new for kotlin")) } } |