diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GeneralNativeIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GeneralNativeIT.kt index 88cfee36155..2712378620e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GeneralNativeIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GeneralNativeIT.kt @@ -56,5 +56,25 @@ class GeneralNativeIT : BaseGradleIT() { } } + @Test + fun testIncorrectDependenciesWarning() = with(Project("sample-lib", directoryPrefix = "new-mpp-lib-and-app")) { + setupWorkingDir() + gradleBuildScript().modify { + it.replace( + "api 'org.jetbrains.kotlin:kotlin-stdlib-common'", + "compileOnly 'org.jetbrains.kotlin:kotlin-stdlib-common'" + ) + } + + build { + assertSuccessful() + assertContains("A compileOnly dependency is used in the Kotlin/Native target") + } + build("-Pkotlin.native.ignoreIncorrectDependencies=true") { + assertSuccessful() + assertNotContains("A compileOnly dependency is used in the Kotlin/Native target") + } + } + // TODO: Move native specific tests from NewMultiplatformIT here. } \ No newline at end of file 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 1592943bd24..8c31199eb65 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 @@ -95,6 +95,9 @@ internal class PropertiesProvider private constructor(private val project: Proje val ignoreDisabledNativeTargets: Boolean? get() = booleanProperty(DisabledNativeTargetsReporter.DISABLE_WARNING_PROPERTY_NAME) + val ignoreIncorrectNativeDependencies: Boolean? + get() = booleanProperty(KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES) + /** * Enables parallel tasks execution within a project with Workers API. * Does not enable using actual worker proccesses @@ -227,6 +230,7 @@ internal class PropertiesProvider private constructor(private val project: Proje private const val CACHED_PROVIDER_EXT_NAME = "kotlin.properties.provider" internal const val KOTLIN_NATIVE_DISABLE_COMPILER_DAEMON = "kotlin.native.disableCompilerDaemon" + internal const val KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES = "kotlin.native.ignoreIncorrectDependencies" // TODO: Remove once KT-37550 is fixed internal const val KOTLIN_NATIVE_ENABLE_PARALLEL_EXECUTION_CHECK = "kotlin.native.enableParallelExecutionCheck" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index 227a0a28677..ddf3ed7cb1f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -21,6 +21,7 @@ import org.gradle.api.tasks.TaskProvider import org.gradle.language.base.plugins.LifecycleBasePlugin import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME +import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.targets.native.* import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeHostTest @@ -225,7 +226,10 @@ open class KotlinNativeTargetConfigurator( configureBinaries(target) configureFrameworkExport(target) configureCInterops(target) - warnAboutIncorrectDependencies(target) + + if (PropertiesProvider(target.project).ignoreIncorrectNativeDependencies != true) { + warnAboutIncorrectDependencies(target) + } } override fun configureArchivesAndComponent(target: T): Unit = with(target.project) { @@ -353,10 +357,15 @@ open class KotlinNativeTargetConfigurator( Dependencies: ${it.second.joinToString(separator = "\n") { it.stringCoordinates() }} - """.trimIndent() + """.trimIndent() ) } - warn("Such dependencies are not applicable for Kotlin/Native, consider changing the dependency type to 'implementation' or 'api'.") + warn( + """ + Such dependencies are not applicable for Kotlin/Native, consider changing the dependency type to 'implementation' or 'api'. + To disable this warning, set the $KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES=true project property + """.trimIndent() + ) } } }