diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt index 3f08ce9d061..92d4eaf6eea 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt @@ -193,12 +193,21 @@ abstract class KotlinJsProjectExtension(project: Project) : lateinit var legacyPreset: KotlinJsSingleTargetPreset + private val targetSetObservers = mutableListOf<(KotlinJsTargetDsl?) -> Unit>() + // target is public property // Users can write kotlin.target and it should work // So call of target should init default configuration @Deprecated("Use `target` instead", ReplaceWith("target")) var _target: KotlinJsTargetDsl? = null - private set + private set(value) { + field = value + targetSetObservers.forEach { it(value) } + } + + internal fun registerTargetObserver(observer: (KotlinJsTargetDsl?) -> Unit) { + targetSetObservers.add(observer) + } companion object { internal fun reportJsCompilerMode(compilerType: KotlinJsCompilerType) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinDependenciesManagement.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinDependenciesManagement.kt index db0a95052d0..d9a62ea708e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinDependenciesManagement.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinDependenciesManagement.kt @@ -130,6 +130,9 @@ private fun Project.configureStdlibDefaultDependency( when { project.hasKpmModel -> addStdlibToKpmProject(project, coreLibrariesVersion) + topLevelExtension is KotlinJsProjectExtension -> topLevelExtension.registerTargetObserver { target -> + target?.addStdlibDependency(configurations, dependencies, coreLibrariesVersion) + } topLevelExtension is KotlinSingleTargetExtension<*> -> topLevelExtension .target .addStdlibDependency(configurations, dependencies, coreLibrariesVersion) @@ -297,6 +300,16 @@ private fun Project.configureKotlinTestDependency( coreLibrariesVersion: Provider, ) { when (topLevelExtension) { + is KotlinJsProjectExtension -> topLevelExtension.registerTargetObserver { target -> + target?.configureKotlinTestDependency( + configurations, + coreLibrariesVersion, + objects, + dependencies, + tasks + ) + } + is KotlinSingleTargetExtension<*> -> topLevelExtension.target.configureKotlinTestDependency( configurations, coreLibrariesVersion,