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
open class KotlinCompilationTaskConfigurator(
private val project: Project
protected val project: Project
) {
private val kotlinPluginVersion =
project.getKotlinPluginVersion() ?: error("Kotlin plugin version not found; the Kotlin plugin must be applied to $project")
open val fragmentSourcesProvider: FragmentSourcesProvider = FragmentSourcesProvider()
open val variantSourcesProvider: VariantSourcesProvider = VariantSourcesProvider()
open fun getSourcesForFragmentCompilation(fragment: KotlinGradleFragment) =
fragmentSourcesProvider.getSourcesFromRefinesClosure(fragment)
open fun getCommonSourcesForFragmentCompilation(fragment: KotlinGradleFragment) =
fragmentSourcesProvider.getCommonSourcesFromRefinesClosure(fragment)
fun createKotlinJvmCompilationTask(
variant: KotlinGradleVariant,
fragment: KotlinGradleFragment,
compilationData: KotlinCompilationData<*>
): TaskProvider<out KotlinCompile> {
Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilationData, kotlinPluginVersion).run()
@@ -41,7 +44,7 @@ open class KotlinCompilationTaskConfigurator(
}
fun createKotlinNativeCompilationTask(
variant: KotlinNativeVariant,
fragment: KotlinGradleFragment,
compilationData: KotlinNativeCompilationData<*>
): TaskProvider<KotlinNativeCompile> {
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.Project
import org.gradle.api.attributes.Usage
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.tasks.Jar
import org.jetbrains.kotlin.gradle.dsl.pm20Extension
@@ -163,12 +164,7 @@ private fun createCommonMetadataCompilation(
metadataCompilationRegistry,
lazy { resolvedMetadataProviders(fragment) }
)
KotlinCommonSourceSetProcessor(
metadataCompilationData,
KotlinTasksProvider(),
project.getKotlinPluginVersion() ?: "undefined"
).run()
addSourcesToMetadataCompileTask(metadataCompilationData)
MetadataCompilationTasksConfigurator(project).createKotlinCommonCompilationTask(fragment, metadataCompilationData)
metadataCompilationRegistry.registerCommon(fragment, metadataCompilationData)
}
@@ -189,37 +185,39 @@ private fun createNativeMetadataCompilation(
metadataCompilationRegistry,
lazy { resolvedMetadataProviders(fragment) }
)
NativeSharedCompilationProcessor(metadataCompilationData).run()
addSourcesToMetadataCompileTask(metadataCompilationData)
MetadataCompilationTasksConfigurator(project).createKotlinNativeCompilationTask(fragment, metadataCompilationData)
metadataCompilationRegistry.registerNative(fragment, metadataCompilationData)
}
private fun addSourcesToMetadataCompileTask(compilationData: AbstractKotlinFragmentMetadataCompilationData<*>) {
val sources = { compilationData.fragment.kotlinSourceRoots }
when (compilationData) {
// Note: this call is invalid for compilations that use Kotlin/Native compile tasks!
is KotlinCommonFragmentMetadataCompilationData -> addSourcesToKotlinCompileTask(
compilationData.project,
compilationData.compileKotlinTaskName,
/*FIXME*/ emptyList(),
lazyOf(true),
sources
)
is KotlinNativeFragmentMetadataCompilationData -> addSourcesToKotlinNativeCompileTask(
compilationData.project,
compilationData.compileKotlinTaskName,
sources,
lazyOf(true)
)
else -> error("unexpected compilation data $compilationData")
private class MetadataCompilationTasksConfigurator(project: Project) : KotlinCompilationTaskConfigurator(project) {
fun createKotlinCommonCompilationTask(
fragment: KotlinGradleFragment,
compilationData: KotlinCommonFragmentMetadataCompilationData
) {
KotlinCommonSourceSetProcessor(
compilationData,
KotlinTasksProvider()
).run()
val allSources = getSourcesForFragmentCompilation(fragment)
val commonSources = getCommonSourcesForFragmentCompilation(fragment)
addSourcesToKotlinCompileTask(project, compilationData.compileKotlinTaskName, emptyList()) { allSources }
addCommonSourcesToKotlinCompileTask(project, compilationData.compileKotlinTaskName, emptyList()) { commonSources }
}
override fun getSourcesForFragmentCompilation(fragment: KotlinGradleFragment): FileCollection {
return fragmentSourcesProvider.getFragmentOwnSources(fragment)
}
override fun getCommonSourcesForFragmentCompilation(fragment: KotlinGradleFragment): FileCollection {
return fragmentSourcesProvider.getFragmentOwnSources(fragment)
}
}
private fun resolvedMetadataProviders(fragment: KotlinGradleFragment) =
fragment.refinesClosure.map {
FragmentResolvedMetadataProvider(
fragment.project.tasks.withType<TransformKotlinGranularMetadataForFragment>()
.named(transformFragmentMetadataTaskName(it))
fragment.project.tasks.withType<TransformKotlinGranularMetadataForFragment>().named(transformFragmentMetadataTaskName(it))
)
}