Gradle: move buildCompilationProcessor from target preset to target configurator

This commit is contained in:
Sergey Rostov
2019-03-01 16:42:34 +03:00
parent 46c32f2aa6
commit b6e675f934
8 changed files with 161 additions and 29 deletions
@@ -52,7 +52,7 @@ abstract class AbstractKotlinTargetConfigurator<KotlinTargetType : KotlinTarget>
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<KotlinCompilationType : KotlinCompilation<*>>(
abstract class KotlinTargetConfigurator<KotlinCompilationType : KotlinCompilation<*>>(
createDefaultSourceSets: Boolean,
createTestCompilation: Boolean
createTestCompilation: Boolean,
val kotlinPluginVersion: String
) : AbstractKotlinTargetConfigurator<KotlinOnlyTarget<KotlinCompilationType>>(
createDefaultSourceSets,
createTestCompilation
) {
internal abstract fun buildCompilationProcessor(compilation: KotlinCompilationType): KotlinSourceSetProcessor<*>
override fun configureCompilations(platformTarget: KotlinOnlyTarget<KotlinCompilationType>) {
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<KotlinCompilationType>) {
val project = target.project
@@ -13,8 +13,7 @@ abstract class KotlinOnlyTargetPreset<T : KotlinCompilation<*>>(
protected val kotlinPluginVersion: String
) : KotlinTargetPreset<KotlinOnlyTarget<T>> {
protected open fun createKotlinTargetConfigurator(): KotlinTargetConfigurator<T> =
KotlinTargetConfigurator(createDefaultSourceSets = true, createTestCompilation = true)
protected abstract fun createKotlinTargetConfigurator(): KotlinTargetConfigurator<T>
protected open fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget<T>): String? =
target.targetName
@@ -31,17 +30,9 @@ abstract class KotlinOnlyTargetPreset<T : KotlinCompilation<*>>(
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<T>): KotlinCompilationFactory<T>
protected abstract val platformType: KotlinPlatformType
internal abstract fun buildCompilationProcessor(compilation: T): KotlinSourceSetProcessor<*>
}
@@ -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<KotlinJsCompilation>(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<KotlinJsCompilation>) {
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)
}
}
}
@@ -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<KotlinJsCompilation>) =
@@ -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"
}
@@ -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<KotlinJvmCompilation>(true, true, kotlinPluginVersion) {
override fun buildCompilationProcessor(compilation: KotlinJvmCompilation): KotlinSourceSetProcessor<*> {
val tasksProvider = KotlinTasksProvider(compilation.target.targetName)
return Kotlin2JvmSourceSetProcessor(compilation.target.project, tasksProvider, compilation, kotlinPluginVersion)
}
}
@@ -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<KotlinJvmCompilation>): KotlinCompilationFactory<KotlinJvmCompilation> =
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"
}
@@ -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<KotlinCommonCompilation>(
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)
}
}
@@ -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<KotlinCommonCompilation> =
KotlinTargetConfigurator(createDefaultSourceSets = false, createTestCompilation = false)
KotlinMetadataTargetConfigurator(kotlinPluginVersion)
override fun createTarget(name: String): KotlinOnlyTarget<KotlinCommonCompilation> =
super.createTarget(name).apply {