[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) { if (commonizeCInteropTask != null) {
return locateOrRegisterTask( return locateOrRegisterTask(
"copyCommonizeCInteropForIde", "copyCommonizeCInteropForIde",
args = listOf(commonizeCInteropTask),
invokeWhenRegistered = { invokeWhenRegistered = {
@OptIn(Idea222Api::class) @OptIn(Idea222Api::class)
ideaImportDependsOn(this) ideaImportDependsOn(this)
@@ -9,14 +9,13 @@ import org.gradle.api.provider.Provider
import org.gradle.api.tasks.* import org.gradle.api.tasks.*
import org.gradle.work.DisableCachingByDefault import org.gradle.work.DisableCachingByDefault
import org.gradle.work.NormalizeLineEndings import org.gradle.work.NormalizeLineEndings
import org.jetbrains.kotlin.gradle.utils.future
import java.io.File import java.io.File
import javax.inject.Inject
@DisableCachingByDefault @DisableCachingByDefault
internal open class CopyCommonizeCInteropForIdeTask : AbstractCInteropCommonizerTask() { internal open class CopyCommonizeCInteropForIdeTask @Inject constructor(
private val commonizeCInteropTask: TaskProvider<CInteropCommonizerTask> private val commonizeCInteropTask: TaskProvider<CInteropCommonizerTask>
get() = project.future { project.commonizeCInteropTask() }.getOrThrow() ?: throw IllegalStateException("Missing commonizeCInteropTask") ) : AbstractCInteropCommonizerTask() {
@get:IgnoreEmptyDirectories @get:IgnoreEmptyDirectories
@get:InputFiles @get:InputFiles
@@ -11,6 +11,7 @@ import org.gradle.api.internal.project.ProjectInternal
import org.gradle.testfixtures.ProjectBuilder import org.gradle.testfixtures.ProjectBuilder
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation 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.cInteropCommonizationEnabled
import org.jetbrains.kotlin.gradle.targets.native.internal.copyCommonizeCInteropForIdeTask
import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.gradle.util.*
import kotlin.test.* import kotlin.test.*
@@ -167,4 +168,14 @@ class CommonizerTaskTests {
assertFalse(subproject.cInteropCommonizationEnabled()) 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
}
}
} }