diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/BrokenLazyConfigurationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/BrokenLazyConfigurationIT.kt index 028be415e47..8493cdd7ec8 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/BrokenLazyConfigurationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/BrokenLazyConfigurationIT.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.gradle.mpp import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.testbase.* -import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.DisplayName @MppGradlePluginTests @@ -52,7 +51,6 @@ class BrokenLazyConfigurationIT : KGPBaseTest() { @GradleTest @DisplayName("works in MPP") // aka KT-56131 - @Disabled fun testBrokenTcaInMpp(gradleVersion: GradleVersion) { project("new-mpp-lib-with-tests", gradleVersion) { buildGradle.modify { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt index 865f3905fb2..28690a836cd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt @@ -43,7 +43,6 @@ open class NodeJsRootPlugin : Plugin { val setupFileHasherTask = registerTask(KotlinNpmCachesSetup.NAME) { it.description = "Setup file hasher for caches" - settings.npmResolutionManager.declareBuildServicesUsage(it) } registerTask(KotlinNpmInstallTask.NAME) { @@ -51,7 +50,6 @@ open class NodeJsRootPlugin : Plugin { it.dependsOn(setupFileHasherTask) it.group = TASKS_GROUP_NAME it.description = "Find, download and link NPM dependencies and projects" - settings.npmResolutionManager.declareBuildServicesUsage(it) } registerTask(PACKAGE_JSON_UMBRELLA_TASK_NAME) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt index d1bbd8851aa..050a70d4a51 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt @@ -97,6 +97,9 @@ class KotlinNpmResolutionManager(@Transient private val nodeJsSettings: NodeJsRo .rootProject.gradle.sharedServices.registerIfAbsent( "npm-resolution-manager-state-holder", KotlinNpmResolutionManagerStateHolder::class.java ) { + }.also { + resolver.declareBuildServiceForRootProjectJsTasks(it) + resolver.declareBuildServiceForAllProjectsJsTasks(it) } private val stateHolder get() = stateHolderProvider.get() @@ -277,9 +280,4 @@ class KotlinNpmResolutionManager(@Transient private val nodeJsSettings: NodeJsRo } } } - - internal fun declareBuildServicesUsage(task: Task) { - task.usesService(stateHolderProvider) - resolver.declareCacheServicesUsage(task) - } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt index 13005667374..a7529e0a93f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt @@ -9,6 +9,7 @@ import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.logging.Logger import org.gradle.api.provider.Provider +import org.gradle.api.services.BuildService import org.gradle.internal.service.ServiceRegistry import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation @@ -20,6 +21,10 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.* import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinProjectNpmResolution import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinRootNpmResolution +import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmCachesSetup +import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask +import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinPackageJsonTask +import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnEnv import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnResolution @@ -81,6 +86,9 @@ class KotlinRootNpmResolver internal constructor( .gradle.sharedServices.registerIfAbsent("gradle-node-modules", GradleNodeModulesCache::class.java) { it.parameters.cacheDir.set(nodeJs_.nodeModulesGradleCacheDir) it.parameters.rootProjectDir.set(rootProject_.projectDir) + }.also { + declareBuildServiceForRootProjectJsTasks(it) + declareBuildServiceForAllProjectsJsTasks(it) } internal val gradleNodeModules: GradleNodeModulesCache @@ -94,17 +102,14 @@ class KotlinRootNpmResolver internal constructor( .gradle.sharedServices.registerIfAbsent("composite-node-modules", CompositeNodeModulesCache::class.java) { it.parameters.cacheDir.set(nodeJs_.nodeModulesGradleCacheDir) it.parameters.rootProjectDir.set(rootProject_.projectDir) + }.also { + declareBuildServiceForRootProjectJsTasks(it) + declareBuildServiceForAllProjectsJsTasks(it) } internal val compositeNodeModules: CompositeNodeModulesCache get() = compositeNodeModulesProvider.get() - internal fun declareCacheServicesUsage(task: Task) { - task.usesService(gradleNodeModulesProvider) - task.usesService(compositeNodeModulesProvider) - task.usesService(resolverStateHolder) - } - @Transient private val projectResolvers_: MutableMap? = mutableMapOf() @@ -140,6 +145,9 @@ class KotlinRootNpmResolver internal constructor( service.parameters.packageJsonHandlers.set(compilations.associate { compilation -> "${compilation.project.path}:${compilation.disambiguatedName}" to compilation.packageJsonHandlers }.filter { it.value.isNotEmpty() }) + }.also { + declareBuildServiceForRootProjectJsTasks(it) + declareBuildServiceForAllProjectsJsTasks(it) } } @@ -185,9 +193,6 @@ class KotlinRootNpmResolver internal constructor( synchronized(projectResolvers) { check(state == RootResolverState.CONFIGURING) { alreadyResolvedMessage("add new project: $target") } projectResolvers[target.path] = KotlinProjectNpmResolver(target, this) - target.tasks.withType().configureEach { task -> - nodeJs_.npmResolutionManager.declareBuildServicesUsage(task) - } } } @@ -315,6 +320,29 @@ class KotlinRootNpmResolver internal constructor( } } } + + internal fun declareBuildServiceForRootProjectJsTasks(serviceProvider: Provider>) { + rootProject_.tasks.withType().configureEach { + it.usesService(serviceProvider) + } + rootProject_.tasks.withType().configureEach { + it.usesService(serviceProvider) + } + rootProject_.tasks.withType().configureEach { + it.usesService(serviceProvider) + } + } + + internal fun declareBuildServiceForAllProjectsJsTasks(serviceProvider: Provider>) { + rootProject_.allprojects { project -> + project.tasks.withType().configureEach { + it.usesService(serviceProvider) + } + project.tasks.withType().configureEach { + it.usesService(serviceProvider) + } + } + } } enum class RootResolverState { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt index 03a88425cf8..8480e0699bb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt @@ -121,7 +121,6 @@ abstract class KotlinPackageJsonTask : DefaultTask() { task.dependsOn(target.project.provider { task.findDependentTasks() }) task.dependsOn(npmCachesSetupTask) - nodeJs.npmResolutionManager.declareBuildServicesUsage(task) } packageJsonUmbrella.configure { task -> task.inputs.file(packageJsonTask.map { it.packageJson }) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt index b9b161560d9..86247ba89a1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt @@ -46,7 +46,6 @@ open class YarnPlugin : Plugin { task.dependsOn(nodeJs.npmCachesSetupTaskProvider) task.group = NodeJsRootPlugin.TASKS_GROUP_NAME task.description = "Create root package.json" - nodeJs.npmResolutionManager.declareBuildServicesUsage(task) } configureRequiresNpmDependencies(project, rootPackageJson)