diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt index c7411b88ba2..84b45275f6b 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt @@ -56,6 +56,12 @@ interface KotlinDependencyHandler { fun project(notation: Map): ProjectDependency + fun enforcedPlatform(notation: Any): Dependency = + project.dependencies.enforcedPlatform(notation) + + fun enforcedPlatform(notation: Any, configureAction: Action): Dependency = + project.dependencies.enforcedPlatform(notation, configureAction) + @Deprecated("Declaring NPM dependency without version is forbidden") fun npm(name: String): Dependency diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/EnforcedPlatformTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/EnforcedPlatformTest.kt new file mode 100644 index 00000000000..c0c3e35a04d --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/EnforcedPlatformTest.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle + +import org.jetbrains.kotlin.gradle.mpp.buildProjectWithMPP +import org.jetbrains.kotlin.gradle.mpp.kotlin +import kotlin.test.Test +import kotlin.test.assertTrue + +class EnforcedPlatformTest : MultiplatformExtensionTest() { + @Test + fun `using enforcedPlatform adds BOM dependency correctly`() { + val project = buildProjectWithMPP { + kotlin { + js("browser") { + browser { + binaries.executable() + } + } + sourceSets.getByName("browserMain").apply { + dependencies { + implementation(enforcedPlatform("test:enforced-platform-dependency")) + } + } + } + } + + with(project.evaluate()) { + val hasEnforcedPlatformDependency = configurations.getByName("browserMainImplementation").allDependencies.any { + it.group == "test" && it.name == "enforced-platform-dependency" && it.version == null + } + assertTrue(hasEnforcedPlatformDependency, "Could not find enforced platform dependency") + } + } +} \ No newline at end of file