Skip to content

Commit 9ab3ea4

Browse files
Abduqodiri Qurbonzodaqurbonzoda
authored andcommitted
Override Kotlin apiVersion and languageVersion compiler options with Gradle properties
1 parent 435fd9b commit 9ab3ea4

File tree

6 files changed

+92
-31
lines changed

6 files changed

+92
-31
lines changed

build.gradle.kts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import kotlinx.team.infra.InfraExtension
22
import kotlinx.validation.ExperimentalBCVApi
3+
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
34
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
5+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
46
import tasks.CheckReadmeTask
57

68
buildscript {
@@ -91,6 +93,20 @@ allprojects {
9193
repositories {
9294
addDevRepositoryIfEnabled(this, project)
9395
}
96+
97+
tasks.withType<KotlinCompilationTask<*>>().configureEach {
98+
compilerOptions {
99+
getOverriddenKotlinLanguageVersion(project)?.let {
100+
languageVersion = KotlinVersion.fromVersion(it)
101+
}
102+
getOverriddenKotlinApiVersion(project)?.let {
103+
apiVersion = KotlinVersion.fromVersion(it)
104+
}
105+
106+
progressiveMode = true
107+
allWarningsAsErrors = true
108+
}
109+
}
94110
}
95111

96112
apiValidation {

buildSrc/src/main/kotlin/KotlinCommunity.kt

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import org.gradle.api.Project
44
import org.gradle.api.artifacts.dsl.*
55
import java.net.*
6-
import java.util.logging.Logger
76

87
/*
98
* Functions in this file are responsible for configuring kotlinx-benchmarks build against a custom dev version
@@ -22,8 +21,8 @@ import java.util.logging.Logger
2221
* empty string otherwise
2322
*/
2423
fun getKotlinDevRepositoryUrl(project: Project): String? {
25-
val url = project.rootProject.properties["kotlin_repo_url"] as? String
26-
if (url != null) {
24+
val url = project.providers.gradleProperty("kotlin_repo_url").orNull
25+
if (!url.isNullOrBlank()) {
2726
project.logger.info("""Configured Kotlin Compiler repository url: '$url' for project ${project.name}""")
2827
}
2928
return url
@@ -37,4 +36,30 @@ fun addDevRepositoryIfEnabled(repositoryHandler: RepositoryHandler, project: Pro
3736
repositoryHandler.maven {
3837
url = URI.create(devRepoUrl)
3938
}
40-
}
39+
}
40+
41+
/**
42+
* Should be used for running against non-released Kotlin compiler on a system test level.
43+
*
44+
* @return a Kotlin API version parametrized from command line or gradle.properties, null otherwise
45+
*/
46+
fun getOverriddenKotlinApiVersion(project: Project): String? {
47+
val apiVersion = project.providers.gradleProperty("kotlin_api_version").orNull
48+
if (!apiVersion.isNullOrBlank()) {
49+
project.logger.info("""Configured Kotlin API version: '$apiVersion' for project ${project.name}""")
50+
}
51+
return apiVersion
52+
}
53+
54+
/**
55+
* Should be used for running against non-released Kotlin compiler on a system test level.
56+
*
57+
* @return a Kotlin Language version parametrized from command line or gradle.properties, null otherwise
58+
*/
59+
fun getOverriddenKotlinLanguageVersion(project: Project): String? {
60+
val languageVersion = project.providers.gradleProperty("kotlin_language_version").orNull
61+
if (!languageVersion.isNullOrBlank()) {
62+
project.logger.info("""Configured Kotlin Language version: '$languageVersion' for project ${project.name}""")
63+
}
64+
return languageVersion
65+
}

examples/kotlin-multiplatform/build.gradle

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,6 @@ kotlin {
3030

3131
applyDefaultHierarchyTemplate()
3232

33-
targets.configureEach {
34-
compilations.configureEach {
35-
kotlinOptions.allWarningsAsErrors = true
36-
}
37-
}
38-
39-
sourceSets.configureEach {
40-
languageSettings {
41-
progressiveMode = true
42-
}
43-
}
44-
4533
sourceSets {
4634
commonMain {
4735
dependencies {

integration/build.gradle.kts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,16 @@ tasks.test {
2323

2424
systemProperty("plugin_repo_url", plugin.projectDir.resolve("build/maven").absoluteFile.invariantSeparatorsPath)
2525
systemProperty("runtime_repo_url", rootProject.buildDir.resolve("maven").absoluteFile.invariantSeparatorsPath)
26-
systemProperty("kotlin_repo_url", rootProject.properties["kotlin_repo_url"])
26+
getKotlinDevRepositoryUrl(project)?.let {
27+
systemProperty("kotlin_repo_url", it)
28+
}
2729
systemProperty("kotlin_version", libs.versions.kotlin.asProvider().get())
30+
getOverriddenKotlinLanguageVersion(project)?.let {
31+
systemProperty("kotlin_language_version", it)
32+
}
33+
getOverriddenKotlinApiVersion(project)?.let {
34+
systemProperty("kotlin_api_version", it)
35+
}
2836
systemProperty("minSupportedGradleVersion", libs.versions.minSupportedGradle.get())
2937
systemProperty("minSupportedKotlinVersion", libs.versions.minSupportedKotlin.get())
3038
}

integration/src/main/kotlin/kotlinx/benchmark/integration/ProjectBuilder.kt

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,32 @@ benchmark {
2525
}
2626
}
2727

28-
private val kotlin_repo = System.getProperty("kotlin_repo_url").let {
29-
if (it.isNullOrBlank()) "" else "maven { url '$it' }"
28+
private val kotlin_repo = System.getProperty("kotlin_repo_url")?.let {
29+
"maven { url '$it' }"
30+
}.orEmpty()
31+
32+
private val plugin_repo_url = System.getProperty("plugin_repo_url")!!.let {
33+
"maven { url '$it' }"
34+
}
35+
36+
private val runtime_repo_url = System.getProperty("runtime_repo_url")!!.let {
37+
"maven { url '$it' }"
3038
}
3139

40+
private val kotlin_language_version = System.getProperty("kotlin_language_version")?.let {
41+
"languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.fromVersion('$it')"
42+
}.orEmpty()
43+
44+
private val kotlin_api_version = System.getProperty("kotlin_api_version")?.let {
45+
"apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.fromVersion('$it')"
46+
}.orEmpty()
47+
3248
private fun generateBuildScript(kotlinVersion: String, jvmToolchain: Int) =
3349
"""
3450
buildscript {
3551
repositories {
3652
$kotlin_repo
37-
maven { url '${System.getProperty("plugin_repo_url")}' }
53+
$plugin_repo_url
3854
mavenCentral()
3955
}
4056
dependencies {
@@ -48,7 +64,7 @@ private fun generateBuildScript(kotlinVersion: String, jvmToolchain: Int) =
4864
4965
repositories {
5066
$kotlin_repo
51-
maven { url '${System.getProperty("runtime_repo_url")}' }
67+
$runtime_repo_url
5268
mavenCentral()
5369
}
5470
@@ -63,4 +79,14 @@ private fun generateBuildScript(kotlinVersion: String, jvmToolchain: Int) =
6379
}
6480
}
6581
}
82+
83+
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask).configureEach {
84+
compilerOptions {
85+
$kotlin_language_version
86+
$kotlin_api_version
87+
88+
progressiveMode = true
89+
allWarningsAsErrors = true
90+
}
91+
}
6692
""".trimIndent()

runtime/build.gradle.kts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,23 +59,21 @@ kotlin {
5959

6060
targets.configureEach {
6161
compilations.configureEach {
62-
compilerOptions.configure {
63-
allWarningsAsErrors = true
64-
freeCompilerArgs.add("-Xexpect-actual-classes")
65-
optIn.addAll(
66-
"kotlinx.benchmark.internal.KotlinxBenchmarkRuntimeInternalApi",
67-
"kotlin.RequiresOptIn",
68-
)
62+
compileTaskProvider.configure {
63+
compilerOptions {
64+
freeCompilerArgs.add("-Xexpect-actual-classes")
65+
optIn.addAll(
66+
"kotlinx.benchmark.internal.KotlinxBenchmarkRuntimeInternalApi",
67+
"kotlin.RequiresOptIn",
68+
)
69+
}
6970
}
7071
}
7172
}
7273

7374
sourceSets.configureEach {
7475
kotlin.srcDirs(listOf("$name/src"))
7576
resources.srcDirs(listOf("$name/resources"))
76-
languageSettings {
77-
progressiveMode = true
78-
}
7977
}
8078

8179
sourceSets {

0 commit comments

Comments
 (0)