Refactorings for toolchains

This commit is contained in:
Nikolay Krasko
2022-09-22 12:43:14 +02:00
committed by Space
parent 076125282d
commit 54c7efe1cb
2 changed files with 28 additions and 35 deletions
+27 -34
View File
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
enum class JdkMajorVersion( enum class JdkMajorVersion(
val majorVersion: Int, val majorVersion: Int,
val targetName: String = majorVersion.toString(), val targetName: String = majorVersion.toString(),
val overrideMajorVersion: Int? = null, private val overrideMajorVersion: Int? = null,
private val mandatory: Boolean = true private val mandatory: Boolean = true
) { ) {
JDK_1_6(6, targetName = "1.6", overrideMajorVersion = 8), JDK_1_6(6, targetName = "1.6", overrideMajorVersion = 8),
@@ -26,11 +26,16 @@ enum class JdkMajorVersion(
fun isMandatory(): Boolean = mandatory fun isMandatory(): Boolean = mandatory
val envName = name val overrideVersion by lazy {
if (overrideMajorVersion != null) {
companion object { values().firstOrNull() { it.majorVersion == overrideMajorVersion }
fun fromMajorVersion(majorVersion: Int) = values().first { it.majorVersion == majorVersion } ?: error("Can't find the value with majorVersion=$overrideMajorVersion")
} else {
null
}
} }
val envName = name
} }
val DEFAULT_JVM_TOOLCHAIN = JdkMajorVersion.JDK_1_8 val DEFAULT_JVM_TOOLCHAIN = JdkMajorVersion.JDK_1_8
@@ -39,16 +44,12 @@ fun Project.configureJvmDefaultToolchain() {
configureJvmToolchain(DEFAULT_JVM_TOOLCHAIN) configureJvmToolchain(DEFAULT_JVM_TOOLCHAIN)
} }
fun Project.shouldOverrideObsoleteJdk( fun Project.shouldOverrideObsoleteJdk(jdkVersion: JdkMajorVersion): Boolean =
jdkVersion: JdkMajorVersion kotlinBuildProperties.isObsoleteJdkOverrideEnabled && jdkVersion.overrideVersion != null
): Boolean = kotlinBuildProperties.isObsoleteJdkOverrideEnabled &&
jdkVersion.overrideMajorVersion != null
fun Project.configureJvmToolchain( fun Project.configureJvmToolchain(jdkVersion: JdkMajorVersion) {
jdkVersion: JdkMajorVersion
) {
@Suppress("NAME_SHADOWING") @Suppress("NAME_SHADOWING")
val jdkVersion = chooseJdk18ForJpsBuild(jdkVersion) val jdkVersion = chooseJdk_1_8ForJpsBuild(jdkVersion)
// Ensure java only modules also set default toolchain // Ensure java only modules also set default toolchain
configureJavaOnlyToolchain(jdkVersion) configureJavaOnlyToolchain(jdkVersion)
@@ -57,16 +58,12 @@ fun Project.configureJvmToolchain(
if (shouldOverrideObsoleteJdk(jdkVersion)) { if (shouldOverrideObsoleteJdk(jdkVersion)) {
kotlinExtension.jvmToolchain { kotlinExtension.jvmToolchain {
languageVersion.set( setupToolchain(jdkVersion.overrideVersion ?: error("Substitution version should be defined for override mode"))
JavaLanguageVersion.of(jdkVersion.overrideMajorVersion!!)
)
} }
updateJvmTarget(jdkVersion.targetName) updateJvmTarget(jdkVersion.targetName)
} else { } else {
kotlinExtension.jvmToolchain { kotlinExtension.jvmToolchain {
languageVersion.set( setupToolchain(jdkVersion)
JavaLanguageVersion.of(jdkVersion.majorVersion)
)
} }
} }
@@ -81,18 +78,20 @@ fun Project.configureJvmToolchain(
} }
} }
fun JavaToolchainSpec.setupToolchain(jdkVersion: JdkMajorVersion) {
languageVersion.set(JavaLanguageVersion.of(jdkVersion.majorVersion))
}
fun Project.configureJavaOnlyToolchain( fun Project.configureJavaOnlyToolchain(
jdkVersion: JdkMajorVersion jdkVersion: JdkMajorVersion
) { ) {
@Suppress("NAME_SHADOWING") @Suppress("NAME_SHADOWING")
val jdkVersion = chooseJdk18ForJpsBuild(jdkVersion) val jdkVersion = chooseJdk_1_8ForJpsBuild(jdkVersion)
plugins.withId("java-base") { plugins.withId("java-base") {
val javaExtension = extensions.getByType<JavaPluginExtension>() val javaExtension = extensions.getByType<JavaPluginExtension>()
if (shouldOverrideObsoleteJdk(jdkVersion)) { if (shouldOverrideObsoleteJdk(jdkVersion)) {
javaExtension.toolchain { javaExtension.toolchain {
languageVersion.set( setupToolchain(jdkVersion.overrideVersion ?: error("Substitution version should be defined for override mode"))
JavaLanguageVersion.of(jdkVersion.overrideMajorVersion!!)
)
} }
tasks.withType<JavaCompile>().configureEach { tasks.withType<JavaCompile>().configureEach {
targetCompatibility = jdkVersion.targetName targetCompatibility = jdkVersion.targetName
@@ -100,15 +99,13 @@ fun Project.configureJavaOnlyToolchain(
} }
} else { } else {
javaExtension.toolchain { javaExtension.toolchain {
languageVersion.set( setupToolchain(jdkVersion)
JavaLanguageVersion.of(jdkVersion.majorVersion)
)
} }
} }
} }
} }
fun Project.chooseJdk18ForJpsBuild(jdkVersion: JdkMajorVersion): JdkMajorVersion { fun Project.chooseJdk_1_8ForJpsBuild(jdkVersion: JdkMajorVersion): JdkMajorVersion {
return if (kotlinBuildProperties.isInJpsBuildIdeaSync) { return if (kotlinBuildProperties.isInJpsBuildIdeaSync) {
maxOf(jdkVersion, JdkMajorVersion.JDK_1_8) maxOf(jdkVersion, JdkMajorVersion.JDK_1_8)
} else { } else {
@@ -122,9 +119,7 @@ fun KotlinCompile.configureTaskToolchain(
if (project.shouldOverrideObsoleteJdk(jdkVersion)) { if (project.shouldOverrideObsoleteJdk(jdkVersion)) {
kotlinJavaToolchain.toolchain.use( kotlinJavaToolchain.toolchain.use(
project.getToolchainLauncherFor( project.getToolchainLauncherFor(
JdkMajorVersion.fromMajorVersion( jdkVersion.overrideVersion ?: error("Substitution version should be defined for override mode")
jdkVersion.overrideMajorVersion!!
)
) )
) )
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@@ -144,9 +139,7 @@ fun JavaCompile.configureTaskToolchain(
if (project.shouldOverrideObsoleteJdk(jdkVersion)) { if (project.shouldOverrideObsoleteJdk(jdkVersion)) {
javaCompiler.set( javaCompiler.set(
project.getToolchainCompilerFor( project.getToolchainCompilerFor(
JdkMajorVersion.fromMajorVersion( jdkVersion.overrideVersion ?: error("Substitution version should be defined for override mode")
jdkVersion.overrideMajorVersion!!
)
) )
) )
targetCompatibility = jdkVersion.targetName targetCompatibility = jdkVersion.targetName
@@ -205,7 +198,7 @@ fun Project.getToolchainLauncherFor(
fun Project.getJdkVersionWithOverride(jdkVersion: JdkMajorVersion): JdkMajorVersion { fun Project.getJdkVersionWithOverride(jdkVersion: JdkMajorVersion): JdkMajorVersion {
return if (project.shouldOverrideObsoleteJdk(jdkVersion)) { return if (project.shouldOverrideObsoleteJdk(jdkVersion)) {
JdkMajorVersion.fromMajorVersion(jdkVersion.overrideMajorVersion!!) jdkVersion.overrideVersion ?: error("Substitution version should be defined for override mode")
} else { } else {
jdkVersion jdkVersion
} }
+1 -1
View File
@@ -146,7 +146,7 @@ val proguard by task<CacheableProguardTask> {
injars(mapOf("filter" to "!META-INF/**,!**/*.kotlin_builtins"), proguardAdditionalInJars) injars(mapOf("filter" to "!META-INF/**,!**/*.kotlin_builtins"), proguardAdditionalInJars)
outjars(fileFrom(base.libsDirectory.asFile.get(), "${base.archivesName.get()}-$version-proguard.jar")) outjars(fileFrom(base.libsDirectory.asFile.get(), "${base.archivesName.get()}-$version-proguard.jar"))
javaLauncher.set(project.getToolchainLauncherFor(chooseJdk18ForJpsBuild(JdkMajorVersion.JDK_1_8))) javaLauncher.set(project.getToolchainLauncherFor(chooseJdk_1_8ForJpsBuild(JdkMajorVersion.JDK_1_8)))
libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardDeps) libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardDeps)
libraryjars( libraryjars(
project.files( project.files(