From 94346e8a03dae5b7e496c6edabe3814c5843f310 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 20 Apr 2020 15:18:57 +0200 Subject: [PATCH] Add JVM target bytecode version 14 #KT-38413 Fixed --- .../jetbrains/kotlin/codegen/AnnotationCodegen.java | 12 +++++------- .../cli/common/arguments/K2JVMCompilerArguments.kt | 2 +- .../src/org/jetbrains/kotlin/config/JvmTarget.kt | 3 ++- .../jvm/lower/AdditionalClassAnnotationLowering.kt | 12 +++--------- compiler/testData/cli/jvm/help.out | 2 +- compiler/testData/cli/jvm/wrongJvmTargetVersion.out | 2 +- .../jetbrains/kotlin/gradle/dsl/KotlinJvmOptions.kt | 4 ++-- 7 files changed, 15 insertions(+), 22 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java index 24217afa6e5..8f5eac6efdb 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java @@ -40,7 +40,6 @@ import org.jetbrains.kotlin.types.FlexibleType; import org.jetbrains.kotlin.types.FlexibleTypesKt; import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.TypeUtils; -import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext; import org.jetbrains.org.objectweb.asm.*; import java.lang.annotation.*; @@ -254,12 +253,11 @@ public abstract class AnnotationCodegen { jvm8.put(KotlinTarget.TYPE, ElementType.TYPE_USE); annotationTargetMaps.put(JvmTarget.JVM_1_6, jvm6); - annotationTargetMaps.put(JvmTarget.JVM_1_8, jvm8); - annotationTargetMaps.put(JvmTarget.JVM_9, jvm8); - annotationTargetMaps.put(JvmTarget.JVM_10, jvm8); - annotationTargetMaps.put(JvmTarget.JVM_11, jvm8); - annotationTargetMaps.put(JvmTarget.JVM_12, jvm8); - annotationTargetMaps.put(JvmTarget.JVM_13, jvm8); + for (JvmTarget target : JvmTarget.values()) { + if (target != JvmTarget.JVM_1_6) { + annotationTargetMaps.put(target, jvm8); + } + } } private void generateTargetAnnotation( diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt index 9512b5cf642..5547dd9a048 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt @@ -70,7 +70,7 @@ class K2JVMCompilerArguments : CommonCompilerArguments() { @Argument( value = "-jvm-target", valueDescription = "", - description = "Target version of the generated JVM bytecode (1.6, 1.8, 9, 10, 11, 12 or 13), default is 1.6" + description = "Target version of the generated JVM bytecode (1.6, 1.8, 9, 10, 11, 12, 13 or 14), default is 1.6" ) var jvmTarget: String? by NullableStringFreezableVar(JvmTarget.DEFAULT.description) diff --git a/compiler/config.jvm/src/org/jetbrains/kotlin/config/JvmTarget.kt b/compiler/config.jvm/src/org/jetbrains/kotlin/config/JvmTarget.kt index 27adb7d3121..3974e7dac9b 100644 --- a/compiler/config.jvm/src/org/jetbrains/kotlin/config/JvmTarget.kt +++ b/compiler/config.jvm/src/org/jetbrains/kotlin/config/JvmTarget.kt @@ -14,7 +14,6 @@ * limitations under the License. */ - package org.jetbrains.kotlin.config import org.jetbrains.kotlin.platform.TargetPlatformVersion @@ -28,6 +27,7 @@ enum class JvmTarget(override val description: String) : TargetPlatformVersion { JVM_11("11"), JVM_12("12"), JVM_13("13"), + JVM_14("14"), ; val bytecodeVersion: Int by lazy { @@ -39,6 +39,7 @@ enum class JvmTarget(override val description: String) : TargetPlatformVersion { JVM_11 -> Opcodes.V11 JVM_12 -> Opcodes.V12 JVM_13 -> Opcodes.V12 + 1 + JVM_14 -> Opcodes.V12 + 2 } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AdditionalClassAnnotationLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AdditionalClassAnnotationLowering.kt index 0cdfcf611b5..d5c2e4ce1cc 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AdditionalClassAnnotationLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AdditionalClassAnnotationLowering.kt @@ -188,15 +188,9 @@ private class AdditionalClassAnnotationLowering(private val context: JvmBackendC ) private val annotationTargetMaps: Map> = - mapOf( - JvmTarget.JVM_1_6 to jvm6TargetMap, - JvmTarget.JVM_1_8 to jvm8TargetMap, - JvmTarget.JVM_9 to jvm8TargetMap, - JvmTarget.JVM_10 to jvm8TargetMap, - JvmTarget.JVM_11 to jvm8TargetMap, - JvmTarget.JVM_12 to jvm8TargetMap, - JvmTarget.JVM_13 to jvm8TargetMap - ) + JvmTarget.values().associate { target -> + target to (if (target == JvmTarget.JVM_1_6) jvm6TargetMap else jvm8TargetMap) + } private fun generateTargetAnnotation(irClass: IrClass) { if (irClass.hasAnnotation(FqName("java.lang.annotation.Target"))) return diff --git a/compiler/testData/cli/jvm/help.out b/compiler/testData/cli/jvm/help.out index 81871fde6b2..59ae3ae4f92 100644 --- a/compiler/testData/cli/jvm/help.out +++ b/compiler/testData/cli/jvm/help.out @@ -6,7 +6,7 @@ where possible options include: -include-runtime Include Kotlin runtime into the resulting JAR -java-parameters Generate metadata for Java 1.8 reflection on method parameters -jdk-home Include a custom JDK from the specified location into the classpath instead of the default JAVA_HOME - -jvm-target Target version of the generated JVM bytecode (1.6, 1.8, 9, 10, 11, 12 or 13), default is 1.6 + -jvm-target Target version of the generated JVM bytecode (1.6, 1.8, 9, 10, 11, 12, 13 or 14), default is 1.6 -module-name Name of the generated .kotlin_module file -no-jdk Don't automatically include the Java runtime into the classpath -no-reflect Don't automatically include Kotlin reflection into the classpath diff --git a/compiler/testData/cli/jvm/wrongJvmTargetVersion.out b/compiler/testData/cli/jvm/wrongJvmTargetVersion.out index a9ab081c675..8fe5308de15 100644 --- a/compiler/testData/cli/jvm/wrongJvmTargetVersion.out +++ b/compiler/testData/cli/jvm/wrongJvmTargetVersion.out @@ -1,3 +1,3 @@ error: unknown JVM target version: 1.5 -Supported versions: 1.6, 1.8, 9, 10, 11, 12, 13 +Supported versions: 1.6, 1.8, 9, 10, 11, 12, 13, 14 COMPILATION_ERROR diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptions.kt index 20340fa35ec..e3aa3c9b9de 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptions.kt @@ -23,8 +23,8 @@ interface KotlinJvmOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonOption var jdkHome: kotlin.String? /** - * Target version of the generated JVM bytecode (1.6, 1.8, 9, 10, 11, 12 or 13), default is 1.6 - * Possible values: "1.6", "1.8", "9", "10", "11", "12", "13" + * Target version of the generated JVM bytecode (1.6, 1.8, 9, 10, 11, 12, 13 or 14), default is 1.6 + * Possible values: "1.6", "1.8", "9", "10", "11", "12", "13", "14" * Default value: "1.6" */ var jvmTarget: kotlin.String