From 6697c902fc836064ec37a0c89b6b0a96d1b2a126 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Thu, 15 Dec 2016 01:25:22 +0300 Subject: [PATCH] Attempt to add property go kotlin gradle plugin --- .../kotlin/gradle/plugin/KotlinProperties.kt | 17 ++++++++++++++++- .../org/jetbrains/kotlin/gradle/tasks/Tasks.kt | 16 ++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index 1af7d4760c8..2eff69c8b4a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -33,7 +33,8 @@ fun mapKotlinTaskProperties(project: Project, task: KotlinCompile) { } private val propertyMappings = listOf( - KotlinPropertyMapping("kotlin.incremental", KotlinCompile::incremental, String::toBoolean) + KotlinPropertyMapping("kotlin.incremental", KotlinCompile::incremental, String::toBoolean), + KotlinPropertyMapping("kotlin.coroutines", KotlinCompile::coroutines) { CoroutineSupport.byCompilerArgument(it) } ) private class KotlinPropertyMapping( @@ -57,4 +58,18 @@ private class KotlinPropertyMapping( val transformedValue = transform(value) ?: return taskProperty.set(task, transformedValue) } +} + +enum class CoroutineSupport(val compilerArgument: String) { + ENABLED("enable"), + ENABLED_WITH_WARNING("warn"), + DISABLED("error"); + + companion object { + val DEFAULT = ENABLED_WITH_WARNING + + fun byCompilerArgument(argument: String): CoroutineSupport { + return CoroutineSupport.values().find { it.compilerArgument == argument } ?: DEFAULT + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index ae578a2fa17..d2f10262832 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler import org.jetbrains.kotlin.compilerRunner.ArgumentUtils import org.jetbrains.kotlin.config.Services import org.jetbrains.kotlin.gradle.dsl.* +import org.jetbrains.kotlin.gradle.plugin.CoroutineSupport import org.jetbrains.kotlin.gradle.plugin.kotlinDebug import org.jetbrains.kotlin.gradle.plugin.kotlinInfo import org.jetbrains.kotlin.gradle.utils.ParsedGradleVersion @@ -70,6 +71,13 @@ abstract class AbstractKotlinCompile() : AbstractCo System.setProperty("kotlin.incremental.compilation.experimental", value.toString()) } + var coroutines: CoroutineSupport = CoroutineSupport.DEFAULT + get() = field + set(value) { + field = value + logger.kotlinDebug { "Set $this.coroutines=${value.compilerArgument}" } + } + internal var compilerCalled: Boolean = false // TODO: consider more reliable approach (see usage) internal var anyClassesCompiled: Boolean = false @@ -178,6 +186,10 @@ open class KotlinCompile : AbstractKotlinCompile(), Kotl val outputDir = destinationDir + args.coroutinesEnable = coroutines == CoroutineSupport.ENABLED + args.coroutinesWarn = coroutines == CoroutineSupport.ENABLED_WITH_WARNING + args.coroutinesError = coroutines == CoroutineSupport.DISABLED + if (!incremental) { anyClassesCompiled = true processCompilerExitCode(compileJvmNotIncrementally( @@ -343,6 +355,10 @@ open class Kotlin2JsCompile() : AbstractKotlinCompile(), destinationDir.mkdirs() args.freeArgs = args.freeArgs + sourceRoots.kotlinSourceFiles.map { it.absolutePath } + args.coroutinesEnable = coroutines == CoroutineSupport.ENABLED + args.coroutinesWarn = coroutines == CoroutineSupport.ENABLED_WITH_WARNING + args.coroutinesError = coroutines == CoroutineSupport.DISABLED + if (args.outputFile == null) { args.outputFile = defaultOutputFile.canonicalPath }