xref: /aosp_15_r20/external/ksp/gradle-plugin/build.gradle.kts (revision af87fb4bb8e3042070d2a054e912924f599b22b7)
1 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2 
3 description = "Kotlin Symbol Processor"
4 
5 val kotlinBaseVersion: String by project
6 val junitVersion: String by project
7 val googleTruthVersion: String by project
8 val agpBaseVersion: String by project
9 val signingKey: String? by project
10 val signingPassword: String? by project
11 
<lambda>null12 tasks.withType<KotlinCompile> {
13     compilerOptions.freeCompilerArgs.add("-Xjvm-default=all-compatibility")
14 }
15 
<lambda>null16 plugins {
17     kotlin("jvm")
18     id("java-gradle-plugin")
19     `maven-publish`
20     signing
21     id("org.jetbrains.dokka") version ("1.7.20")
22 }
23 
<lambda>null24 dependencies {
25     implementation("org.jetbrains.kotlin:kotlin-gradle-plugin-api:$kotlinBaseVersion")
26     implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinBaseVersion")
27     compileOnly("org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinBaseVersion")
28     // replace AGP dependency w/ gradle-api when we have source registering API available.
29     compileOnly("com.android.tools.build:gradle:$agpBaseVersion")
30     compileOnly(gradleApi())
31     testImplementation(gradleApi())
32     testImplementation(project(":api"))
33     testImplementation("junit:junit:$junitVersion")
34     testImplementation("com.google.truth:truth:$googleTruthVersion")
35     testImplementation(gradleTestKit())
36 }
37 
<lambda>null38 tasks.named("validatePlugins").configure {
39     onlyIf {
40         // while traversing classpath, this hits a class not found issue.
41         // Disabled until gradle kotlin version and our kotlin version matches
42         // java.lang.ClassNotFoundException: org/jetbrains/kotlin/compilerRunner/KotlinLogger
43         false
44     }
45 }
46 
<lambda>null47 gradlePlugin {
48     plugins {
49         create("symbol-processing-gradle-plugin") {
50             id = "com.google.devtools.ksp"
51             displayName = "com.google.devtools.ksp.gradle.plugin"
52             implementationClass = "com.google.devtools.ksp.gradle.KspGradleSubplugin"
53             description = "Kotlin symbol processing integration for Gradle"
54         }
55     }
56 }
57 
<lambda>null58 tasks {
59     val sourcesJar by creating(Jar::class) {
60         archiveClassifier.set("sources")
61         from(project.sourceSets.main.get().allSource)
62     }
63 }
64 
<lambda>null65 val dokkaJavadocJar by tasks.register<Jar>("dokkaJavadocJar") {
66     dependsOn(tasks.dokkaJavadoc)
67     from(tasks.dokkaJavadoc.flatMap { it.outputDirectory })
68     archiveClassifier.set("javadoc")
69 }
70 
<lambda>null71 publishing {
72     publications {
73         // the name of this publication should match the name java-gradle-plugin looks up
74         // https://github.com/gradle/gradle/blob/master/subprojects/plugin-development/src/main/java/org/gradle/plugin/devel/plugins/MavenPluginPublishPlugin.java#L73
75         this.create<MavenPublication>("pluginMaven") {
76             artifactId = "symbol-processing-gradle-plugin"
77             artifact(tasks["sourcesJar"])
78             artifact(tasks["dokkaJavadocJar"])
79             pom {
80                 name.set("symbol-processing-gradle-plugin")
81                 description.set("Kotlin symbol processing integration for Gradle")
82             }
83         }
84     }
85 }
86 
<lambda>null87 signing {
88     isRequired = hasProperty("signingKey")
89     useInMemoryPgpKeys(signingKey, signingPassword)
90     sign(extensions.getByType<PublishingExtension>().publications)
91 }
92 
93 /**
94  * Create a properties file with that can be read from the gradle-plugin tests to setup test
95  * projects.
96  */
97 val testPropsOutDir = project.layout.buildDirectory.dir("test-config")
<lambda>null98 val writeTestPropsTask = tasks.register<WriteProperties>("prepareTestConfiguration") {
99     description = "Generates a properties file with the current environment for gradle integration tests"
100     this.setOutputFile(
101         testPropsOutDir.map {
102             it.file("testprops.properties")
103         }
104     )
105     property("kspVersion", version)
106     property("mavenRepoDir", File(rootProject.buildDir, "repos/test").absolutePath)
107     property("kspProjectRootDir", rootProject.projectDir.absolutePath)
108     property("processorClasspath", project.tasks["compileTestKotlin"].outputs.files.asPath)
109 }
110 
<lambda>null111 java {
112     sourceSets {
113         test {
114             resources.srcDir(testPropsOutDir)
115         }
116     }
117 }
118 
<lambda>null119 tasks.named("compileTestKotlin").configure {
120     dependsOn(writeTestPropsTask)
121 }
122 
<lambda>null123 tasks.named<Test>("test").configure {
124     dependsOn(":api:publishAllPublicationsToTestRepository")
125     dependsOn(":gradle-plugin:publishAllPublicationsToTestRepository")
126     dependsOn(":symbol-processing:publishAllPublicationsToTestRepository")
127 }
128 
129 abstract class WriteVersionSrcTask @Inject constructor(
130     @get:Input val kspVersion: String,
131     @get:Input val kotlinVersion: String,
132     @get:org.gradle.api.tasks.OutputDirectory val outputSrcDir: File
133 ) : DefaultTask() {
134     @TaskAction
generatenull135     fun generate() {
136         File(outputSrcDir, "KSPVersions.kt").writeText(
137             """
138             package com.google.devtools.ksp.gradle
139             val KSP_KOTLIN_BASE_VERSION = "$kotlinVersion"
140             val KSP_VERSION = "$kspVersion"
141             """.trimIndent()
142         )
143     }
144 }
145 
146 val kspVersionDir = File(project.buildDir, "generated/ksp-versions")
147 val writeVersionSrcTask = tasks.register<WriteVersionSrcTask>(
148     "generateKSPVersions",
149     version.toString(),
150     kotlinBaseVersion,
151     kspVersionDir
152 )
153 
<lambda>null154 kotlin {
155     sourceSets {
156         main {
157             kotlin.srcDir(writeVersionSrcTask.map { it.outputSrcDir })
158         }
159     }
160 }
161