From a54e758189c2048c5d5550936fad3d8afa5c1703 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Tue, 29 Jun 2021 13:40:14 +0300 Subject: [PATCH] For XCFramework with default name register 'nameless' task 'assembleXCFramework` #KT-42667 --- .../kotlin/gradle/native/XCFrameworkIT.kt | 29 +++++++++++++++---- .../plugin/mpp/apple/XCFrameworkTask.kt | 9 ++++-- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/XCFrameworkIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/XCFrameworkIT.kt index a354be3422f..2f53d6c0751 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/XCFrameworkIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/XCFrameworkIT.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.native import org.jetbrains.kotlin.gradle.BaseGradleIT import org.jetbrains.kotlin.gradle.GradleVersionRequired +import org.jetbrains.kotlin.gradle.transformProjectWithPluginsDsl import org.jetbrains.kotlin.gradle.util.AGPVersion import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.test.util.KtTestUtil @@ -62,15 +63,15 @@ class XCFrameworkIT : BaseGradleIT() { @Test fun `assemble other XCFramework for ios targets`() { with(Project("appleXCFramework")) { - build("assembleSharedXCFramework") { + build("assembleXCFramework") { assertSuccessful() assertTasksExecuted(":shared:linkReleaseFrameworkIosArm64") assertTasksExecuted(":shared:linkReleaseFrameworkIosX64") - assertTasksExecuted(":shared:assembleSharedReleaseXCFramework") + assertTasksExecuted(":shared:assembleReleaseXCFramework") assertFileExists("/shared/build/XCFrameworks/release/shared.xcframework") assertTasksExecuted(":shared:linkDebugFrameworkIosArm64") assertTasksExecuted(":shared:linkDebugFrameworkIosX64") - assertTasksExecuted(":shared:assembleSharedDebugXCFramework") + assertTasksExecuted(":shared:assembleDebugXCFramework") assertFileExists("/shared/build/XCFrameworks/debug/shared.xcframework") } } @@ -82,11 +83,27 @@ class XCFrameworkIT : BaseGradleIT() { build("tasks") { assertSuccessful() assertTasksNotRegistered( - ":shared:assembleSharedDebugXCFramework", - ":shared:assembleSharedReleaseXCFramework", - ":shared:assembleSharedXCFramework" + ":shared:assembleDebugXCFramework", + ":shared:assembleReleaseXCFramework", + ":shared:assembleXCFramework" ) } } } + + @Test + fun `check configuration error if two XCFrameworks were registered with same name`() { + with(transformProjectWithPluginsDsl("appleXCFramework")) { + with(gradleBuildScript("shared")) { + var text = readText() + text = text.replace("XCFramework(\"sdk\")", "XCFramework()") + writeText(text) + } + + build("tasks") { + assertFailed() + assertContains("Cannot add task 'assembleReleaseXCFramework' as a task with that name already exists.") + } + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/XCFrameworkTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/XCFrameworkTask.kt index 4e43c63244d..649d89b91e0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/XCFrameworkTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/XCFrameworkTask.kt @@ -41,6 +41,7 @@ internal class XCFrameworkTaskHolder( ) { companion object { fun create(project: Project, xcFrameworkName: String, buildType: NativeBuildType): XCFrameworkTaskHolder { + require(xcFrameworkName.isNotBlank()) val parentTask = project.parentAssembleXCFrameworkTask(xcFrameworkName) val task = project.registerAssembleXCFrameworkTask(xcFrameworkName, buildType) @@ -89,8 +90,11 @@ class XCFrameworkConfig { fun Project.XCFramework(xcFrameworkName: String = name) = XCFrameworkConfig(this, xcFrameworkName) +private fun Project.eraseIfDefault(xcFrameworkName: String) = + if (name == xcFrameworkName) "" else xcFrameworkName + private fun Project.parentAssembleXCFrameworkTask(xcFrameworkName: String): TaskProvider = - locateOrRegisterTask(lowerCamelCaseName("assemble", xcFrameworkName, "XCFramework")) { + locateOrRegisterTask(lowerCamelCaseName("assemble", eraseIfDefault(xcFrameworkName), "XCFramework")) { it.group = "build" it.description = "Assemble all types of registered '$xcFrameworkName' XCFramework" } @@ -99,10 +103,9 @@ private fun Project.registerAssembleXCFrameworkTask( xcFrameworkName: String, buildType: NativeBuildType ): TaskProvider { - require(xcFrameworkName.isNotBlank()) val taskName = lowerCamelCaseName( "assemble", - xcFrameworkName, + eraseIfDefault(xcFrameworkName), buildType.getName(), "XCFramework" )