From 49f2ac35450578daad49de9341aad4a92fa16c1c Mon Sep 17 00:00:00 2001 From: fjjohnchen Date: Mon, 4 Jan 2021 15:04:28 +0800 Subject: [PATCH] =?UTF-8?q?KT-43818=EF=BC=9ANPM=20Dependencies=20already?= =?UTF-8?q?=20resolved=20and=20installed=20in=20Android=20Studio=20resolve?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gradle/targets/js/npm/KotlinNpmResolutionManager.kt | 9 ++++++--- .../gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt | 9 ++++++++- .../gradle/targets/js/npm/tasks/RootPackageJsonTask.kt | 4 ++++ 3 files changed, 18 insertions(+), 4 deletions(-) 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)