[MPP] Inject CInteropCommonizerTask from outside instead of using a

future

^KT-58712
This commit is contained in:
Timofey Solonin
2023-07-05 12:24:14 +02:00
committed by Space Team
parent 9ef5ce2af4
commit 5026778cd1
3 changed files with 15 additions and 4 deletions
@@ -106,6 +106,7 @@ internal suspend fun Project.copyCommonizeCInteropForIdeTask(): TaskProvider<Cop
if (commonizeCInteropTask != null) {
return locateOrRegisterTask(
"copyCommonizeCInteropForIde",
args = listOf(commonizeCInteropTask),
invokeWhenRegistered = {
@OptIn(Idea222Api::class)
ideaImportDependsOn(this)
@@ -9,14 +9,13 @@ import org.gradle.api.provider.Provider
import org.gradle.api.tasks.*
import org.gradle.work.DisableCachingByDefault
import org.gradle.work.NormalizeLineEndings
import org.jetbrains.kotlin.gradle.utils.future
import java.io.File
import javax.inject.Inject
@DisableCachingByDefault
internal open class CopyCommonizeCInteropForIdeTask : AbstractCInteropCommonizerTask() {
internal open class CopyCommonizeCInteropForIdeTask @Inject constructor(
private val commonizeCInteropTask: TaskProvider<CInteropCommonizerTask>
get() = project.future { project.commonizeCInteropTask() }.getOrThrow() ?: throw IllegalStateException("Missing commonizeCInteropTask")
) : AbstractCInteropCommonizerTask() {
@get:IgnoreEmptyDirectories
@get:InputFiles
@@ -11,6 +11,7 @@ import org.gradle.api.internal.project.ProjectInternal
import org.gradle.testfixtures.ProjectBuilder
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
import org.jetbrains.kotlin.gradle.targets.native.internal.cInteropCommonizationEnabled
import org.jetbrains.kotlin.gradle.targets.native.internal.copyCommonizeCInteropForIdeTask
import org.jetbrains.kotlin.gradle.util.*
import kotlin.test.*
@@ -167,4 +168,14 @@ class CommonizerTaskTests {
assertFalse(subproject.cInteropCommonizationEnabled())
}
}
@Test
fun `test copyCommonizeCInteropForIdeTask creation - doesn't fail`() {
val project = ProjectBuilder.builder().build()
project.applyMultiplatformPlugin()
project.enableCInteropCommonization(true)
project.runLifecycleAwareTest {
project.copyCommonizeCInteropForIdeTask()?.get()?.cInteropCommonizerTaskOutputDirectories
}
}
}