diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt index 561d583c65b..14d3852c199 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt @@ -80,11 +80,11 @@ class KotlinNpmResolutionManager(private val nodeJsSettings: NodeJsRootExtension private val forceFullResolve: Boolean get() = isInIdeaSync + internal val resolver = KotlinRootNpmResolver(nodeJsSettings, forceFullResolve) + @Volatile private var state: ResolutionState = - ResolutionState.Configuring( - KotlinRootNpmResolver(nodeJsSettings, forceFullResolve) - ) + ResolutionState.Configuring(resolver) internal sealed class ResolutionState { abstract val npmProjects: List @@ -121,6 +121,9 @@ class KotlinNpmResolutionManager(private val nodeJsSettings: NodeJsRootExtension internal fun requireConfiguringState(): KotlinRootNpmResolver = (this.state as? ResolutionState.Configuring ?: error("NPM Dependencies already resolved and installed")).resolver + internal fun isConfiguringState(): Boolean = + this.state is ResolutionState.Configuring + internal fun prepare() = prepareIfNeeded(requireNotPrepared = true) internal fun installIfNeeded( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt index d0fdc08fdc7..4a029745fc5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt @@ -21,13 +21,20 @@ import org.jetbrains.kotlin.gradle.tasks.registerTask import java.io.File open class KotlinPackageJsonTask : DefaultTask() { + + init { + onlyIf { + nodeJs.npmResolutionManager.isConfiguringState() + } + } + private lateinit var nodeJs: NodeJsRootExtension @Transient private lateinit var compilation: KotlinJsCompilation private val compilationResolver - get() = nodeJs.npmResolutionManager.requireConfiguringState()[project][compilation] + get() = nodeJs.npmResolutionManager.resolver[project][compilation] private val producer: KotlinCompilationNpmResolver.PackageJsonProducer get() = compilationResolver.packageJsonProducer diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/RootPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/RootPackageJsonTask.kt index d1a15e4f2ca..4752a92f68c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/RootPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/RootPackageJsonTask.kt @@ -20,6 +20,10 @@ open class RootPackageJsonTask : DefaultTask() { outputs.upToDateWhen { false } + + onlyIf { + resolutionManager.isConfiguringState() + } } private val nodeJs = NodeJsRootPlugin.apply(project.rootProject)