From 40820e42a60d58f782a3c50c06c13a57f8a280d7 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Wed, 25 Oct 2023 15:51:00 +0200 Subject: [PATCH] [Gradle] Implement ConfigureBuildSideEffect (replacing 'configureBuild') KT-61634 --- .../gradle/plugin/KotlinTargetConfigurator.kt | 29 -------------- .../plugin/registerKotlinPluginExtensions.kt | 3 ++ .../targets/ConfigureBuildSideEffect.kt | 38 +++++++++++++++++++ 3 files changed, 41 insertions(+), 29 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/ConfigureBuildSideEffect.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index 1a3d8b45165..6686ab4ed51 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -36,11 +36,9 @@ interface KotlinTargetConfigurator { ) { target.runKotlinCompilationSideEffects() target.runKotlinTargetSideEffects() - configureBuild(target) configurePlatformSpecificModel(target) } - fun configureBuild(target: KotlinTargetType) fun configurePlatformSpecificModel(target: KotlinTargetType) = Unit } @@ -50,33 +48,6 @@ abstract class AbstractKotlinTargetConfigurator protected open val runtimeIncludesCompilationOutputs = true - override fun configureBuild(target: KotlinTargetType) { - val project = target.project - - val buildNeeded = project.tasks.named(JavaBasePlugin.BUILD_NEEDED_TASK_NAME) - val buildDependent = project.tasks.named(JavaBasePlugin.BUILD_DEPENDENTS_TASK_NAME) - - if (createTestCompilation) { - val testCompilation = target.compilations.getByName(KotlinCompilation.TEST_COMPILATION_NAME) - if (testCompilation is KotlinCompilationToRunnableFiles) { - addDependsOnTaskInOtherProjects(project, buildNeeded, true, testCompilation.runtimeDependencyConfigurationName) - addDependsOnTaskInOtherProjects(project, buildDependent, false, testCompilation.runtimeDependencyConfigurationName) - } - } - } - - private fun addDependsOnTaskInOtherProjects( - project: Project, - taskProvider: TaskProvider<*>, - useDependedOn: Boolean, - configurationName: String, - ) { - val configuration = project.configurations.getByName(configurationName) - taskProvider.configure { task -> - task.dependsOn(configuration.getTaskDependencyFromProjectDependency(useDependedOn, taskProvider.name)) - } - } - companion object { const val testTaskNameSuffix = "test" const val runTaskNameSuffix = "run" diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt index 10006135f02..2fb175afc9c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt @@ -56,6 +56,8 @@ import org.jetbrains.kotlin.gradle.plugin.sources.KotlinMultiplatformSourceSetSe import org.jetbrains.kotlin.gradle.plugin.sources.LanguageSettingsSetupAction import org.jetbrains.kotlin.gradle.plugin.statistics.MultiplatformBuildStatsReportSetupAction import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubpluginSetupAction +import org.jetbrains.kotlin.gradle.targets.* +import org.jetbrains.kotlin.gradle.targets.ConfigureBuildSideEffect import org.jetbrains.kotlin.gradle.targets.CreateArtifactsSideEffect import org.jetbrains.kotlin.gradle.targets.CreateDefaultCompilationsSideEffect import org.jetbrains.kotlin.gradle.targets.CreateTargetConfigurationsSideEffect @@ -109,6 +111,7 @@ internal fun Project.registerKotlinPluginExtensions() { register(project, CreateTargetConfigurationsSideEffect) register(project, NativeForwardImplementationToApiElementsSideEffect) register(project, CreateArtifactsSideEffect) + register(project, ConfigureBuildSideEffect) } KotlinCompilationSideEffect.extensionPoint.apply { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/ConfigureBuildSideEffect.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/ConfigureBuildSideEffect.kt new file mode 100644 index 00000000000..f0e1072485c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/ConfigureBuildSideEffect.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2023 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.targets + +import org.gradle.api.Project +import org.gradle.api.plugins.JavaBasePlugin +import org.gradle.api.tasks.TaskProvider +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationToRunnableFiles + +internal val ConfigureBuildSideEffect = KotlinTargetSideEffect { target -> + val project = target.project + + val buildNeeded = project.tasks.named(JavaBasePlugin.BUILD_NEEDED_TASK_NAME) + val buildDependent = project.tasks.named(JavaBasePlugin.BUILD_DEPENDENTS_TASK_NAME) + + val testCompilation = target.compilations.findByName(KotlinCompilation.TEST_COMPILATION_NAME) + @Suppress("DEPRECATION") + if (testCompilation is KotlinCompilationToRunnableFiles) { + addDependsOnTaskInOtherProjects(project, buildNeeded, true, testCompilation.runtimeDependencyConfigurationName) + addDependsOnTaskInOtherProjects(project, buildDependent, false, testCompilation.runtimeDependencyConfigurationName) + } +} + +private fun addDependsOnTaskInOtherProjects( + project: Project, + taskProvider: TaskProvider<*>, + useDependedOn: Boolean, + configurationName: String, +) { + val configuration = project.configurations.getByName(configurationName) + taskProvider.configure { task -> + task.dependsOn(configuration.getTaskDependencyFromProjectDependency(useDependedOn, taskProvider.name)) + } +}