diff --git a/buildSrc/src/main/kotlin/JvmToolchain.kt b/buildSrc/src/main/kotlin/JvmToolchain.kt index 884ed87d249..bb01094824d 100644 --- a/buildSrc/src/main/kotlin/JvmToolchain.kt +++ b/buildSrc/src/main/kotlin/JvmToolchain.kt @@ -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() 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().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 } diff --git a/libraries/reflect/build.gradle.kts b/libraries/reflect/build.gradle.kts index cf7c508047f..021ef536c68 100644 --- a/libraries/reflect/build.gradle.kts +++ b/libraries/reflect/build.gradle.kts @@ -146,7 +146,7 @@ val proguard by task { 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(