Prohibit JVM target 1.6

But still compile stdlib, reflect, kotlin.test and scripting runtimes
with JVM target 1.6 to simplify migration from Kotlin 1.6 to 1.7.

 #KT-45165 Fixed
This commit is contained in:
Alexander Udalov
2022-04-06 21:27:58 +02:00
parent 1e800b8e18
commit 2e515f3945
40 changed files with 63 additions and 16 deletions
@@ -37,7 +37,7 @@ open class DefaultValues(val defaultValue: String, val possibleValues: List<Stri
object JvmTargetVersions : DefaultValues(
"null",
JvmTarget.values().map { "\"${it.description}\"" }
JvmTarget.supportedValues().map { "\"${it.description}\"" }
)
object JsEcmaVersions : DefaultValues(
@@ -75,7 +75,7 @@ class K2JVMCompilerArguments : CommonCompilerArguments() {
@Argument(
value = "-jvm-target",
valueDescription = "<version>",
description = "Target version of the generated JVM bytecode (1.6 (DEPRECATED), 1.8, 9, 10, ..., 18), default is 1.8"
description = "Target version of the generated JVM bytecode (1.8, 9, 10, ..., 18), default is 1.8"
)
var jvmTarget: String? by NullableStringFreezableVar(null)
@@ -466,7 +466,8 @@ Also sets `-jvm-target` value equal to the selected JDK version"""
@Argument(
value = "-Xsuppress-deprecated-jvm-target-warning",
description = "Suppress deprecation warning about deprecated JVM target versions"
description = "Suppress deprecation warning about deprecated JVM target versions.\n" +
"This option has no effect and will be deleted in a future version."
)
var suppressDeprecatedJvmTargetWarning: Boolean by FreezableVar(false)
@@ -56,10 +56,10 @@ fun CompilerConfiguration.setupJvmSpecificArguments(arguments: K2JVMCompilerArgu
val jvmTarget = JvmTarget.fromString(jvmTargetValue)
if (jvmTarget != null) {
put(JVMConfigurationKeys.JVM_TARGET, jvmTarget)
if (jvmTarget == JvmTarget.JVM_1_6 && !arguments.suppressDeprecatedJvmTargetWarning) {
if (jvmTarget == JvmTarget.JVM_1_6 && !isJvmTarget6Allowed()) {
messageCollector.report(
STRONG_WARNING,
"JVM target 1.6 is deprecated and will be removed in a future release. Please migrate to JVM target 1.8 or above"
ERROR,
"JVM target 1.6 is no longer supported. Please migrate to JVM target 1.8 or above"
)
}
} else {
@@ -353,3 +353,6 @@ private val CompilerConfiguration.messageCollector: MessageCollector
private fun getJavaVersion(): Int =
System.getProperty("java.specification.version")?.substringAfter('.')?.toIntOrNull() ?: 6
private fun isJvmTarget6Allowed(): Boolean =
K2JVMCompiler::class.java.classLoader.getResource("META-INF/unsafe-allow-jvm6") != null