From 8b0dffe182667634c4857387f36ef8d756defea6 Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Sun, 7 Jul 2019 16:33:17 +0300 Subject: [PATCH] Gradle, JS, compilation resolver: close dependent compilation resolver when it's packageJson task is up-to-date --- .../resolver/KotlinCompilationNpmResolver.kt | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index 6a84669a033..25e5b29741f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -55,17 +55,21 @@ internal class KotlinCompilationNpmResolver( private var resolution: KotlinCompilationNpmResolution? = null @Synchronized - fun resolve() { + fun resolve(skipWriting: Boolean = false): KotlinCompilationNpmResolution { check(!closed) { "$this already closed" } check(resolution == null) { "$this already resolved" } - resolution = packageJsonProducer.createPackageJson() + return packageJsonProducer.createPackageJson(skipWriting).also { + resolution = it + } } @Synchronized fun getResolutionOrResolveIfForced(): KotlinCompilationNpmResolution? { - if (resolver.forceFullResolve && resolution == null) resolve() - return resolution + if (resolution != null) return resolution + if (packageJsonTaskHolder.doGetTask().state.upToDate) return resolve(skipWriting = true) + if (resolver.forceFullResolve && resolution == null) return resolve() + return null } @Synchronized @@ -203,7 +207,7 @@ internal class KotlinCompilationNpmResolver( externalNpmDependencies.map { "${it.key}:${it.version}" } ) - fun createPackageJson(): KotlinCompilationNpmResolution { + fun createPackageJson(skipWriting: Boolean): KotlinCompilationNpmResolution { val resolvedInternalDependencies = internalDependencies.map { it.getResolutionOrResolveIfForced() ?: error("Unresolved dependent npm package: ${this@KotlinCompilationNpmResolver} -> $it") @@ -235,7 +239,9 @@ internal class KotlinCompilationNpmResolver( it(packageJson) } - packageJson.saveTo(npmProject.packageJsonFile) + if (!skipWriting) { + packageJson.saveTo(npmProject.packageJsonFile) + } return KotlinCompilationNpmResolution( project,