Introduce common interface for common gradle options
This might be useful for future kotlin build scripts
This commit is contained in:
@@ -17,16 +17,14 @@
|
||||
package org.jetbrains.kotlin.generators.arguments
|
||||
|
||||
import com.sampullara.cli.Argument
|
||||
import org.jetbrains.kotlin.cli.common.arguments.DefaultValues
|
||||
import org.jetbrains.kotlin.cli.common.arguments.GradleOption
|
||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||
import org.jetbrains.kotlin.cli.common.arguments.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.utils.Printer
|
||||
import java.io.File
|
||||
import java.io.PrintStream
|
||||
import kotlin.reflect.KAnnotatedElement
|
||||
import kotlin.reflect.KProperty1
|
||||
import kotlin.reflect.declaredMemberProperties
|
||||
import kotlin.reflect.memberProperties
|
||||
|
||||
// Additional properties that should be included in interface
|
||||
@@ -41,14 +39,23 @@ interface AdditionalGradleProperties {
|
||||
|
||||
fun generateKotlinGradleOptions(withPrinterToFile: (targetFile: File, Printer.()->Unit)->Unit) {
|
||||
val srcDir = File("libraries/tools/kotlin-gradle-plugin/src/main/kotlin")
|
||||
val additionalGradleOptions = gradleOptions<AdditionalGradleProperties>()
|
||||
|
||||
// common interface
|
||||
val commonInterfaceFqName = FqName("org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions")
|
||||
val commonOptions = gradleOptions<CommonCompilerArguments>()
|
||||
val additionalOptions = gradleOptions<AdditionalGradleProperties>()
|
||||
withPrinterToFile(File(srcDir, commonInterfaceFqName)) {
|
||||
generateInterface(commonInterfaceFqName,
|
||||
commonOptions + additionalOptions)
|
||||
}
|
||||
|
||||
// generate jvm interface
|
||||
val jvmInterfaceFqName = FqName("org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions")
|
||||
val optionsFromK2JVMCompilerArguments = gradleOptions<K2JVMCompilerArguments>()
|
||||
val jvmOptions = gradleOptions<K2JVMCompilerArguments>()
|
||||
withPrinterToFile(File(srcDir, jvmInterfaceFqName)) {
|
||||
generateInterface(jvmInterfaceFqName,
|
||||
optionsFromK2JVMCompilerArguments + additionalGradleOptions)
|
||||
jvmOptions,
|
||||
parentType = commonInterfaceFqName)
|
||||
}
|
||||
|
||||
// generate jvm impl
|
||||
@@ -58,16 +65,16 @@ fun generateKotlinGradleOptions(withPrinterToFile: (targetFile: File, Printer.()
|
||||
generateImpl(jvmImplFqName,
|
||||
jvmInterfaceFqName,
|
||||
k2JvmCompilerArgumentsFqName,
|
||||
optionsFromK2JVMCompilerArguments)
|
||||
commonOptions + jvmOptions)
|
||||
}
|
||||
|
||||
// generate js interface
|
||||
val jsInterfaceFqName = FqName("org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions")
|
||||
val optionsFromK2JSCompilerArguments = gradleOptions<K2JSCompilerArguments>()
|
||||
val jsOptions = gradleOptions<K2JSCompilerArguments>()
|
||||
withPrinterToFile(File(srcDir, jsInterfaceFqName)) {
|
||||
generateInterface(jsInterfaceFqName,
|
||||
optionsFromK2JSCompilerArguments +
|
||||
additionalGradleOptions)
|
||||
jsOptions,
|
||||
parentType = commonInterfaceFqName)
|
||||
}
|
||||
|
||||
val k2JsCompilerArgumentsFqName = FqName(K2JSCompilerArguments::class.qualifiedName!!)
|
||||
@@ -76,7 +83,7 @@ fun generateKotlinGradleOptions(withPrinterToFile: (targetFile: File, Printer.()
|
||||
generateImpl(jsImplFqName,
|
||||
jsInterfaceFqName,
|
||||
k2JsCompilerArgumentsFqName,
|
||||
optionsFromK2JSCompilerArguments)
|
||||
commonOptions + jsOptions)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,15 +103,16 @@ fun main(args: Array<String>) {
|
||||
}
|
||||
|
||||
private inline fun <reified T : Any> gradleOptions(): List<KProperty1<T, *>> =
|
||||
T::class.memberProperties.filter { it.findAnnotation<GradleOption>() != null }.sortedBy { it.name }
|
||||
T::class.declaredMemberProperties.filter { it.findAnnotation<GradleOption>() != null }.sortedBy { it.name }
|
||||
|
||||
private fun File(baseDir: File, fqName: FqName): File {
|
||||
val fileRelativePath = fqName.asString().replace(".", "/") + ".kt"
|
||||
return File(baseDir, fileRelativePath)
|
||||
}
|
||||
|
||||
private fun Printer.generateInterface(type: FqName, properties: List<KProperty1<*, *>>) {
|
||||
generateDeclaration("interface", type) {
|
||||
private fun Printer.generateInterface(type: FqName, properties: List<KProperty1<*, *>>, parentType: FqName? = null) {
|
||||
val afterType = parentType?.let { " : $it" }
|
||||
generateDeclaration("interface", type, afterType = afterType) {
|
||||
for (property in properties) {
|
||||
println()
|
||||
generateDoc(property)
|
||||
@@ -135,7 +143,7 @@ private fun Printer.generateImpl(
|
||||
}
|
||||
|
||||
println()
|
||||
println("open fun updateArguments(args: $argsType) {")
|
||||
println("internal open fun updateArguments(args: $argsType) {")
|
||||
withIndent {
|
||||
for (property in properties) {
|
||||
val backingField = property.backingField()
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
// DO NOT EDIT MANUALLY!
|
||||
// Generated by org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt
|
||||
package org.jetbrains.kotlin.gradle.dsl
|
||||
|
||||
interface KotlinCommonOptions {
|
||||
|
||||
/**
|
||||
* Allow to use declarations only from the specified version of bundled libraries
|
||||
* Possible values: "1.0", "1.1"
|
||||
* Default value: "1.1"
|
||||
*/
|
||||
var apiVersion: kotlin.String
|
||||
|
||||
/**
|
||||
* Provide source compatibility with specified language version
|
||||
* Possible values: "1.0", "1.1"
|
||||
* Default value: "1.1"
|
||||
*/
|
||||
var languageVersion: kotlin.String
|
||||
|
||||
/**
|
||||
* Generate no warnings
|
||||
* Default value: false
|
||||
*/
|
||||
var suppressWarnings: kotlin.Boolean
|
||||
|
||||
/**
|
||||
* Enable verbose logging output
|
||||
* Default value: false
|
||||
*/
|
||||
var verbose: kotlin.Boolean
|
||||
|
||||
/**
|
||||
* A list of additional compiler arguments
|
||||
* Default value: emptyList()
|
||||
*/
|
||||
var freeCompilerArgs: kotlin.collections.List<kotlin.String>
|
||||
}
|
||||
+1
-1
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.gradle.dsl
|
||||
import groovy.lang.Closure
|
||||
import org.gradle.api.Task
|
||||
|
||||
interface KotlinCompile<T> : Task {
|
||||
interface KotlinCompile<T : KotlinCommonOptions> : Task {
|
||||
val kotlinOptions: T
|
||||
|
||||
fun kotlinOptions(fn: T.() -> Unit) {
|
||||
|
||||
+1
-33
@@ -2,14 +2,7 @@
|
||||
// Generated by org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt
|
||||
package org.jetbrains.kotlin.gradle.dsl
|
||||
|
||||
interface KotlinJsOptions {
|
||||
|
||||
/**
|
||||
* Allow to use declarations only from the specified version of bundled libraries
|
||||
* Possible values: "1.0", "1.1"
|
||||
* Default value: "1.1"
|
||||
*/
|
||||
var apiVersion: kotlin.String
|
||||
interface KotlinJsOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions {
|
||||
|
||||
/**
|
||||
* Generate kjsm-files (for creating libraries)
|
||||
@@ -17,13 +10,6 @@ interface KotlinJsOptions {
|
||||
*/
|
||||
var kjsm: kotlin.Boolean
|
||||
|
||||
/**
|
||||
* Provide source compatibility with specified language version
|
||||
* Possible values: "1.0", "1.1"
|
||||
* Default value: "1.1"
|
||||
*/
|
||||
var languageVersion: kotlin.String
|
||||
|
||||
/**
|
||||
* Whether a main function should be called
|
||||
* Possible values: "call", "noCall"
|
||||
@@ -62,28 +48,10 @@ interface KotlinJsOptions {
|
||||
*/
|
||||
var sourceMap: kotlin.Boolean
|
||||
|
||||
/**
|
||||
* Generate no warnings
|
||||
* Default value: false
|
||||
*/
|
||||
var suppressWarnings: kotlin.Boolean
|
||||
|
||||
/**
|
||||
* Generate JS files for specific ECMA version
|
||||
* Possible values: "v5"
|
||||
* Default value: "v5"
|
||||
*/
|
||||
var target: kotlin.String
|
||||
|
||||
/**
|
||||
* Enable verbose logging output
|
||||
* Default value: false
|
||||
*/
|
||||
var verbose: kotlin.Boolean
|
||||
|
||||
/**
|
||||
* A list of additional compiler arguments
|
||||
* Default value: emptyList()
|
||||
*/
|
||||
var freeCompilerArgs: kotlin.collections.List<kotlin.String>
|
||||
}
|
||||
|
||||
+22
-22
@@ -9,16 +9,26 @@ internal abstract class KotlinJsOptionsBase : org.jetbrains.kotlin.gradle.dsl.Ko
|
||||
get() = apiVersionField ?: "1.1"
|
||||
set(value) { apiVersionField = value }
|
||||
|
||||
private var kjsmField: kotlin.Boolean? = null
|
||||
override var kjsm: kotlin.Boolean
|
||||
get() = kjsmField ?: true
|
||||
set(value) { kjsmField = value }
|
||||
|
||||
private var languageVersionField: kotlin.String? = null
|
||||
override var languageVersion: kotlin.String
|
||||
get() = languageVersionField ?: "1.1"
|
||||
set(value) { languageVersionField = value }
|
||||
|
||||
private var suppressWarningsField: kotlin.Boolean? = null
|
||||
override var suppressWarnings: kotlin.Boolean
|
||||
get() = suppressWarningsField ?: false
|
||||
set(value) { suppressWarningsField = value }
|
||||
|
||||
private var verboseField: kotlin.Boolean? = null
|
||||
override var verbose: kotlin.Boolean
|
||||
get() = verboseField ?: false
|
||||
set(value) { verboseField = value }
|
||||
|
||||
private var kjsmField: kotlin.Boolean? = null
|
||||
override var kjsm: kotlin.Boolean
|
||||
get() = kjsmField ?: true
|
||||
set(value) { kjsmField = value }
|
||||
|
||||
private var mainField: kotlin.String? = null
|
||||
override var main: kotlin.String
|
||||
get() = mainField ?: "noCall"
|
||||
@@ -49,48 +59,38 @@ internal abstract class KotlinJsOptionsBase : org.jetbrains.kotlin.gradle.dsl.Ko
|
||||
get() = sourceMapField ?: false
|
||||
set(value) { sourceMapField = value }
|
||||
|
||||
private var suppressWarningsField: kotlin.Boolean? = null
|
||||
override var suppressWarnings: kotlin.Boolean
|
||||
get() = suppressWarningsField ?: false
|
||||
set(value) { suppressWarningsField = value }
|
||||
|
||||
private var targetField: kotlin.String? = null
|
||||
override var target: kotlin.String
|
||||
get() = targetField ?: "v5"
|
||||
set(value) { targetField = value }
|
||||
|
||||
private var verboseField: kotlin.Boolean? = null
|
||||
override var verbose: kotlin.Boolean
|
||||
get() = verboseField ?: false
|
||||
set(value) { verboseField = value }
|
||||
|
||||
open fun updateArguments(args: org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments) {
|
||||
internal open fun updateArguments(args: org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments) {
|
||||
apiVersionField?.let { args.apiVersion = it }
|
||||
kjsmField?.let { args.kjsm = it }
|
||||
languageVersionField?.let { args.languageVersion = it }
|
||||
suppressWarningsField?.let { args.suppressWarnings = it }
|
||||
verboseField?.let { args.verbose = it }
|
||||
kjsmField?.let { args.kjsm = it }
|
||||
mainField?.let { args.main = it }
|
||||
metaInfoField?.let { args.metaInfo = it }
|
||||
moduleKindField?.let { args.moduleKind = it }
|
||||
noStdlibField?.let { args.noStdlib = it }
|
||||
outputFileField?.let { args.outputFile = it }
|
||||
sourceMapField?.let { args.sourceMap = it }
|
||||
suppressWarningsField?.let { args.suppressWarnings = it }
|
||||
targetField?.let { args.target = it }
|
||||
verboseField?.let { args.verbose = it }
|
||||
}
|
||||
}
|
||||
|
||||
internal fun org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments.fillDefaultValues() {
|
||||
apiVersion = "1.1"
|
||||
kjsm = true
|
||||
languageVersion = "1.1"
|
||||
suppressWarnings = false
|
||||
verbose = false
|
||||
kjsm = true
|
||||
main = "noCall"
|
||||
metaInfo = true
|
||||
moduleKind = "plain"
|
||||
noStdlib = true
|
||||
outputFile = null
|
||||
sourceMap = false
|
||||
suppressWarnings = false
|
||||
target = "v5"
|
||||
verbose = false
|
||||
}
|
||||
|
||||
+1
-33
@@ -2,14 +2,7 @@
|
||||
// Generated by org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt
|
||||
package org.jetbrains.kotlin.gradle.dsl
|
||||
|
||||
interface KotlinJvmOptions {
|
||||
|
||||
/**
|
||||
* Allow to use declarations only from the specified version of bundled libraries
|
||||
* Possible values: "1.0", "1.1"
|
||||
* Default value: "1.1"
|
||||
*/
|
||||
var apiVersion: kotlin.String
|
||||
interface KotlinJvmOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions {
|
||||
|
||||
/**
|
||||
* Include Kotlin runtime in to resulting .jar
|
||||
@@ -30,13 +23,6 @@ interface KotlinJvmOptions {
|
||||
*/
|
||||
var jvmTarget: kotlin.String
|
||||
|
||||
/**
|
||||
* Provide source compatibility with specified language version
|
||||
* Possible values: "1.0", "1.1"
|
||||
* Default value: "1.1"
|
||||
*/
|
||||
var languageVersion: kotlin.String
|
||||
|
||||
/**
|
||||
* Don't include Java runtime into classpath
|
||||
* Default value: false
|
||||
@@ -54,22 +40,4 @@ interface KotlinJvmOptions {
|
||||
* Default value: true
|
||||
*/
|
||||
var noStdlib: kotlin.Boolean
|
||||
|
||||
/**
|
||||
* Generate no warnings
|
||||
* Default value: false
|
||||
*/
|
||||
var suppressWarnings: kotlin.Boolean
|
||||
|
||||
/**
|
||||
* Enable verbose logging output
|
||||
* Default value: false
|
||||
*/
|
||||
var verbose: kotlin.Boolean
|
||||
|
||||
/**
|
||||
* A list of additional compiler arguments
|
||||
* Default value: emptyList()
|
||||
*/
|
||||
var freeCompilerArgs: kotlin.collections.List<kotlin.String>
|
||||
}
|
||||
|
||||
+22
-22
@@ -9,6 +9,21 @@ internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.K
|
||||
get() = apiVersionField ?: "1.1"
|
||||
set(value) { apiVersionField = value }
|
||||
|
||||
private var languageVersionField: kotlin.String? = null
|
||||
override var languageVersion: kotlin.String
|
||||
get() = languageVersionField ?: "1.1"
|
||||
set(value) { languageVersionField = value }
|
||||
|
||||
private var suppressWarningsField: kotlin.Boolean? = null
|
||||
override var suppressWarnings: kotlin.Boolean
|
||||
get() = suppressWarningsField ?: false
|
||||
set(value) { suppressWarningsField = value }
|
||||
|
||||
private var verboseField: kotlin.Boolean? = null
|
||||
override var verbose: kotlin.Boolean
|
||||
get() = verboseField ?: false
|
||||
set(value) { verboseField = value }
|
||||
|
||||
private var includeRuntimeField: kotlin.Boolean? = null
|
||||
override var includeRuntime: kotlin.Boolean
|
||||
get() = includeRuntimeField ?: false
|
||||
@@ -24,11 +39,6 @@ internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.K
|
||||
get() = jvmTargetField ?: "1.6"
|
||||
set(value) { jvmTargetField = value }
|
||||
|
||||
private var languageVersionField: kotlin.String? = null
|
||||
override var languageVersion: kotlin.String
|
||||
get() = languageVersionField ?: "1.1"
|
||||
set(value) { languageVersionField = value }
|
||||
|
||||
private var noJdkField: kotlin.Boolean? = null
|
||||
override var noJdk: kotlin.Boolean
|
||||
get() = noJdkField ?: false
|
||||
@@ -44,39 +54,29 @@ internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.K
|
||||
get() = noStdlibField ?: true
|
||||
set(value) { noStdlibField = value }
|
||||
|
||||
private var suppressWarningsField: kotlin.Boolean? = null
|
||||
override var suppressWarnings: kotlin.Boolean
|
||||
get() = suppressWarningsField ?: false
|
||||
set(value) { suppressWarningsField = value }
|
||||
|
||||
private var verboseField: kotlin.Boolean? = null
|
||||
override var verbose: kotlin.Boolean
|
||||
get() = verboseField ?: false
|
||||
set(value) { verboseField = value }
|
||||
|
||||
open fun updateArguments(args: org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments) {
|
||||
internal open fun updateArguments(args: org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments) {
|
||||
apiVersionField?.let { args.apiVersion = it }
|
||||
languageVersionField?.let { args.languageVersion = it }
|
||||
suppressWarningsField?.let { args.suppressWarnings = it }
|
||||
verboseField?.let { args.verbose = it }
|
||||
includeRuntimeField?.let { args.includeRuntime = it }
|
||||
jdkHomeField?.let { args.jdkHome = it }
|
||||
jvmTargetField?.let { args.jvmTarget = it }
|
||||
languageVersionField?.let { args.languageVersion = it }
|
||||
noJdkField?.let { args.noJdk = it }
|
||||
noReflectField?.let { args.noReflect = it }
|
||||
noStdlibField?.let { args.noStdlib = it }
|
||||
suppressWarningsField?.let { args.suppressWarnings = it }
|
||||
verboseField?.let { args.verbose = it }
|
||||
}
|
||||
}
|
||||
|
||||
internal fun org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments.fillDefaultValues() {
|
||||
apiVersion = "1.1"
|
||||
languageVersion = "1.1"
|
||||
suppressWarnings = false
|
||||
verbose = false
|
||||
includeRuntime = false
|
||||
jdkHome = null
|
||||
jvmTarget = "1.6"
|
||||
languageVersion = "1.1"
|
||||
noJdk = false
|
||||
noReflect = true
|
||||
noStdlib = true
|
||||
suppressWarnings = false
|
||||
verbose = false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user