Use KotlinCompilationTaskConfigurator for metadata compilation tasks

This commit is contained in:
Sergey Igushkin
2021-03-31 14:50:19 +03:00
parent 4cb6303fa8
commit 44fcd7e891
2 changed files with 35 additions and 34 deletions
@@ -18,15 +18,18 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
import org.jetbrains.kotlin.gradle.tasks.withType import org.jetbrains.kotlin.gradle.tasks.withType
open class KotlinCompilationTaskConfigurator( open class KotlinCompilationTaskConfigurator(
private val project: Project protected val project: Project
) { ) {
private val kotlinPluginVersion = open val fragmentSourcesProvider: FragmentSourcesProvider = FragmentSourcesProvider()
project.getKotlinPluginVersion() ?: error("Kotlin plugin version not found; the Kotlin plugin must be applied to $project")
open val variantSourcesProvider: VariantSourcesProvider = VariantSourcesProvider() open fun getSourcesForFragmentCompilation(fragment: KotlinGradleFragment) =
fragmentSourcesProvider.getSourcesFromRefinesClosure(fragment)
open fun getCommonSourcesForFragmentCompilation(fragment: KotlinGradleFragment) =
fragmentSourcesProvider.getCommonSourcesFromRefinesClosure(fragment)
fun createKotlinJvmCompilationTask( fun createKotlinJvmCompilationTask(
variant: KotlinGradleVariant, fragment: KotlinGradleFragment,
compilationData: KotlinCompilationData<*> compilationData: KotlinCompilationData<*>
): TaskProvider<out KotlinCompile> { ): TaskProvider<out KotlinCompile> {
Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilationData, kotlinPluginVersion).run() Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilationData, kotlinPluginVersion).run()
@@ -41,7 +44,7 @@ open class KotlinCompilationTaskConfigurator(
} }
fun createKotlinNativeCompilationTask( fun createKotlinNativeCompilationTask(
variant: KotlinNativeVariant, fragment: KotlinGradleFragment,
compilationData: KotlinNativeCompilationData<*> compilationData: KotlinNativeCompilationData<*>
): TaskProvider<KotlinNativeCompile> { ): TaskProvider<KotlinNativeCompile> {
val compileTask = KotlinNativeTargetConfigurator.createKlibCompilationTask(compilationData) val compileTask = KotlinNativeTargetConfigurator.createKlibCompilationTask(compilationData)
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.tasks.Jar import org.gradle.jvm.tasks.Jar
import org.jetbrains.kotlin.gradle.dsl.pm20Extension import org.jetbrains.kotlin.gradle.dsl.pm20Extension
@@ -163,12 +164,7 @@ private fun createCommonMetadataCompilation(
metadataCompilationRegistry, metadataCompilationRegistry,
lazy { resolvedMetadataProviders(fragment) } lazy { resolvedMetadataProviders(fragment) }
) )
KotlinCommonSourceSetProcessor( MetadataCompilationTasksConfigurator(project).createKotlinCommonCompilationTask(fragment, metadataCompilationData)
metadataCompilationData,
KotlinTasksProvider(),
project.getKotlinPluginVersion() ?: "undefined"
).run()
addSourcesToMetadataCompileTask(metadataCompilationData)
metadataCompilationRegistry.registerCommon(fragment, metadataCompilationData) metadataCompilationRegistry.registerCommon(fragment, metadataCompilationData)
} }
@@ -189,37 +185,39 @@ private fun createNativeMetadataCompilation(
metadataCompilationRegistry, metadataCompilationRegistry,
lazy { resolvedMetadataProviders(fragment) } lazy { resolvedMetadataProviders(fragment) }
) )
NativeSharedCompilationProcessor(metadataCompilationData).run() MetadataCompilationTasksConfigurator(project).createKotlinNativeCompilationTask(fragment, metadataCompilationData)
addSourcesToMetadataCompileTask(metadataCompilationData)
metadataCompilationRegistry.registerNative(fragment, metadataCompilationData) metadataCompilationRegistry.registerNative(fragment, metadataCompilationData)
} }
private fun addSourcesToMetadataCompileTask(compilationData: AbstractKotlinFragmentMetadataCompilationData<*>) { private class MetadataCompilationTasksConfigurator(project: Project) : KotlinCompilationTaskConfigurator(project) {
val sources = { compilationData.fragment.kotlinSourceRoots } fun createKotlinCommonCompilationTask(
when (compilationData) { fragment: KotlinGradleFragment,
// Note: this call is invalid for compilations that use Kotlin/Native compile tasks! compilationData: KotlinCommonFragmentMetadataCompilationData
is KotlinCommonFragmentMetadataCompilationData -> addSourcesToKotlinCompileTask( ) {
compilationData.project, KotlinCommonSourceSetProcessor(
compilationData.compileKotlinTaskName, compilationData,
/*FIXME*/ emptyList(), KotlinTasksProvider()
lazyOf(true), ).run()
sources val allSources = getSourcesForFragmentCompilation(fragment)
) val commonSources = getCommonSourcesForFragmentCompilation(fragment)
is KotlinNativeFragmentMetadataCompilationData -> addSourcesToKotlinNativeCompileTask(
compilationData.project, addSourcesToKotlinCompileTask(project, compilationData.compileKotlinTaskName, emptyList()) { allSources }
compilationData.compileKotlinTaskName, addCommonSourcesToKotlinCompileTask(project, compilationData.compileKotlinTaskName, emptyList()) { commonSources }
sources, }
lazyOf(true)
) override fun getSourcesForFragmentCompilation(fragment: KotlinGradleFragment): FileCollection {
else -> error("unexpected compilation data $compilationData") return fragmentSourcesProvider.getFragmentOwnSources(fragment)
}
override fun getCommonSourcesForFragmentCompilation(fragment: KotlinGradleFragment): FileCollection {
return fragmentSourcesProvider.getFragmentOwnSources(fragment)
} }
} }
private fun resolvedMetadataProviders(fragment: KotlinGradleFragment) = private fun resolvedMetadataProviders(fragment: KotlinGradleFragment) =
fragment.refinesClosure.map { fragment.refinesClosure.map {
FragmentResolvedMetadataProvider( FragmentResolvedMetadataProvider(
fragment.project.tasks.withType<TransformKotlinGranularMetadataForFragment>() fragment.project.tasks.withType<TransformKotlinGranularMetadataForFragment>().named(transformFragmentMetadataTaskName(it))
.named(transformFragmentMetadataTaskName(it))
) )
} }