aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle.kts12
-rw-r--r--gradle-plugin/build.gradle.kts33
-rw-r--r--gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt30
-rw-r--r--integration-tests/src/test/kotlin/com/google/devtools/ksp/test/VersionCheckIT.kt4
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"))
}
}