From 7772ab00cdf50a7d754f315db68c1216188f0dda Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 25 Aug 2022 11:37:48 +0200 Subject: [PATCH] Generate JvmTarget Gradle DSL object This is generated based on JvmTarget compiler type without exposing compiler internals. ^KT-27301 In Progress --- .../arguments/GenerateGradleOptions.kt | 1 + .../arguments/jvmTargetGenerator.kt | 44 +++++++++++++++++++ .../jetbrains/kotlin/gradle/dsl/JvmTarget.kt | 25 +++++++++++ 3 files changed, 70 insertions(+) create mode 100644 generators/tests/org/jetbrains/kotlin/generators/arguments/jvmTargetGenerator.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JvmTarget.kt diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt index 25b49062ff9..e2773e0c2bf 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt @@ -34,6 +34,7 @@ fun generateKotlinGradleOptions(withPrinterToFile: (targetFile: File, Printer.() // specific Gradle types from internal compiler types generateKotlinVersion(apiSrcDir, withPrinterToFile) + generateJvmTarget(apiSrcDir, withPrinterToFile) // common interface val commonInterfaceFqName = FqName("org.jetbrains.kotlin.gradle.dsl.KotlinCommonToolOptions") diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/jvmTargetGenerator.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/jvmTargetGenerator.kt new file mode 100644 index 00000000000..0a57552d5f4 --- /dev/null +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/jvmTargetGenerator.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.generators.arguments + +import org.jetbrains.kotlin.config.JvmTarget +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.utils.Printer +import java.io.File + +internal fun generateJvmTarget( + apiDir: File, + filePrinter: (targetFile: File, Printer.() -> Unit) -> Unit +) { + val jvmTargetFqName = FqName("org.jetbrains.kotlin.gradle.dsl.JvmTarget") + filePrinter(file(apiDir, jvmTargetFqName)) { + generateDeclaration("enum class", jvmTargetFqName, afterType = "(val target: String)") { + val jvmTargetValues = JvmTarget.values() + val deprecatedJvmTargetValues = JvmTarget.values().subtract(JvmTarget.supportedValues().toSet()) + + val lastIndex = jvmTargetValues.size - 1 + jvmTargetValues.forEachIndexed { index, jvmTarget -> + val lastChar = if (index == lastIndex) ";" else "," + val prefix = if (jvmTarget in deprecatedJvmTargetValues) { + "@Deprecated(\"Will be removed soon\") " + } else { + "" + } + println("$prefix${jvmTarget.name}(\"${jvmTarget.description}\")$lastChar") + } + + println() + println("companion object {") + withIndent { + println("fun fromTarget(target: String): JvmTarget =") + println(" JvmTarget.values().firstOrNull { it.target == target }") + println(" ?: throw IllegalArgumentException(\"Unknown Kotlin JVM target: ${'$'}target\")") + } + println("}") + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JvmTarget.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JvmTarget.kt new file mode 100644 index 00000000000..ccb5b882d40 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JvmTarget.kt @@ -0,0 +1,25 @@ +// DO NOT EDIT MANUALLY! +// Generated by org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt +package org.jetbrains.kotlin.gradle.dsl + +@Suppress("DEPRECATION") +enum class JvmTarget (val target: String) { + @Deprecated("Will be removed soon") JVM_1_6("1.6"), + JVM_1_8("1.8"), + JVM_9("9"), + JVM_10("10"), + JVM_11("11"), + JVM_12("12"), + JVM_13("13"), + JVM_14("14"), + JVM_15("15"), + JVM_16("16"), + JVM_17("17"), + JVM_18("18"); + + companion object { + fun fromTarget(target: String): JvmTarget = + JvmTarget.values().firstOrNull { it.target == target } + ?: throw IllegalArgumentException("Unknown Kotlin JVM target: $target") + } +}