diff --git a/generators/src/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt b/generators/src/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt index cea89a9bacf..b256997b0a4 100644 --- a/generators/src/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt +++ b/generators/src/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt @@ -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() + + // common interface + val commonInterfaceFqName = FqName("org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions") + val commonOptions = gradleOptions() + val additionalOptions = gradleOptions() + withPrinterToFile(File(srcDir, commonInterfaceFqName)) { + generateInterface(commonInterfaceFqName, + commonOptions + additionalOptions) + } // generate jvm interface val jvmInterfaceFqName = FqName("org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions") - val optionsFromK2JVMCompilerArguments = gradleOptions() + val jvmOptions = gradleOptions() 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() + val jsOptions = gradleOptions() 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) { } private inline fun gradleOptions(): List> = - T::class.memberProperties.filter { it.findAnnotation() != null }.sortedBy { it.name } + T::class.declaredMemberProperties.filter { it.findAnnotation() != 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>) { - generateDeclaration("interface", type) { +private fun Printer.generateInterface(type: FqName, properties: List>, 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() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonOptions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonOptions.kt new file mode 100644 index 00000000000..ee729528836 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonOptions.kt @@ -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 +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt index c9d9069ce91..02442bd5469 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt @@ -19,7 +19,7 @@ package org.jetbrains.kotlin.gradle.dsl import groovy.lang.Closure import org.gradle.api.Task -interface KotlinCompile : Task { +interface KotlinCompile : Task { val kotlinOptions: T fun kotlinOptions(fn: T.() -> Unit) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions.kt index a47f9644caf..d7d57039086 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions.kt @@ -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 } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsBase.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsBase.kt index 3ae48f2afbe..8138a277c76 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsBase.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsBase.kt @@ -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 } 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 f6ff56cd41c..f28b28745c3 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 @@ -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 } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt index 683c9707694..ca0a576faf9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt @@ -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 }