Refactorings for toolchains
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user