xref: /aosp_15_r20/external/kotlinpoet/build.gradle.kts (revision 3c321d951dd070fb96f8ba59e952ffc3131379a0)
1*3c321d95SSadaf Ebrahimi /*
2*3c321d95SSadaf Ebrahimi  * Copyright (C) 2019 Square, Inc.
3*3c321d95SSadaf Ebrahimi  *
4*3c321d95SSadaf Ebrahimi  * Licensed under the Apache License, Version 2.0 (the "License");
5*3c321d95SSadaf Ebrahimi  * you may not use this file except in compliance with the License.
6*3c321d95SSadaf Ebrahimi  * You may obtain a copy of the License at
7*3c321d95SSadaf Ebrahimi  *
8*3c321d95SSadaf Ebrahimi  * https://www.apache.org/licenses/LICENSE-2.0
9*3c321d95SSadaf Ebrahimi  *
10*3c321d95SSadaf Ebrahimi  * Unless required by applicable law or agreed to in writing, software
11*3c321d95SSadaf Ebrahimi  * distributed under the License is distributed on an "AS IS" BASIS,
12*3c321d95SSadaf Ebrahimi  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*3c321d95SSadaf Ebrahimi  * See the License for the specific language governing permissions and
14*3c321d95SSadaf Ebrahimi  * limitations under the License.
15*3c321d95SSadaf Ebrahimi  */
16*3c321d95SSadaf Ebrahimi import com.diffplug.gradle.spotless.SpotlessExtension
17*3c321d95SSadaf Ebrahimi import org.gradle.api.tasks.testing.logging.TestExceptionFormat
18*3c321d95SSadaf Ebrahimi import org.jetbrains.dokka.gradle.DokkaTask
19*3c321d95SSadaf Ebrahimi import org.jetbrains.kotlin.gradle.dsl.JvmTarget
20*3c321d95SSadaf Ebrahimi import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
21*3c321d95SSadaf Ebrahimi import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
22*3c321d95SSadaf Ebrahimi import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
23*3c321d95SSadaf Ebrahimi 
24*3c321d95SSadaf Ebrahimi plugins {
25*3c321d95SSadaf Ebrahimi   alias(libs.plugins.kotlin.multiplatform) apply false
26*3c321d95SSadaf Ebrahimi   alias(libs.plugins.kotlin.jvm) apply false
27*3c321d95SSadaf Ebrahimi   alias(libs.plugins.ksp) apply false
28*3c321d95SSadaf Ebrahimi   alias(libs.plugins.dokka) apply false
29*3c321d95SSadaf Ebrahimi   alias(libs.plugins.spotless) apply false
30*3c321d95SSadaf Ebrahimi   alias(libs.plugins.mavenPublish) apply false
31*3c321d95SSadaf Ebrahimi   alias(libs.plugins.kotlinBinaryCompatibilityValidator)
32*3c321d95SSadaf Ebrahimi }
33*3c321d95SSadaf Ebrahimi 
34*3c321d95SSadaf Ebrahimi allprojects {
35*3c321d95SSadaf Ebrahimi   // Note that the group name for publishing is "com.squareup" and is declared in gradle.properties. It's set to a
36*3c321d95SSadaf Ebrahimi   // different value here to disambiguate the Maven coordinates of the :interop:javapoet submodule and the JavaPoet
37*3c321d95SSadaf Ebrahimi   // dependency.
38*3c321d95SSadaf Ebrahimi   group = "com.squareup.kotlinpoet"
39*3c321d95SSadaf Ebrahimi   version = property("VERSION_NAME") as String
40*3c321d95SSadaf Ebrahimi 
41*3c321d95SSadaf Ebrahimi   repositories {
42*3c321d95SSadaf Ebrahimi     mavenCentral()
43*3c321d95SSadaf Ebrahimi   }
44*3c321d95SSadaf Ebrahimi }
45*3c321d95SSadaf Ebrahimi 
46*3c321d95SSadaf Ebrahimi subprojects {
47*3c321d95SSadaf Ebrahimi   tasks.withType<KotlinCompile> {
48*3c321d95SSadaf Ebrahimi     compilerOptions {
49*3c321d95SSadaf Ebrahimi       jvmTarget.set(JvmTarget.JVM_1_8)
50*3c321d95SSadaf Ebrahimi       freeCompilerArgs.add("-Xjvm-default=all")
51*3c321d95SSadaf Ebrahimi     }
52*3c321d95SSadaf Ebrahimi   }
53*3c321d95SSadaf Ebrahimi   // Ensure "org.gradle.jvm.version" is set to "8" in Gradle metadata.
54*3c321d95SSadaf Ebrahimi   tasks.withType<JavaCompile> {
55*3c321d95SSadaf Ebrahimi     options.release.set(8)
56*3c321d95SSadaf Ebrahimi   }
57*3c321d95SSadaf Ebrahimi 
58*3c321d95SSadaf Ebrahimi   if ("test" !in name && buildFile.exists()) {
59*3c321d95SSadaf Ebrahimi     apply(plugin = "org.jetbrains.dokka")
60*3c321d95SSadaf Ebrahimi     apply(plugin = "com.vanniktech.maven.publish")
61*3c321d95SSadaf Ebrahimi     pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") {
62*3c321d95SSadaf Ebrahimi       configure<KotlinMultiplatformExtension> {
63*3c321d95SSadaf Ebrahimi         explicitApi()
64*3c321d95SSadaf Ebrahimi       }
65*3c321d95SSadaf Ebrahimi     }
66*3c321d95SSadaf Ebrahimi     pluginManager.withPlugin("org.jetbrains.kotlin.jvm") {
67*3c321d95SSadaf Ebrahimi       configure<KotlinProjectExtension> {
68*3c321d95SSadaf Ebrahimi         explicitApi()
69*3c321d95SSadaf Ebrahimi       }
70*3c321d95SSadaf Ebrahimi     }
71*3c321d95SSadaf Ebrahimi     afterEvaluate {
72*3c321d95SSadaf Ebrahimi       tasks.named<DokkaTask>("dokkaHtml") {
73*3c321d95SSadaf Ebrahimi         val projectFolder = project.path.trim(':').replace(':', '-')
74*3c321d95SSadaf Ebrahimi         outputDirectory.set(rootProject.rootDir.resolve("docs/1.x/$projectFolder"))
75*3c321d95SSadaf Ebrahimi         dokkaSourceSets.configureEach {
76*3c321d95SSadaf Ebrahimi           skipDeprecated.set(true)
77*3c321d95SSadaf Ebrahimi         }
78*3c321d95SSadaf Ebrahimi       }
79*3c321d95SSadaf Ebrahimi     }
80*3c321d95SSadaf Ebrahimi   }
81*3c321d95SSadaf Ebrahimi   apply(plugin = "com.diffplug.spotless")
82*3c321d95SSadaf Ebrahimi   configure<SpotlessExtension> {
83*3c321d95SSadaf Ebrahimi     kotlin {
84*3c321d95SSadaf Ebrahimi       target("**/*.kt")
85*3c321d95SSadaf Ebrahimi       ktlint(libs.versions.ktlint.get()).editorConfigOverride(
86*3c321d95SSadaf Ebrahimi         mapOf("ktlint_standard_filename" to "disabled"),
87*3c321d95SSadaf Ebrahimi       )
88*3c321d95SSadaf Ebrahimi       trimTrailingWhitespace()
89*3c321d95SSadaf Ebrahimi       endWithNewline()
90*3c321d95SSadaf Ebrahimi 
91*3c321d95SSadaf Ebrahimi       licenseHeader(
92*3c321d95SSadaf Ebrahimi         """
93*3c321d95SSadaf Ebrahimi         |/*
94*3c321d95SSadaf Ebrahimi         | * Copyright (C) ${'$'}YEAR Square, Inc.
95*3c321d95SSadaf Ebrahimi         | *
96*3c321d95SSadaf Ebrahimi         | * Licensed under the Apache License, Version 2.0 (the "License");
97*3c321d95SSadaf Ebrahimi         | * you may not use this file except in compliance with the License.
98*3c321d95SSadaf Ebrahimi         | * You may obtain a copy of the License at
99*3c321d95SSadaf Ebrahimi         | *
100*3c321d95SSadaf Ebrahimi         | * https://www.apache.org/licenses/LICENSE-2.0
101*3c321d95SSadaf Ebrahimi         | *
102*3c321d95SSadaf Ebrahimi         | * Unless required by applicable law or agreed to in writing, software
103*3c321d95SSadaf Ebrahimi         | * distributed under the License is distributed on an "AS IS" BASIS,
104*3c321d95SSadaf Ebrahimi         | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
105*3c321d95SSadaf Ebrahimi         | * See the License for the specific language governing permissions and
106*3c321d95SSadaf Ebrahimi         | * limitations under the License.
107*3c321d95SSadaf Ebrahimi         | */
108*3c321d95SSadaf Ebrahimi         """.trimMargin(),
109*3c321d95SSadaf Ebrahimi       )
110*3c321d95SSadaf Ebrahimi     }
111*3c321d95SSadaf Ebrahimi   }
112*3c321d95SSadaf Ebrahimi 
113*3c321d95SSadaf Ebrahimi   // Only enable the extra toolchain tests on CI. Otherwise local development is broken on Apple Silicon macs
114*3c321d95SSadaf Ebrahimi   // because there are no matching toolchains for several older JDK versions.
115*3c321d95SSadaf Ebrahimi   if ("CI" in System.getenv()) {
116*3c321d95SSadaf Ebrahimi     fun Project.setupCheckTask(testTaskName: String) {
117*3c321d95SSadaf Ebrahimi       // Copied from https://github.com/square/retrofit/blob/master/retrofit/build.gradle#L28.
118*3c321d95SSadaf Ebrahimi       // Create a test task for each supported JDK. We check every "LTS" + current version.
119*3c321d95SSadaf Ebrahimi       val versionsToTest = listOf(8, 11, 17, 19)
120*3c321d95SSadaf Ebrahimi       for (majorVersion in versionsToTest) {
121*3c321d95SSadaf Ebrahimi         val jdkTest = tasks.register<Test>("testJdk$majorVersion") {
122*3c321d95SSadaf Ebrahimi           val javaToolchains = project.extensions.getByType(JavaToolchainService::class)
123*3c321d95SSadaf Ebrahimi           javaLauncher.set(
124*3c321d95SSadaf Ebrahimi             javaToolchains.launcherFor {
125*3c321d95SSadaf Ebrahimi               languageVersion.set(JavaLanguageVersion.of(majorVersion))
126*3c321d95SSadaf Ebrahimi               vendor.set(JvmVendorSpec.AZUL)
127*3c321d95SSadaf Ebrahimi             },
128*3c321d95SSadaf Ebrahimi           )
129*3c321d95SSadaf Ebrahimi 
130*3c321d95SSadaf Ebrahimi           description = "Runs the test suite on JDK $majorVersion"
131*3c321d95SSadaf Ebrahimi           group = LifecycleBasePlugin.VERIFICATION_GROUP
132*3c321d95SSadaf Ebrahimi 
133*3c321d95SSadaf Ebrahimi           // Copy inputs from normal Test task.
134*3c321d95SSadaf Ebrahimi           val testTask =
135*3c321d95SSadaf Ebrahimi             tasks.getByName<Test>(testTaskName)
136*3c321d95SSadaf Ebrahimi 
137*3c321d95SSadaf Ebrahimi           classpath = testTask.classpath
138*3c321d95SSadaf Ebrahimi           testClassesDirs = testTask.testClassesDirs
139*3c321d95SSadaf Ebrahimi 
140*3c321d95SSadaf Ebrahimi           testLogging {
141*3c321d95SSadaf Ebrahimi             exceptionFormat = TestExceptionFormat.FULL
142*3c321d95SSadaf Ebrahimi           }
143*3c321d95SSadaf Ebrahimi         }
144*3c321d95SSadaf Ebrahimi         tasks.named("check").configure {
145*3c321d95SSadaf Ebrahimi           dependsOn(jdkTest)
146*3c321d95SSadaf Ebrahimi         }
147*3c321d95SSadaf Ebrahimi       }
148*3c321d95SSadaf Ebrahimi     }
149*3c321d95SSadaf Ebrahimi     pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") {
150*3c321d95SSadaf Ebrahimi       setupCheckTask("jvmTest")
151*3c321d95SSadaf Ebrahimi     }
152*3c321d95SSadaf Ebrahimi     pluginManager.withPlugin("org.jetbrains.kotlin.jvm") {
153*3c321d95SSadaf Ebrahimi       setupCheckTask("test")
154*3c321d95SSadaf Ebrahimi     }
155*3c321d95SSadaf Ebrahimi   }
156*3c321d95SSadaf Ebrahimi }
157*3c321d95SSadaf Ebrahimi 
158*3c321d95SSadaf Ebrahimi apiValidation {
159*3c321d95SSadaf Ebrahimi   nonPublicMarkers += "com.squareup.kotlinpoet.ExperimentalKotlinPoetApi"
160*3c321d95SSadaf Ebrahimi   ignoredProjects += listOf(
161*3c321d95SSadaf Ebrahimi     "interop", // Empty middle package
162*3c321d95SSadaf Ebrahimi     "test-processor", // Test only
163*3c321d95SSadaf Ebrahimi   )
164*3c321d95SSadaf Ebrahimi }
165