From 00e5e462ea24cc6655eab7bbf78a1ae693677b7e Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Mon, 22 Mar 2021 20:33:16 +0300 Subject: [PATCH] Further refactor compile task configuration: extract the configurator --- .../pm20/KotlinCompilationTaskConfigurator.kt | 59 +++++++++++++++++++ .../mpp/pm20/KotlinJvmVariantFactory.kt | 11 +--- .../mpp/pm20/KotlinNativeVariantFactory.kt | 14 +---- .../native/KotlinNativeTargetConfigurator.kt | 4 ++ 4 files changed, 65 insertions(+), 23 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinCompilationTaskConfigurator.kt 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 new file mode 100644 index 00000000000..b7ad86bf1e5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinCompilationTaskConfigurator.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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.plugin.mpp.pm20 + +import org.gradle.api.Project +import org.gradle.api.tasks.TaskProvider +import org.jetbrains.kotlin.gradle.plugin.Kotlin2JvmSourceSetProcessor +import org.jetbrains.kotlin.gradle.plugin.KotlinNativeTargetConfigurator +import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion +import org.jetbrains.kotlin.gradle.plugin.mpp.addCommonSourcesToKotlinCompileTask +import org.jetbrains.kotlin.gradle.plugin.mpp.addSourcesToKotlinCompileTask +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider +import org.jetbrains.kotlin.gradle.tasks.withType + +open class KotlinCompilationTaskConfigurator( + private val project: Project +) { + private val kotlinPluginVersion = + project.getKotlinPluginVersion() ?: error("Kotlin plugin version not found; the Kotlin plugin must be applied to $project") + + open val variantSourcesProvider: VariantSourcesProvider = VariantSourcesProvider() + + fun createKotlinJvmCompilationTask( + variant: KotlinGradleVariant, + compilationData: KotlinCompilationData<*> + ): TaskProvider { + Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilationData, kotlinPluginVersion).run() + val allSources = variantSourcesProvider.getSourcesFromRefinesClosure(variant) + val commonSources = variantSourcesProvider.getCommonSourcesFromRefinesClosure(variant) + + // FIXME support custom source file extensions in the two calls below + addSourcesToKotlinCompileTask(project, compilationData.compileKotlinTaskName, emptyList()) { allSources } + addCommonSourcesToKotlinCompileTask(project, compilationData.compileKotlinTaskName, emptyList()) { commonSources } + + return project.tasks.withType().named(compilationData.compileKotlinTaskName) + } + + fun createKotlinNativeCompilationTask( + variant: KotlinNativeVariant, + compilationData: KotlinNativeCompilationData<*> + ): TaskProvider { + val compileTask = KotlinNativeTargetConfigurator.createKlibCompilationTask(compilationData) + + val allSources = variantSourcesProvider.getSourcesFromRefinesClosure(variant) + val commonSources = variantSourcesProvider.getSourcesFromRefinesClosure(variant) + + compileTask.configure { + it.source(allSources) + it.commonSources.from(commonSources) + } + + return compileTask + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinJvmVariantFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinJvmVariantFactory.kt index 3e94ebe9e5d..8b96bdb7a14 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinJvmVariantFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinJvmVariantFactory.kt @@ -39,16 +39,7 @@ open class KotlinJvmVariantFactory(module: KotlinGradleModule) : override fun configureKotlinCompilation(fragment: KotlinJvmVariant) { val compilationData = fragment.compilationData LifecycleTasksManager(project).registerClassesTask(compilationData) - - Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilationData, project.getKotlinPluginVersion() ?: "unknown"/*TODO*/).run() - - val sources = VariantSourcesProvider() - val allSources = sources.getSourcesFromRefinesClosure(fragment) - val commonSources = sources.getCommonSourcesFromRefinesClosure(fragment) - - // FIXME support custom source file extensions in the two calls below - addSourcesToKotlinCompileTask(project, compilationData.compileKotlinTaskName, emptyList()) { allSources } - addCommonSourcesToKotlinCompileTask(project, compilationData.compileKotlinTaskName, emptyList()) { commonSources } + KotlinCompilationTaskConfigurator(project).createKotlinJvmCompilationTask(fragment, compilationData) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinNativeVariantFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinNativeVariantFactory.kt index 1c2f5dfcfd6..88d89205be9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinNativeVariantFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinNativeVariantFactory.kt @@ -44,17 +44,7 @@ open class KotlinNativeVariantFactory( override fun configureKotlinCompilation(fragment: T) { val compilationData = fragment.compilationData LifecycleTasksManager(project).registerClassesTask(compilationData) - - val compileTask = KotlinNativeTargetConfigurator.createKlibCompilationTask(compilationData) - - val sources = VariantSourcesProvider() - val allSources = sources.getSourcesFromRefinesClosure(fragment) - val commonSources = sources.getSourcesFromRefinesClosure(fragment) - - compileTask.configure { - it.source(allSources) - it.commonSources.from(commonSources) - } + KotlinCompilationTaskConfigurator(project).createKotlinNativeCompilationTask(fragment, compilationData) } private fun configureHostSpecificMetadata(variant: T) { @@ -96,6 +86,4 @@ open class KotlinNativeVariantFactory( configureApiElementsConfiguration(variant, this) // then override the Usage attribute attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA)) } - - open fun platformComponentName(variant: T) = variant.disambiguateName("") } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index 8961e4e7909..8bf89e7678a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -475,8 +475,12 @@ open class KotlinNativeTargetConfigurator( project.project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).apply { dependsOn(compileTaskProvider) } + } + val shouldAddCompileOutputsToElements = compilation.owner is KotlinGradleVariant || compilation.isMainCompilationData() + if (shouldAddCompileOutputsToElements) { createRegularKlibArtifact(compilation, compileTaskProvider) } + if (compilation is AbstractKotlinNativeCompilation) { // FIXME: support compiler plugins for PM20 addCompilerPlugins(compilation)