From e85501337e32d430912ffd5405ce695c5d59c9eb Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 30 Mar 2020 12:53:34 +0300 Subject: [PATCH] [Gradle, JS] Imported dependencies as file dependencies, not workspaces #KT-32466 fixed #KT-36784 fixed #KT-36864 fixed --- .../resolver/KotlinCompilationNpmResolver.kt | 7 ++--- .../YarnImportedPackagesVersionResolver.kt | 27 +++++++++++++------ 2 files changed, 21 insertions(+), 13 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 ac7de89383b..a22fdf7741e 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 @@ -19,12 +19,9 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName import org.jetbrains.kotlin.gradle.plugin.usesPlatformOf -import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency +import org.jetbrains.kotlin.gradle.targets.js.npm.* import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency.Scope.* import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject.Companion.PACKAGE_JSON -import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson -import org.jetbrains.kotlin.gradle.targets.js.npm.fixSemver -import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.npm.plugins.CompilationResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinPackageJsonTask @@ -317,7 +314,7 @@ internal class KotlinCompilationNpmResolver( } importedExternalGradleDependencies.forEach { - packageJson.dependencies[it.name] = it.version + packageJson.dependencies[it.name] = fileVersion(it.path) } val dependencies = mutableMapOf() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt index 94e7ebe3d83..bb6ad332edb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt @@ -21,17 +21,26 @@ class YarnImportedPackagesVersionResolver( private val resolvedVersion = mutableMapOf() private val importedProjectWorkspaces = mutableListOf() private val externalModules = npmProjects.flatMapTo(mutableSetOf()) { - it.externalGradleDependencies + it.internalCompositeDependencies + it.externalGradleDependencies + } + + private val internalCompositeModules = npmProjects.flatMapTo(mutableSetOf()) { + it.internalCompositeDependencies } fun resolveAndUpdatePackages(): MutableList { - resolve() - updatePackages() + resolveAndUpdate(externalModules, false) + resolveAndUpdate(internalCompositeModules, true) return importedProjectWorkspaces } - private fun resolve() { - externalModules.groupBy { it.name }.forEach { (name, versions) -> + private fun resolveAndUpdate(modules: MutableSet, isWorkspace: Boolean) { + resolve(modules, isWorkspace) + updatePackages(modules) + } + + private fun resolve(modules: MutableSet, isWorkspace: Boolean) { + modules.groupBy { it.name }.forEach { (name, versions) -> val selected: GradleNodeModule = if (versions.size > 1) { val sorted = versions.sortedBy { it.semver } rootProject.logger.warn( @@ -43,18 +52,20 @@ class YarnImportedPackagesVersionResolver( selected } else versions.single() - importedProjectWorkspaces.add(selected.path.relativeTo(nodeJsWorldDir).path) + if (isWorkspace) { + importedProjectWorkspaces.add(selected.path.relativeTo(nodeJsWorldDir).path) + } } } - private fun updatePackages() { + private fun updatePackages(modules: MutableSet) { if (resolvedVersion.isEmpty()) return npmProjects.forEach { updatePackageJson(it.packageJson, it.npmProject.packageJsonFile) } - externalModules.forEach { + modules.forEach { val packageJsonFile = it.path.resolve(NpmProject.PACKAGE_JSON) val packageJson = packageJsonFile.reader().use { Gson().fromJson(it, PackageJson::class.java)