From 34181402fb20cf9c7fde65f52188a1b61bc6ab64 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Mon, 20 Jun 2016 16:48:45 +0300 Subject: [PATCH] Fix CCE when creating kotlin-js task in gradle plugin --- .../kotlin/gradle/plugin/KotlinPlugin.kt | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index c765be1e9c8..29fed9425a5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -45,11 +45,10 @@ abstract class KotlinSourceSetProcessor( val project: ProjectInternal, val javaBasePlugin: JavaBasePlugin, val sourceSet: SourceSet, + val tasksProvider: KotlinTasksProvider, val pluginName: String, val compileTaskNameSuffix: String, - val taskDescription: String, - val compilerClass: Class, - val tasksProvider: KotlinTasksProvider + val taskDescription: String ) { abstract protected fun doTargetSpecificProcessing() val logger = Logging.getLogger(this.javaClass) @@ -98,10 +97,10 @@ abstract class KotlinSourceSetProcessor( open protected fun createKotlinCompileTask(suffix: String = ""): T { val name = sourceSet.getCompileTaskName(compileTaskNameSuffix) + suffix - logger.kotlinDebug("Creating kotlin compile task $name with class $compilerClass") - val compile = tasksProvider.createKotlinJVMTask(project, name) - compile.extensions.extraProperties.set("defaultModuleName", "${project.name}-$name") - return compilerClass.cast(compile) + logger.kotlinDebug("Creating kotlin compile task $name") + val kotlinCompile = doCreateTask(project, name) + kotlinCompile.extensions.extraProperties.set("defaultModuleName", "${project.name}-$name") + return kotlinCompile } open protected fun commonTaskConfiguration() { @@ -110,6 +109,8 @@ abstract class KotlinSourceSetProcessor( kotlinTask.source(kotlinDirSet) mapKotlinTaskProperties(project, kotlinTask) } + + protected abstract fun doCreateTask(project: Project, taskName: String): T } class Kotlin2JvmSourceSetProcessor( @@ -119,18 +120,19 @@ class Kotlin2JvmSourceSetProcessor( val scriptHandler: ScriptHandler, tasksProvider: KotlinTasksProvider ) : KotlinSourceSetProcessor( - project, javaBasePlugin, sourceSet, + project, javaBasePlugin, sourceSet, tasksProvider, pluginName = "kotlin", compileTaskNameSuffix = "kotlin", - taskDescription = "Compiles the $sourceSet.kotlin.", - compilerClass = tasksProvider.kotlinJVMCompileTaskClass, - tasksProvider = tasksProvider + taskDescription = "Compiles the $sourceSet.kotlin." ) { private companion object { private var cachedKotlinAnnotationProcessingDep: String? = null } + override fun doCreateTask(project: Project, taskName: String): AbstractCompile = + tasksProvider.createKotlinJVMTask(project, taskName) + override fun doTargetSpecificProcessing() { val kotlinAnnotationProcessingDep = cachedKotlinAnnotationProcessingDep ?: run { val projectVersion = loadKotlinVersionFromResource(project.logger) @@ -190,12 +192,10 @@ class Kotlin2JsSourceSetProcessor( val scriptHandler: ScriptHandler, tasksProvider: KotlinTasksProvider ) : KotlinSourceSetProcessor( - project, javaBasePlugin, sourceSet, + project, javaBasePlugin, sourceSet, tasksProvider, pluginName = "kotlin2js", taskDescription = "Compiles the kotlin sources in $sourceSet to JavaScript.", - compileTaskNameSuffix = "kotlin2Js", - compilerClass = tasksProvider.kotlinJSCompileTaskClass, - tasksProvider = tasksProvider + compileTaskNameSuffix = "kotlin2Js" ) { val copyKotlinJsTaskName = sourceSet.getTaskName("copy", "kotlinJs") @@ -213,6 +213,9 @@ class Kotlin2JsSourceSetProcessor( private fun shouldGenerateSourceMap() = kotlinTask.property("sourceMap") + override fun doCreateTask(project: Project, taskName: String): AbstractCompile = + tasksProvider.createKotlinJSTask(project, taskName) + override fun doTargetSpecificProcessing() { kotlinTask.kotlinDestinationDir = defaultKotlinDestinationDir build?.dependsOn(kotlinTaskName)