diff options
author | laszio <ting-yuan@users.noreply.github.com> | 2021-10-06 10:28:39 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-06 10:28:39 -0700 |
commit | b22dec0256b8fc9444cb650cc5963ae67ad37ad8 (patch) | |
tree | 84e0d5a1f430d340ca64c2d8b0d92cc9759c97fe /gradle-plugin | |
parent | dd57c09a9a4d10da55cc41703b1d06147a10d8a1 (diff) | |
download | ksp-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.kts | 33 | ||||
-rw-r--r-- | gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt | 30 |
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) |