diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt index 5b857825933..1fc7edba40a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt @@ -219,3 +219,19 @@ internal fun KotlinTargetsContainerWithPresets.configureOrCre } } } + +internal fun KotlinTargetsContainerWithPresets.configureOrCreateAndroidTargetAndReportDeprecation( + targetName: String, + configure: KotlinAndroidTarget.() -> Unit +): KotlinAndroidTarget { + val targetPreset = presets.getByName("android") as KotlinAndroidTargetPreset + val result = configureOrCreate(targetName, targetPreset, configure) + + result.project.logger.warn( + """ + w: Please use `androidTarget` function instead of `android` to configure android target inside `kotlin { }` block. + See the details here: https://kotl.in/android-target-dsl + """.trimIndent() + ) + return result +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithAndroidPresetFunctions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithAndroidPresetFunctions.kt index 2a0763cc3c8..07c4f761c4e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithAndroidPresetFunctions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithAndroidPresetFunctions.kt @@ -10,9 +10,11 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTargetsContainerWithPresets import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTargetPreset +private const val ANDROID_TARGET_MIGRATION_MESSAGE = "Please use androidTarget() instead. Learn more here: https://kotl.in/android-target-dsl" + interface KotlinTargetContainerWithAndroidPresetFunctions : KotlinTargetsContainerWithPresets { - fun android( + fun androidTarget( name: String = "android", configure: KotlinAndroidTarget.() -> Unit = { } ): KotlinAndroidTarget = @@ -22,9 +24,32 @@ interface KotlinTargetContainerWithAndroidPresetFunctions : KotlinTargetsContain configure ) + fun androidTarget() = androidTarget("android") { } + fun androidTarget(name: String) = androidTarget(name) { } + fun androidTarget(name: String, configure: Action) = androidTarget(name) { configure.execute(this) } + fun androidTarget(configure: Action) = androidTarget { configure.execute(this) } + + @Deprecated(ANDROID_TARGET_MIGRATION_MESSAGE) + fun android( + name: String = "android", + configure: KotlinAndroidTarget.() -> Unit = { } + ): KotlinAndroidTarget = + configureOrCreateAndroidTargetAndReportDeprecation(name, configure) + + @Suppress("DEPRECATION") + @Deprecated(ANDROID_TARGET_MIGRATION_MESSAGE, replaceWith = ReplaceWith("androidTarget()")) fun android() = android("android") { } + + @Suppress("DEPRECATION") + @Deprecated(ANDROID_TARGET_MIGRATION_MESSAGE, replaceWith = ReplaceWith("androidTarget(name)")) fun android(name: String) = android(name) { } + + @Suppress("DEPRECATION") + @Deprecated(ANDROID_TARGET_MIGRATION_MESSAGE) fun android(name: String, configure: Action) = android(name) { configure.execute(this) } + + @Suppress("DEPRECATION") + @Deprecated(ANDROID_TARGET_MIGRATION_MESSAGE) fun android(configure: Action) = android { configure.execute(this) } } \ No newline at end of file