aboutsummaryrefslogtreecommitdiff
path: root/gradle-plugin
diff options
context:
space:
mode:
authorlaszio <ting-yuan@users.noreply.github.com>2021-10-06 10:28:39 -0700
committerGitHub <noreply@github.com>2021-10-06 10:28:39 -0700
commitb22dec0256b8fc9444cb650cc5963ae67ad37ad8 (patch)
tree84e0d5a1f430d340ca64c2d8b0d92cc9759c97fe /gradle-plugin
parentdd57c09a9a4d10da55cc41703b1d06147a10d8a1 (diff)
downloadksp-b22dec0256b8fc9444cb650cc5963ae67ad37ad8.tar.gz
Write versions to sources
so as to make recommendation to Kotlin versions.
Diffstat (limited to 'gradle-plugin')
-rw-r--r--gradle-plugin/build.gradle.kts33
-rw-r--r--gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt30
2 files changed, 53 insertions, 10 deletions
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)