From 7d56ef19255df61f8c63382521a1a512dfb3956a Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Mon, 15 Nov 2021 13:47:26 +0100 Subject: [PATCH] [Gradle, MPP] Implement kotlin.mpp.absentAndroidTarget.nowarn flag ^KT-41641 Verification Pending --- .../gradle/KT41641AbsentAndroidTarget.kt | 33 +++++++++++++++++++ ...latformProjectConfigurationHealthChecks.kt | 5 +++ .../kotlin/gradle/plugin/KotlinProperties.kt | 3 ++ 3 files changed, 41 insertions(+) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KT41641AbsentAndroidTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KT41641AbsentAndroidTarget.kt index 2ba2d930fca..21415f63c72 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KT41641AbsentAndroidTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KT41641AbsentAndroidTarget.kt @@ -53,4 +53,37 @@ class KT41641AbsentAndroidTarget : MultiplatformExtensionTest() { fail("Expected no warning message to be logged. Received: $it") }) } + + @Test + fun `test kotlin-mpp-absentAndroidTarget-nowarn flag`() { + project.propertiesExtension["kotlin.mpp.absentAndroidTarget.nowarn"] = "true" + project.plugins.apply("kotlin-multiplatform") + project.plugins.apply("android-library") + + /* Arbitrary minimal Android setup */ + val android = project.extensions.getByName("android") as LibraryExtension + android.compileSdkVersion(30) + + kotlin.jvm() + + project.runMissingAndroidTargetProjectConfigurationHealthCheck(warningLogger = { + fail("Expected no warning message to be logged. Received $it") + }) + + // Test when nowarn is set to false + run { + var warningMessage: String? = null + project.propertiesExtension["kotlin.mpp.absentAndroidTarget.nowarn"] = "false" + project.runMissingAndroidTargetProjectConfigurationHealthCheck(warningLogger = { warningMessage = it }) + assertNotNull(warningMessage, "Expected warning message to be logged") + } + + // Test when nowarn is set to null + run { + var warningMessage: String? = null + project.propertiesExtension["kotlin.mpp.absentAndroidTarget.nowarn"] = null + project.runMissingAndroidTargetProjectConfigurationHealthCheck(warningLogger = { warningMessage = it }) + assertNotNull(warningMessage, "Expected warning message to be logged") + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformProjectConfigurationHealthChecks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformProjectConfigurationHealthChecks.kt index 99c5b6f3919..90d6ae62096 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformProjectConfigurationHealthChecks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformProjectConfigurationHealthChecks.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Project import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget import org.jetbrains.kotlin.gradle.targets.android.findAndroidTarget import org.jetbrains.kotlin.gradle.utils.androidPluginIds @@ -33,6 +34,10 @@ internal fun Project.runMissingKotlinTargetsProjectConfigurationHealthCheck() = internal fun Project.runMissingAndroidTargetProjectConfigurationHealthCheck( warningLogger: (warningMessage: String) -> Unit = project.logger::warn ) = project.runProjectConfigurationHealthCheck check@{ + if (project.kotlinPropertiesProvider.ignoreAbsentAndroidMultiplatformTarget) { + return@check + } + val androidPluginId = androidPluginIds .firstOrNull { androidPluginId -> plugins.findPlugin(androidPluginId) != null } ?: return@check diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index 4fc427910ec..54d0b252730 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -167,6 +167,9 @@ internal class PropertiesProvider private constructor(private val project: Proje val ignoreDisabledNativeTargets: Boolean? get() = booleanProperty(DisabledNativeTargetsReporter.DISABLE_WARNING_PROPERTY_NAME) + val ignoreAbsentAndroidMultiplatformTarget: Boolean + get() = booleanProperty("kotlin.mpp.absentAndroidTarget.nowarn") ?: false + val ignoreIncorrectNativeDependencies: Boolean? get() = booleanProperty(KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES)