From d14a55d7752497bae37e664dc85b1fc04f0a9695 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 23 Mar 2023 10:13:00 +0000 Subject: [PATCH] [Gradle, JS] Remove redundant composites in K/JS Gradle Plugin KT-47351 --- .../targets/js/nodejs/NodeJsRootPlugin.kt | 17 ---- .../js/npm/CompositeNodeModuleBuilder.kt | 45 ----------- .../js/npm/CompositeNodeModulesCache.kt | 77 ------------------- .../js/npm/KotlinNpmResolutionManager.kt | 1 - .../npm/resolved/KotlinRootNpmResolution.kt | 1 - .../PreparedKotlinCompilationNpmResolution.kt | 1 - .../KotlinCompilationNpmResolution.kt | 18 ----- .../resolver/KotlinCompilationNpmResolver.kt | 2 - .../npm/resolver/PackageJsonProducerInputs.kt | 6 -- .../js/npm/tasks/KotlinNpmCachesSetup.kt | 9 +-- .../js/npm/tasks/KotlinPackageJsonTask.kt | 11 +-- .../YarnImportedPackagesVersionResolver.kt | 59 +------------- 12 files changed, 5 insertions(+), 242 deletions(-) delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModuleBuilder.kt delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModulesCache.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt index a204752f773..7fab70a7660 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt @@ -11,7 +11,6 @@ import org.gradle.api.Task import org.gradle.api.plugins.BasePlugin import org.gradle.api.provider.Provider import org.jetbrains.kotlin.gradle.targets.js.MultiplePluginDeclarationDetector -import org.jetbrains.kotlin.gradle.targets.js.npm.CompositeNodeModulesCache import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModulesCache import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager import org.jetbrains.kotlin.gradle.targets.js.npm.UsesKotlinNpmResolutionManager @@ -62,17 +61,10 @@ open class NodeJsRootPlugin : Plugin { nodeJs.nodeModulesGradleCacheDir ) - val compositeNodeModulesProvider: Provider = CompositeNodeModulesCache.registerIfAbsent( - project, - project.projectDir, - nodeJs.nodeModulesGradleCacheDir - ) - val setupFileHasherTask = project.registerTask(KotlinNpmCachesSetup.NAME) { it.description = "Setup file hasher for caches" it.gradleNodeModules.set(gradleNodeModulesProvider) - it.compositeNodeModules.set(compositeNodeModulesProvider) } val npmInstall = project.registerTask(KotlinNpmInstallTask.NAME) { @@ -122,7 +114,6 @@ open class NodeJsRootPlugin : Plugin { } ) it.parameters.gradleNodeModulesProvider.set(gradleNodeModulesProvider) - it.parameters.compositeNodeModulesProvider.set(compositeNodeModulesProvider) } YarnPlugin.apply(project) @@ -157,13 +148,6 @@ open class NodeJsRootPlugin : Plugin { null ) - private val Project.compositeNodeModules - get() = CompositeNodeModulesCache.registerIfAbsent( - this, - null, - null - ) - val Project.kotlinNpmResolutionManager: Provider get() { val npmResolutionManager = project.gradle.sharedServices.registerIfAbsent( @@ -177,7 +161,6 @@ open class NodeJsRootPlugin : Plugin { project.tasks.withType().configureEach { task -> task.usesService(npmResolutionManager) task.usesService(gradleNodeModules) - task.usesService(compositeNodeModules) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModuleBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModuleBuilder.kt deleted file mode 100644 index 5ddecea9b26..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModuleBuilder.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.targets.js.npm - -import java.io.File - -/** - * Creates fake NodeJS module directory from given composite [dependency]. - */ -internal class CompositeNodeModuleBuilder( - val srcDir: File, - val cacheDir: File -) { - var srcPackageJsonFile: File = srcDir - - fun rebuild(): File? { - check(srcPackageJsonFile.isFile) { - "Unable to read package.json of composite build" - } - - val packageJson = fromSrcPackageJson(srcPackageJsonFile)!! - - // yarn requires semver - packageJson.version = fixSemver(packageJson.version) - - val importedPackageDir = importedPackageDir(cacheDir, packageJson.name, packageJson.version) - - packageJson.main = srcDir.parentFile.resolve(packageJson.main!!) - .relativeToOrNull(importedPackageDir) - ?.path - ?: throw IllegalStateException("Unable to link composite builds for Kotlin/JS which have different roots") - - return makeNodeModule(cacheDir, packageJson) - } -} - -private fun makeNodeModule( - container: File, - packageJson: PackageJson -): File { - return makeNodeModule(container, packageJson) {} -} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModulesCache.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModulesCache.kt deleted file mode 100644 index 44e94752bef..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModulesCache.kt +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.targets.js.npm - -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.Internal -import org.jetbrains.kotlin.gradle.tasks.withType -import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject -import java.io.File - -internal interface UsesCompositeNodeModulesCache : Task { - @get:Internal - val compositeNodeModules: Property -} - -/** - * Cache for storing already created [GradleNodeModule]s - */ -abstract class CompositeNodeModulesCache : AbstractNodeModulesCache() { - override val type: String - get() = "composite" - - override fun buildImportedPackage( - name: String, - version: String, - file: File - ): File? { - val module = CompositeNodeModuleBuilder(file, parameters.cacheDir.get().asFile) - return module.rebuild() - } - - companion object { - private val serviceClass = CompositeNodeModulesCache::class.java - private val serviceName = serviceClass.name - - private fun registerIfAbsentImpl( - project: Project, - rootProjectDir: File?, - cacheDir: File? - ): Provider { - project.gradle.sharedServices.registrations.findByName(serviceName)?.let { - @Suppress("UNCHECKED_CAST") - return it.service as Provider - } - - val message = { - "Build service Composite Node Modules should be already registered" - } - - requireNotNull(rootProjectDir, message) - requireNotNull(cacheDir, message) - - return project.gradle.sharedServices.registerIfAbsent(serviceName, serviceClass) { - it.parameters.rootProjectDir.set(rootProjectDir) - it.parameters.cacheDir.set(cacheDir) - } - } - - fun registerIfAbsent( - project: Project, - rootProjectDir: File?, - cacheDir: File? - ) = registerIfAbsentImpl(project, rootProjectDir, cacheDir).also { serviceProvider -> - SingleActionPerProject.run(project, UsesCompositeNodeModulesCache::class.java.name) { - project.tasks.withType().configureEach { task -> - task.usesService(serviceProvider) - } - } - } - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt index a7f58e367e0..f5316b6d6f5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt @@ -51,7 +51,6 @@ abstract class KotlinNpmResolutionManager : BuildService Unit>> val gradleNodeModulesProvider: Property - val compositeNodeModulesProvider: Property } val resolution diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinRootNpmResolution.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinRootNpmResolution.kt index ce8e51b4403..f11e6bfb5be 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinRootNpmResolution.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinRootNpmResolution.kt @@ -31,7 +31,6 @@ class KotlinRootNpmResolution( ): Installation { synchronized(projects) { npmResolutionManager.parameters.gradleNodeModulesProvider.get().close() - npmResolutionManager.parameters.compositeNodeModulesProvider.get().close() val projectResolutions: List = projects.values.flatMap { it.npmProjects }.map { it.close(npmResolutionManager, logger) } npmEnvironment.packageManager.prepareRootProject( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/PreparedKotlinCompilationNpmResolution.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/PreparedKotlinCompilationNpmResolution.kt index e22548c773c..d7020c56177 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/PreparedKotlinCompilationNpmResolution.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/PreparedKotlinCompilationNpmResolution.kt @@ -14,7 +14,6 @@ import java.io.Serializable */ class PreparedKotlinCompilationNpmResolution( val npmProjectDir: File, - val internalCompositeDependencies: Collection, val externalGradleDependencies: Collection, val externalNpmDependencies: Collection, ) : Serializable \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolution.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolution.kt index 69268965d74..5db0bfa7770 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolution.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolution.kt @@ -15,7 +15,6 @@ import java.io.File class KotlinCompilationNpmResolution( var internalDependencies: Collection, - var internalCompositeDependencies: Collection, var externalGradleDependencies: Collection, var externalNpmDependencies: Collection, var fileCollectionDependencies: Collection, @@ -34,7 +33,6 @@ class KotlinCompilationNpmResolution( val inputs: PackageJsonProducerInputs get() = PackageJsonProducerInputs( internalDependencies.map { it.projectName }, - internalCompositeDependencies.flatMap { it.getPackages() }, externalGradleDependencies.map { it.file }, externalNpmDependencies.map { it.uniqueRepresentation() }, fileCollectionDependencies.flatMap { it.files } @@ -115,17 +113,6 @@ class KotlinCompilationNpmResolution( it.dependencies }.filter { it.scope != NpmDependency.Scope.DEV } - val compositeDependencies = internalCompositeDependencies.flatMap { dependency -> - dependency.getPackages() - .map { file -> - npmResolutionManager.parameters.compositeNodeModulesProvider.get().get( - dependency.dependencyName, - dependency.dependencyVersion, - file - ) - } - }.filterNotNull() - val toolsNpmDependencies = tasksRequirements .getCompilationNpmRequirements(projectPath, compilationDisambiguatedName) @@ -143,10 +130,6 @@ class KotlinCompilationNpmResolution( packageJsonHandlers ) - compositeDependencies.forEach { - packageJson.dependencies[it.name] = it.version - } - packageJsonHandlers.forEach { it(packageJson) } @@ -157,7 +140,6 @@ class KotlinCompilationNpmResolution( return PreparedKotlinCompilationNpmResolution( npmProjectDir, - compositeDependencies, importedExternalGradleDependencies, allNpmDependencies, ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index 51382fff41a..d06d43a9b89 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -144,7 +144,6 @@ class KotlinCompilationNpmResolver( inner class ConfigurationVisitor { private val internalDependencies = mutableSetOf() - private val internalCompositeDependencies = mutableSetOf() private val externalGradleDependencies = mutableSetOf() private val externalNpmDependencies = mutableSetOf() private val fileCollectionDependencies = mutableSetOf() @@ -244,7 +243,6 @@ class KotlinCompilationNpmResolver( fun toPackageJsonProducer() = KotlinCompilationNpmResolution( internalDependencies, - internalCompositeDependencies, externalGradleDependencies.map { FileExternalGradleDependency( it.dependency.moduleName, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/PackageJsonProducerInputs.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/PackageJsonProducerInputs.kt index 64b18c5207d..b9a4b2ba80b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/PackageJsonProducerInputs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/PackageJsonProducerInputs.kt @@ -13,12 +13,6 @@ class PackageJsonProducerInputs( @get:Input val internalDependencies: Collection, - @get:PathSensitive(PathSensitivity.ABSOLUTE) - @get:IgnoreEmptyDirectories - @get:NormalizeLineEndings - @get:InputFiles - val internalCompositeDependencies: Collection, - @get:PathSensitive(PathSensitivity.ABSOLUTE) @get:IgnoreEmptyDirectories @get:NormalizeLineEndings diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmCachesSetup.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmCachesSetup.kt index bc67a277b0f..0d3e1c99423 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmCachesSetup.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmCachesSetup.kt @@ -6,20 +6,14 @@ package org.jetbrains.kotlin.gradle.targets.js.npm.tasks import org.gradle.api.DefaultTask -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Internal import org.gradle.api.tasks.TaskAction import org.gradle.internal.hash.FileHasher -import org.jetbrains.kotlin.gradle.targets.js.npm.CompositeNodeModulesCache -import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModulesCache -import org.jetbrains.kotlin.gradle.targets.js.npm.UsesCompositeNodeModulesCache import org.jetbrains.kotlin.gradle.targets.js.npm.UsesGradleNodeModulesCache import javax.inject.Inject abstract class KotlinNpmCachesSetup : DefaultTask(), - UsesGradleNodeModulesCache, - UsesCompositeNodeModulesCache { + UsesGradleNodeModulesCache { @get:Inject open val fileHasher: FileHasher get() = throw UnsupportedOperationException() @@ -27,7 +21,6 @@ abstract class KotlinNpmCachesSetup : @TaskAction fun setup() { gradleNodeModules.get().fileHasher = fileHasher - compositeNodeModules.get().fileHasher = fileHasher } companion object { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt index 851624b0c45..c6d0c1fe587 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion. import org.jetbrains.kotlin.gradle.targets.js.npm.* import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmResolver import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinRootNpmResolver -import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PACKAGE_JSON_UMBRELLA_TASK_NAME import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PackageJsonProducerInputs import org.jetbrains.kotlin.gradle.tasks.registerTask import java.io.File @@ -26,8 +25,7 @@ import java.io.File abstract class KotlinPackageJsonTask : DefaultTask(), UsesKotlinNpmResolutionManager, - UsesGradleNodeModulesCache, - UsesCompositeNodeModulesCache { + UsesGradleNodeModulesCache { // Only in configuration phase // Not part of configuration caching @@ -43,9 +41,6 @@ abstract class KotlinPackageJsonTask : private fun findDependentTasks(): Collection = compilationResolver.compilationNpmResolution.internalDependencies.map { dependency -> nodeJs.resolver[dependency.projectPath][dependency.compilationName].npmProject.packageJsonTaskPath - } + compilationResolver.compilationNpmResolution.internalCompositeDependencies.map { dependency -> - dependency.includedBuild?.task(":$PACKAGE_JSON_UMBRELLA_TASK_NAME") ?: error("includedBuild instance is not available") - dependency.includedBuild.task(":${RootPackageJsonTask.NAME}") } // ----- @@ -115,7 +110,6 @@ abstract class KotlinPackageJsonTask : val packageJsonUmbrella = nodeJsTaskProviders.packageJsonUmbrellaTaskProvider val npmResolutionManager = project.kotlinNpmResolutionManager val gradleNodeModules = GradleNodeModulesCache.registerIfAbsent(project, null, null) - val compositeNodeModules = CompositeNodeModulesCache.registerIfAbsent(project, null, null) val packageJsonTask = project.registerTask(packageJsonTaskName) { task -> task.compilationDisambiguatedName.set(compilation.disambiguatedName) task.description = "Create package.json file for $compilation" @@ -127,9 +121,6 @@ abstract class KotlinPackageJsonTask : task.gradleNodeModules.value(gradleNodeModules) .disallowChanges() - task.compositeNodeModules.value(compositeNodeModules) - .disallowChanges() - task.packageJson.set(compilation.npmProject.packageJsonFile) task.onlyIf { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt index edbec75f928..56000e13891 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt @@ -5,12 +5,8 @@ package org.jetbrains.kotlin.gradle.targets.js.yarn -import com.google.gson.Gson import org.gradle.api.logging.Logger import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModule -import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject -import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson -import org.jetbrains.kotlin.gradle.targets.js.npm.fileVersion import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.PreparedKotlinCompilationNpmResolution import java.io.File @@ -25,22 +21,13 @@ class YarnImportedPackagesVersionResolver( it.externalGradleDependencies } - private val internalCompositeModules = npmProjects.flatMapTo(mutableSetOf()) { - it.internalCompositeDependencies - } - fun resolveAndUpdatePackages(): MutableList { - resolve(externalModules, true) - resolve(internalCompositeModules, true) - - if (resolvedVersion.isNotEmpty()) { - updatePackages(internalCompositeModules) - } + resolve(externalModules) return importedProjectWorkspaces } - private fun resolve(modules: MutableSet, isWorkspace: Boolean) { + private fun resolve(modules: MutableSet) { modules.groupBy { it.name }.forEach { (name, versions) -> val selected: GradleNodeModule = if (versions.size > 1) { val sorted = versions.sortedBy { it.semver } @@ -56,49 +43,9 @@ class YarnImportedPackagesVersionResolver( selected } else versions.single() - if (isWorkspace) { - importedProjectWorkspaces.add(selected.path.relativeTo(nodeJsWorldDir).path) - } + importedProjectWorkspaces.add(selected.path.relativeTo(nodeJsWorldDir).path) } } - - private fun updatePackages(modules: MutableSet) { - modules.forEach { - val packageJsonFile = it.path.resolve(NpmProject.PACKAGE_JSON) - val packageJson = packageJsonFile.reader().use { - Gson().fromJson(it, PackageJson::class.java) - } - - writePackageJson( - packageJson = packageJson, - path = packageJsonFile, - forceWrite = false - ) - } - } - - private fun writePackageJson( - packageJson: PackageJson, - path: File, - forceWrite: Boolean - ) { - val updates = listOf(packageJson.dependencies, packageJson.devDependencies).map { updateVersionsMap(it) } - if (forceWrite || updates.any { it }) { - packageJson.saveTo(path) - } - } - - private fun updateVersionsMap(map: MutableMap): Boolean { - var doneSomething = false - map.iterator().forEachRemaining { - val resolved = resolvedVersion[it.key] - if (resolved != null && it.value != resolved.version) { - it.setValue(fileVersion(resolved.file)) - doneSomething = true - } - } - return doneSomething - } } private data class ResolvedNpmDependency(