[Gradle, JS] Fix NPM resolution synchronization issues
#KT-49201 Fixed
This commit is contained in:
committed by
Space
parent
f4067f05a2
commit
754595e496
+6
-5
@@ -185,10 +185,11 @@ internal class KotlinRootNpmResolver internal constructor(
|
|||||||
|
|
||||||
fun alreadyResolvedMessage(action: String) = "Cannot $action. NodeJS projects already resolved."
|
fun alreadyResolvedMessage(action: String) = "Cannot $action. NodeJS projects already resolved."
|
||||||
|
|
||||||
@Synchronized
|
|
||||||
fun addProject(target: Project) {
|
fun addProject(target: Project) {
|
||||||
check(state == State.CONFIGURING) { alreadyResolvedMessage("add new project: $target") }
|
synchronized(projectResolvers) {
|
||||||
projectResolvers[target.path] = KotlinProjectNpmResolver(target, this)
|
check(state == State.CONFIGURING) { alreadyResolvedMessage("add new project: $target") }
|
||||||
|
projectResolvers[target.path] = KotlinProjectNpmResolver(target, this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun get(projectPath: String) = projectResolvers[projectPath] ?: error("$projectPath is not configured for JS usage")
|
operator fun get(projectPath: String) = projectResolvers[projectPath] ?: error("$projectPath is not configured for JS usage")
|
||||||
@@ -228,7 +229,7 @@ internal class KotlinRootNpmResolver internal constructor(
|
|||||||
* Don't use directly, use [KotlinNpmResolutionManager.installIfNeeded] instead.
|
* Don't use directly, use [KotlinNpmResolutionManager.installIfNeeded] instead.
|
||||||
*/
|
*/
|
||||||
internal fun prepareInstallation(logger: Logger): Installation {
|
internal fun prepareInstallation(logger: Logger): Installation {
|
||||||
synchronized(this@KotlinRootNpmResolver) {
|
synchronized(projectResolvers) {
|
||||||
check(state == State.CONFIGURING) {
|
check(state == State.CONFIGURING) {
|
||||||
"Projects must be configuring"
|
"Projects must be configuring"
|
||||||
}
|
}
|
||||||
@@ -270,7 +271,7 @@ internal class KotlinRootNpmResolver internal constructor(
|
|||||||
services: ServiceRegistry,
|
services: ServiceRegistry,
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): KotlinRootNpmResolution {
|
): KotlinRootNpmResolution {
|
||||||
synchronized(this@KotlinRootNpmResolver) {
|
synchronized(projectResolvers) {
|
||||||
check(state == State.PROJECTS_CLOSED) {
|
check(state == State.PROJECTS_CLOSED) {
|
||||||
"Projects must be closed"
|
"Projects must be closed"
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -10,9 +10,10 @@ import org.gradle.api.provider.Provider
|
|||||||
import org.gradle.api.services.BuildService
|
import org.gradle.api.services.BuildService
|
||||||
import org.gradle.api.services.BuildServiceParameters
|
import org.gradle.api.services.BuildServiceParameters
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinPackageJsonTask
|
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinPackageJsonTask
|
||||||
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
internal abstract class MayBeUpToDatePackageJsonTasksRegistry : BuildService<BuildServiceParameters.None> {
|
internal abstract class MayBeUpToDatePackageJsonTasksRegistry : BuildService<BuildServiceParameters.None> {
|
||||||
private val mayBeUpToDateTasks = mutableSetOf<String>()
|
private val mayBeUpToDateTasks = ConcurrentHashMap.newKeySet<String>()
|
||||||
|
|
||||||
fun markForNpmDependenciesResolve(task: KotlinPackageJsonTask) {
|
fun markForNpmDependenciesResolve(task: KotlinPackageJsonTask) {
|
||||||
mayBeUpToDateTasks.add(task.path)
|
mayBeUpToDateTasks.add(task.path)
|
||||||
|
|||||||
Reference in New Issue
Block a user