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(
val majorVersion: Int,
val targetName: String = majorVersion.toString(),
val overrideMajorVersion: Int? = null,
private val overrideMajorVersion: Int? = null,
private val mandatory: Boolean = true
) {
JDK_1_6(6, targetName = "1.6", overrideMajorVersion = 8),
@@ -26,11 +26,16 @@ enum class JdkMajorVersion(
fun isMandatory(): Boolean = mandatory
val envName = name
companion object {
fun fromMajorVersion(majorVersion: Int) = values().first { it.majorVersion == majorVersion }
val overrideVersion by lazy {
if (overrideMajorVersion != null) {
values().firstOrNull() { it.majorVersion == overrideMajorVersion }
?: error("Can't find the value with majorVersion=$overrideMajorVersion")
} else {
null
}
}
val envName = name
}
val DEFAULT_JVM_TOOLCHAIN = JdkMajorVersion.JDK_1_8
@@ -39,16 +44,12 @@ fun Project.configureJvmDefaultToolchain() {
configureJvmToolchain(DEFAULT_JVM_TOOLCHAIN)
}
fun Project.shouldOverrideObsoleteJdk(
jdkVersion: JdkMajorVersion
): Boolean = kotlinBuildProperties.isObsoleteJdkOverrideEnabled &&
jdkVersion.overrideMajorVersion != null
fun Project.shouldOverrideObsoleteJdk(jdkVersion: JdkMajorVersion): Boolean =
kotlinBuildProperties.isObsoleteJdkOverrideEnabled && jdkVersion.overrideVersion != null
fun Project.configureJvmToolchain(
jdkVersion: JdkMajorVersion
) {
fun Project.configureJvmToolchain(jdkVersion: JdkMajorVersion) {
@Suppress("NAME_SHADOWING")
val jdkVersion = chooseJdk18ForJpsBuild(jdkVersion)
val jdkVersion = chooseJdk_1_8ForJpsBuild(jdkVersion)
// Ensure java only modules also set default toolchain
configureJavaOnlyToolchain(jdkVersion)
@@ -57,16 +58,12 @@ fun Project.configureJvmToolchain(
if (shouldOverrideObsoleteJdk(jdkVersion)) {
kotlinExtension.jvmToolchain {
languageVersion.set(
JavaLanguageVersion.of(jdkVersion.overrideMajorVersion!!)
)
setupToolchain(jdkVersion.overrideVersion ?: error("Substitution version should be defined for override mode"))
}
updateJvmTarget(jdkVersion.targetName)
} else {
kotlinExtension.jvmToolchain {
languageVersion.set(
JavaLanguageVersion.of(jdkVersion.majorVersion)
)
setupToolchain(jdkVersion)
}
}
@@ -81,18 +78,20 @@ fun Project.configureJvmToolchain(
}
}
fun JavaToolchainSpec.setupToolchain(jdkVersion: JdkMajorVersion) {
languageVersion.set(JavaLanguageVersion.of(jdkVersion.majorVersion))
}
fun Project.configureJavaOnlyToolchain(
jdkVersion: JdkMajorVersion
) {
@Suppress("NAME_SHADOWING")
val jdkVersion = chooseJdk18ForJpsBuild(jdkVersion)
val jdkVersion = chooseJdk_1_8ForJpsBuild(jdkVersion)
plugins.withId("java-base") {
val javaExtension = extensions.getByType<JavaPluginExtension>()
if (shouldOverrideObsoleteJdk(jdkVersion)) {
javaExtension.toolchain {
languageVersion.set(
JavaLanguageVersion.of(jdkVersion.overrideMajorVersion!!)
)
setupToolchain(jdkVersion.overrideVersion ?: error("Substitution version should be defined for override mode"))
}
tasks.withType<JavaCompile>().configureEach {
targetCompatibility = jdkVersion.targetName
@@ -100,15 +99,13 @@ fun Project.configureJavaOnlyToolchain(
}
} else {
javaExtension.toolchain {
languageVersion.set(
JavaLanguageVersion.of(jdkVersion.majorVersion)
)
setupToolchain(jdkVersion)
}
}
}
}
fun Project.chooseJdk18ForJpsBuild(jdkVersion: JdkMajorVersion): JdkMajorVersion {
fun Project.chooseJdk_1_8ForJpsBuild(jdkVersion: JdkMajorVersion): JdkMajorVersion {
return if (kotlinBuildProperties.isInJpsBuildIdeaSync) {
maxOf(jdkVersion, JdkMajorVersion.JDK_1_8)
} else {
@@ -122,9 +119,7 @@ fun KotlinCompile.configureTaskToolchain(
if (project.shouldOverrideObsoleteJdk(jdkVersion)) {
kotlinJavaToolchain.toolchain.use(
project.getToolchainLauncherFor(
JdkMajorVersion.fromMajorVersion(
jdkVersion.overrideMajorVersion!!
)
jdkVersion.overrideVersion ?: error("Substitution version should be defined for override mode")
)
)
@Suppress("DEPRECATION")
@@ -144,9 +139,7 @@ fun JavaCompile.configureTaskToolchain(
if (project.shouldOverrideObsoleteJdk(jdkVersion)) {
javaCompiler.set(
project.getToolchainCompilerFor(
JdkMajorVersion.fromMajorVersion(
jdkVersion.overrideMajorVersion!!
)
jdkVersion.overrideVersion ?: error("Substitution version should be defined for override mode")
)
)
targetCompatibility = jdkVersion.targetName
@@ -205,7 +198,7 @@ fun Project.getToolchainLauncherFor(
fun Project.getJdkVersionWithOverride(jdkVersion: JdkMajorVersion): JdkMajorVersion {
return if (project.shouldOverrideObsoleteJdk(jdkVersion)) {
JdkMajorVersion.fromMajorVersion(jdkVersion.overrideMajorVersion!!)
jdkVersion.overrideVersion ?: error("Substitution version should be defined for override mode")
} else {
jdkVersion
}
+1 -1
View File
@@ -146,7 +146,7 @@ val proguard by task<CacheableProguardTask> {
injars(mapOf("filter" to "!META-INF/**,!**/*.kotlin_builtins"), proguardAdditionalInJars)
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(
project.files(