diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt index 342d91aadb8..1affef8e421 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt @@ -31,11 +31,10 @@ class BuildServiceDeclarationIT : KGPBaseTest() { } } - @Disabled - @DisplayName("Build services are registered for Kotlin/JS nodejs projects") + @DisplayName("Build services are registered for Kotlin/JS browser projects") @GradleTest @JsGradlePluginTests - fun testJsNodeJsProject(gradleVersion: GradleVersion) { + fun testJsBrowserProject(gradleVersion: GradleVersion) { project("kotlin-js-browser-project", gradleVersion) { enableStableConfigurationCachePreview() build("build") { @@ -44,11 +43,10 @@ class BuildServiceDeclarationIT : KGPBaseTest() { } } - @Disabled - @DisplayName("Build services are registered for Kotlin/JS browser projects") + @DisplayName("Build services are registered for Kotlin/JS nodejs projects") @GradleTest @JsGradlePluginTests - fun testJsBrowserProject(gradleVersion: GradleVersion) { + fun testJsNodeJsProject(gradleVersion: GradleVersion) { project("kotlin-js-nodejs-project", gradleVersion) { enableStableConfigurationCachePreview() build("build") { @@ -57,7 +55,6 @@ class BuildServiceDeclarationIT : KGPBaseTest() { } } - @Disabled @DisplayName("Build services are registered for Kotlin/MPP projects") @GradleTest @MppGradlePluginTests 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 28690a836cd..865f3905fb2 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,6 +43,7 @@ open class NodeJsRootPlugin : Plugin { val setupFileHasherTask = registerTask(KotlinNpmCachesSetup.NAME) { it.description = "Setup file hasher for caches" + settings.npmResolutionManager.declareBuildServicesUsage(it) } registerTask(KotlinNpmInstallTask.NAME) { @@ -50,6 +51,7 @@ 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 9dbb551118d..d1bbd8851aa 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 @@ -277,4 +277,9 @@ 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 85ada4b77fc..13005667374 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 @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.gradle.targets.js.npm.resolver 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.internal.service.ServiceRegistry @@ -23,6 +24,8 @@ 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 import org.jetbrains.kotlin.gradle.targets.js.yarn.toVersionString +import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile +import org.jetbrains.kotlin.gradle.tasks.withType import org.jetbrains.kotlin.gradle.utils.ArchiveOperationsCompat import org.jetbrains.kotlin.gradle.utils.FileSystemOperationsCompat import org.jetbrains.kotlin.gradle.utils.unavailableValueError @@ -96,6 +99,12 @@ class KotlinRootNpmResolver internal constructor( 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() @@ -176,6 +185,9 @@ 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) + } } } 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 0701b5ada98..03a88425cf8 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 @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.MayBeUpToDatePackageJ import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmResolver import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PACKAGE_JSON_UMBRELLA_TASK_NAME import org.jetbrains.kotlin.gradle.tasks.registerTask +import org.jetbrains.kotlin.gradle.utils.chainedDisallowChanges import org.jetbrains.kotlin.gradle.utils.getValue import java.io.File @@ -113,13 +114,14 @@ abstract class KotlinPackageJsonTask : DefaultTask() { task.compilation = compilation task.description = "Create package.json file for $compilation" task.group = NodeJsRootPlugin.TASKS_GROUP_NAME - task.mayBeUpToDateTasksRegistry.apply { - set(MayBeUpToDatePackageJsonTasksRegistry.registerIfAbsent(project)) - disallowChanges() + val packageJsonStateService = MayBeUpToDatePackageJsonTasksRegistry.registerIfAbsent(project) + task.mayBeUpToDateTasksRegistry.value(packageJsonStateService).chainedDisallowChanges().also { + task.usesService(packageJsonStateService) } 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 86247ba89a1..b9b161560d9 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,6 +46,7 @@ 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) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt index 6226109f114..0d982b4a509 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.tasks.configuration import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo import org.jetbrains.kotlin.gradle.targets.js.ir.* import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile +import org.jetbrains.kotlin.gradle.utils.chainedDisallowChanges import org.jetbrains.kotlin.gradle.utils.klibModuleName import java.io.File @@ -67,7 +68,9 @@ internal open class BaseKotlin2JsCompileConfig( ) ) - task.libraryCache.set(libraryCacheService).also { task.libraryCache.disallowChanges() } + task.libraryCache.value(libraryCacheService).chainedDisallowChanges().also { + task.usesService(libraryCacheService) + } } }