From 44fcd7e89108d6232e2965cb31949b4dd85f4ffb Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Wed, 31 Mar 2021 14:50:19 +0300 Subject: [PATCH] Use KotlinCompilationTaskConfigurator for metadata compilation tasks --- .../pm20/KotlinCompilationTaskConfigurator.kt | 15 +++--- .../mpp/pm20/fragmentsMetadataCompilation.kt | 54 +++++++++---------- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinCompilationTaskConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinCompilationTaskConfigurator.kt index b7ad86bf1e5..881dbcafacf 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinCompilationTaskConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinCompilationTaskConfigurator.kt @@ -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 { Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilationData, kotlinPluginVersion).run() @@ -41,7 +44,7 @@ open class KotlinCompilationTaskConfigurator( } fun createKotlinNativeCompilationTask( - variant: KotlinNativeVariant, + fragment: KotlinGradleFragment, compilationData: KotlinNativeCompilationData<*> ): TaskProvider { val compileTask = KotlinNativeTargetConfigurator.createKlibCompilationTask(compilationData) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt index c518e23e0b3..55bccbfccaa 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt @@ -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() - .named(transformFragmentMetadataTaskName(it)) + fragment.project.tasks.withType().named(transformFragmentMetadataTaskName(it)) ) }