[Gradle] Inverse K/JS build services declaration
It's done by hardcoding the task classes unlike to approach with other build services (with adding interfaces like Uses<blah-blah-service>), because the J/S services are subject to rework in a short time. This way earlier task initialization shouldn't cause problems. #KT-56131 Fixed
This commit is contained in:
committed by
Space Team
parent
7638b95a31
commit
92d39f0b1d
-2
@@ -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 {
|
||||
|
||||
-2
@@ -43,7 +43,6 @@ open class NodeJsRootPlugin : Plugin<Project> {
|
||||
|
||||
val setupFileHasherTask = registerTask<KotlinNpmCachesSetup>(KotlinNpmCachesSetup.NAME) {
|
||||
it.description = "Setup file hasher for caches"
|
||||
settings.npmResolutionManager.declareBuildServicesUsage(it)
|
||||
}
|
||||
|
||||
registerTask<KotlinNpmInstallTask>(KotlinNpmInstallTask.NAME) {
|
||||
@@ -51,7 +50,6 @@ open class NodeJsRootPlugin : Plugin<Project> {
|
||||
it.dependsOn(setupFileHasherTask)
|
||||
it.group = TASKS_GROUP_NAME
|
||||
it.description = "Find, download and link NPM dependencies and projects"
|
||||
settings.npmResolutionManager.declareBuildServicesUsage(it)
|
||||
}
|
||||
|
||||
registerTask<Task>(PACKAGE_JSON_UMBRELLA_TASK_NAME)
|
||||
|
||||
+3
-5
@@ -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)
|
||||
}
|
||||
}
|
||||
+37
-9
@@ -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<String, KotlinProjectNpmResolver>? = 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<Kotlin2JsCompile>().configureEach { task ->
|
||||
nodeJs_.npmResolutionManager.declareBuildServicesUsage(task)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -315,6 +320,29 @@ class KotlinRootNpmResolver internal constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun declareBuildServiceForRootProjectJsTasks(serviceProvider: Provider<out BuildService<*>>) {
|
||||
rootProject_.tasks.withType<RootPackageJsonTask>().configureEach {
|
||||
it.usesService(serviceProvider)
|
||||
}
|
||||
rootProject_.tasks.withType<KotlinNpmInstallTask>().configureEach {
|
||||
it.usesService(serviceProvider)
|
||||
}
|
||||
rootProject_.tasks.withType<KotlinNpmCachesSetup>().configureEach {
|
||||
it.usesService(serviceProvider)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun declareBuildServiceForAllProjectsJsTasks(serviceProvider: Provider<out BuildService<*>>) {
|
||||
rootProject_.allprojects { project ->
|
||||
project.tasks.withType<Kotlin2JsCompile>().configureEach {
|
||||
it.usesService(serviceProvider)
|
||||
}
|
||||
project.tasks.withType<KotlinPackageJsonTask>().configureEach {
|
||||
it.usesService(serviceProvider)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum class RootResolverState {
|
||||
|
||||
-1
@@ -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 })
|
||||
|
||||
-1
@@ -46,7 +46,6 @@ open class YarnPlugin : Plugin<Project> {
|
||||
task.dependsOn(nodeJs.npmCachesSetupTaskProvider)
|
||||
task.group = NodeJsRootPlugin.TASKS_GROUP_NAME
|
||||
task.description = "Create root package.json"
|
||||
nodeJs.npmResolutionManager.declareBuildServicesUsage(task)
|
||||
}
|
||||
|
||||
configureRequiresNpmDependencies(project, rootPackageJson)
|
||||
|
||||
Reference in New Issue
Block a user