[Gradle] Implement ConfigureBuildSideEffect (replacing 'configureBuild')
KT-61634
This commit is contained in:
committed by
Space Team
parent
5676759287
commit
40820e42a6
-29
@@ -36,11 +36,9 @@ interface KotlinTargetConfigurator<KotlinTargetType : KotlinTarget> {
|
|||||||
) {
|
) {
|
||||||
target.runKotlinCompilationSideEffects()
|
target.runKotlinCompilationSideEffects()
|
||||||
target.runKotlinTargetSideEffects()
|
target.runKotlinTargetSideEffects()
|
||||||
configureBuild(target)
|
|
||||||
configurePlatformSpecificModel(target)
|
configurePlatformSpecificModel(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun configureBuild(target: KotlinTargetType)
|
|
||||||
fun configurePlatformSpecificModel(target: KotlinTargetType) = Unit
|
fun configurePlatformSpecificModel(target: KotlinTargetType) = Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,33 +48,6 @@ abstract class AbstractKotlinTargetConfigurator<KotlinTargetType : KotlinTarget>
|
|||||||
|
|
||||||
protected open val runtimeIncludesCompilationOutputs = true
|
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 {
|
companion object {
|
||||||
const val testTaskNameSuffix = "test"
|
const val testTaskNameSuffix = "test"
|
||||||
const val runTaskNameSuffix = "run"
|
const val runTaskNameSuffix = "run"
|
||||||
|
|||||||
+3
@@ -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.sources.LanguageSettingsSetupAction
|
||||||
import org.jetbrains.kotlin.gradle.plugin.statistics.MultiplatformBuildStatsReportSetupAction
|
import org.jetbrains.kotlin.gradle.plugin.statistics.MultiplatformBuildStatsReportSetupAction
|
||||||
import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubpluginSetupAction
|
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.CreateArtifactsSideEffect
|
||||||
import org.jetbrains.kotlin.gradle.targets.CreateDefaultCompilationsSideEffect
|
import org.jetbrains.kotlin.gradle.targets.CreateDefaultCompilationsSideEffect
|
||||||
import org.jetbrains.kotlin.gradle.targets.CreateTargetConfigurationsSideEffect
|
import org.jetbrains.kotlin.gradle.targets.CreateTargetConfigurationsSideEffect
|
||||||
@@ -109,6 +111,7 @@ internal fun Project.registerKotlinPluginExtensions() {
|
|||||||
register(project, CreateTargetConfigurationsSideEffect)
|
register(project, CreateTargetConfigurationsSideEffect)
|
||||||
register(project, NativeForwardImplementationToApiElementsSideEffect)
|
register(project, NativeForwardImplementationToApiElementsSideEffect)
|
||||||
register(project, CreateArtifactsSideEffect)
|
register(project, CreateArtifactsSideEffect)
|
||||||
|
register(project, ConfigureBuildSideEffect)
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinCompilationSideEffect.extensionPoint.apply {
|
KotlinCompilationSideEffect.extensionPoint.apply {
|
||||||
|
|||||||
+38
@@ -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))
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user