diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index 5b91d1416ff..0437604df3e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -52,7 +52,7 @@ abstract class AbstractKotlinTargetConfigurator cleanTask.delete(kotlinCompilation.output.allOutputs) } - protected fun configureCompilations(platformTarget: KotlinTargetType) { + protected open fun configureCompilations(platformTarget: KotlinTargetType) { val project = platformTarget.project val main = platformTarget.compilations.create(KotlinCompilation.MAIN_COMPILATION_NAME) @@ -301,13 +301,26 @@ internal val KotlinCompilation<*>.deprecatedCompileConfigurationName: String internal val KotlinCompilationToRunnableFiles<*>.deprecatedRuntimeConfigurationName: String get() = disambiguateName("runtime") -open class KotlinTargetConfigurator>( +abstract class KotlinTargetConfigurator>( createDefaultSourceSets: Boolean, - createTestCompilation: Boolean + createTestCompilation: Boolean, + val kotlinPluginVersion: String ) : AbstractKotlinTargetConfigurator>( createDefaultSourceSets, createTestCompilation ) { + internal abstract fun buildCompilationProcessor(compilation: KotlinCompilationType): KotlinSourceSetProcessor<*> + + override fun configureCompilations(platformTarget: KotlinOnlyTarget) { + super.configureCompilations(platformTarget) + + platformTarget.compilations.all { compilation -> + buildCompilationProcessor(compilation).run() + if (compilation.name == KotlinCompilation.MAIN_COMPILATION_NAME) { + sourcesJarTask(compilation, platformTarget.targetName, platformTarget.targetName.toLowerCase()) + } + } + } override fun configureArchivesAndComponent(target: KotlinOnlyTarget) { val project = target.project diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt index 57c0d7ea47e..9c6c4bf3ce0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt @@ -13,8 +13,7 @@ abstract class KotlinOnlyTargetPreset>( protected val kotlinPluginVersion: String ) : KotlinTargetPreset> { - protected open fun createKotlinTargetConfigurator(): KotlinTargetConfigurator = - KotlinTargetConfigurator(createDefaultSourceSets = true, createTestCompilation = true) + protected abstract fun createKotlinTargetConfigurator(): KotlinTargetConfigurator protected open fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget): String? = target.targetName @@ -31,17 +30,9 @@ abstract class KotlinOnlyTargetPreset>( createKotlinTargetConfigurator().configureTarget(result) - result.compilations.all { compilation -> - buildCompilationProcessor(compilation).run() - if (compilation.name == KotlinCompilation.MAIN_COMPILATION_NAME) { - sourcesJarTask(compilation, result.targetName, result.targetName.toLowerCase()) - } - } - return result } protected abstract fun createCompilationFactory(forTarget: KotlinOnlyTarget): KotlinCompilationFactory protected abstract val platformType: KotlinPlatformType - internal abstract fun buildCompilationProcessor(compilation: T): KotlinSourceSetProcessor<*> } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt new file mode 100644 index 00000000000..2ccfa15e0f9 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt @@ -0,0 +1,86 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. 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.gradle.targets.js + +import org.gradle.api.plugins.JavaBasePlugin +import org.jetbrains.kotlin.gradle.plugin.Kotlin2JsSourceSetProcessor +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationToRunnableFiles +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor +import org.jetbrains.kotlin.gradle.plugin.KotlinTargetConfigurator +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget +import org.jetbrains.kotlin.gradle.targets.js.tasks.KotlinJsNodeModulesTask +import org.jetbrains.kotlin.gradle.targets.js.tasks.KotlinNodeJsTestRuntimeToNodeModulesTask +import org.jetbrains.kotlin.gradle.targets.js.tasks.KotlinNodeJsTestTask +import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider + +class KotlinJsTargetConfigurator(kotlinPluginVersion: String) : + KotlinTargetConfigurator(true, true, kotlinPluginVersion) { + + override fun buildCompilationProcessor(compilation: KotlinJsCompilation): KotlinSourceSetProcessor<*> { + val tasksProvider = KotlinTasksProvider(compilation.target.targetName) + return Kotlin2JsSourceSetProcessor(compilation.target.project, tasksProvider, compilation, kotlinPluginVersion) + } + + override fun configureTest(target: KotlinOnlyTarget) { + target.compilations.all { + configureTest(it) + } + } + + private fun configureTest(compilation: KotlinCompilationToRunnableFiles<*>) { + val target = compilation.target + val project = target.project + val name = compilation.name + val compileTestKotlin2Js = compilation.compileKotlinTask as Kotlin2JsCompile + val isDefaultTarget = compilation.name.isBlank() + + fun camelCaseName(prefix: String): String { + return if (isDefaultTarget) prefix + else name + prefix.capitalize() + } + + fun underscoredName(prefix: String): String { + return if (isDefaultTarget) prefix + else "${name}_$prefix" + } + + val nodeModulesDir = project.buildDir.resolve(underscoredName("node_modules")) + val nodeModulesTask = project.tasks.create( + camelCaseName("kotlinJsNodeModules"), + KotlinJsNodeModulesTask::class.java + ) { + it.dependsOn(compileTestKotlin2Js) + + it.nodeModulesDir = nodeModulesDir + it.compile = compileTestKotlin2Js + } + + val nodeModulesTestRuntimeTask = project.tasks.create( + camelCaseName("kotlinJsNodeModulesTestRuntime"), + KotlinNodeJsTestRuntimeToNodeModulesTask::class.java + ) { + it.nodeModulesDir = nodeModulesDir + } + + val testJs: KotlinNodeJsTestTask = + if (isDefaultTarget) project.tasks.create("testJs", KotlinNodeJsTestTask::class.java) + else project.tasks.replace(camelCaseName("test"), KotlinNodeJsTestTask::class.java) + + testJs.also { + it.group = "verification" + it.dependsOn(nodeModulesTask, nodeModulesTestRuntimeTask) + + it.nodeModulesDir = nodeModulesDir + it.nodeModulesToLoad = setOf(compileTestKotlin2Js.outputFile.name) + } + + project.afterEvaluate { + project.tasks.findByName(JavaBasePlugin.CHECK_TASK_NAME)?.dependsOn(testJs) + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt index 4975f2561e7..aa870e6feb0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt @@ -10,6 +10,8 @@ import org.gradle.api.Project import org.jetbrains.kotlin.gradle.plugin.Kotlin2JsSourceSetProcessor import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor +import org.jetbrains.kotlin.gradle.plugin.KotlinTargetConfigurator +import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTargetConfigurator import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider open class KotlinJsTargetPreset( @@ -19,6 +21,8 @@ open class KotlinJsTargetPreset( project, kotlinPluginVersion ) { + override fun createKotlinTargetConfigurator() = KotlinJsTargetConfigurator(kotlinPluginVersion) + override fun getName(): String = PRESET_NAME override fun createCompilationFactory(forTarget: KotlinOnlyTarget) = @@ -27,11 +31,6 @@ open class KotlinJsTargetPreset( override val platformType: KotlinPlatformType get() = KotlinPlatformType.js - override fun buildCompilationProcessor(compilation: KotlinJsCompilation): KotlinSourceSetProcessor<*> { - val tasksProvider = KotlinTasksProvider(compilation.target.targetName) - return Kotlin2JsSourceSetProcessor(project, tasksProvider, compilation, kotlinPluginVersion) - } - companion object { const val PRESET_NAME = "js" } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetConfigurator.kt new file mode 100644 index 00000000000..8bbc1823144 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetConfigurator.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. 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.gradle.targets.jvm + +import org.jetbrains.kotlin.gradle.plugin.Kotlin2JsSourceSetProcessor +import org.jetbrains.kotlin.gradle.plugin.Kotlin2JvmSourceSetProcessor +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor +import org.jetbrains.kotlin.gradle.plugin.KotlinTargetConfigurator +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation +import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider + +class KotlinJvmTargetConfigurator(kotlinPluginVersion: String) : + KotlinTargetConfigurator(true, true, kotlinPluginVersion) { + + override fun buildCompilationProcessor(compilation: KotlinJvmCompilation): KotlinSourceSetProcessor<*> { + val tasksProvider = KotlinTasksProvider(compilation.target.targetName) + return Kotlin2JvmSourceSetProcessor(compilation.target.project, tasksProvider, compilation, kotlinPluginVersion) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt index c683ed89771..418cabf47f6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt @@ -10,6 +10,8 @@ import org.gradle.api.Project import org.jetbrains.kotlin.gradle.plugin.Kotlin2JvmSourceSetProcessor import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor +import org.jetbrains.kotlin.gradle.plugin.KotlinTargetConfigurator +import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTargetConfigurator import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider class KotlinJvmTargetPreset( @@ -24,14 +26,11 @@ class KotlinJvmTargetPreset( override fun createCompilationFactory(forTarget: KotlinOnlyTarget): KotlinCompilationFactory = KotlinJvmCompilationFactory(forTarget) + override fun createKotlinTargetConfigurator() = KotlinJvmTargetConfigurator(kotlinPluginVersion) + override val platformType: KotlinPlatformType get() = KotlinPlatformType.jvm - override fun buildCompilationProcessor(compilation: KotlinJvmCompilation): KotlinSourceSetProcessor<*> { - val tasksProvider = KotlinTasksProvider(compilation.target.targetName) - return Kotlin2JvmSourceSetProcessor(project, tasksProvider, compilation, kotlinPluginVersion) - } - companion object { const val PRESET_NAME = "jvm" } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt new file mode 100644 index 00000000000..4357a1c06d4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. 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.gradle.targets.metadata + +import org.jetbrains.kotlin.gradle.plugin.KotlinCommonSourceSetProcessor +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor +import org.jetbrains.kotlin.gradle.plugin.KotlinTargetConfigurator +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCommonCompilation +import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider + +class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) : + KotlinTargetConfigurator( + createDefaultSourceSets = false, + createTestCompilation = false, + kotlinPluginVersion = kotlinPluginVersion + ) { + + override fun buildCompilationProcessor(compilation: KotlinCommonCompilation): KotlinSourceSetProcessor<*> { + val tasksProvider = KotlinTasksProvider(compilation.target.targetName) + return KotlinCommonSourceSetProcessor(compilation.target.project, compilation, tasksProvider, kotlinPluginVersion) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt index 7cdb751ed0f..7fd5615da0c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinCompile import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinTask +import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider class KotlinMetadataTargetPreset( @@ -30,17 +31,12 @@ class KotlinMetadataTargetPreset( override val platformType: KotlinPlatformType get() = KotlinPlatformType.common - override fun buildCompilationProcessor(compilation: KotlinCommonCompilation): KotlinSourceSetProcessor<*> { - val tasksProvider = KotlinTasksProvider(compilation.target.targetName) - return KotlinCommonSourceSetProcessor(project, compilation, tasksProvider, kotlinPluginVersion) - } - companion object { const val PRESET_NAME = "metadata" } override fun createKotlinTargetConfigurator(): KotlinTargetConfigurator = - KotlinTargetConfigurator(createDefaultSourceSets = false, createTestCompilation = false) + KotlinMetadataTargetConfigurator(kotlinPluginVersion) override fun createTarget(name: String): KotlinOnlyTarget = super.createTarget(name).apply {