[Gradle, MPP] Implement kotlin.mpp.absentAndroidTarget.nowarn flag

^KT-41641 Verification Pending
This commit is contained in:
sebastian.sellmair
2021-11-15 13:47:26 +01:00
committed by Space
parent c56c503426
commit 7d56ef1925
3 changed files with 41 additions and 0 deletions
@@ -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")
}
}
}
@@ -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
@@ -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)