[Gradle, JS] Make packageJsonHandlers compatible with configuration cache

#KT-49061 Fixed
This commit is contained in:
Alexander Likhachev
2021-10-14 19:15:28 +03:00
committed by Space
parent 6a6cc1db77
commit b4cb7f3610
3 changed files with 25 additions and 14 deletions
@@ -70,10 +70,6 @@ internal class KotlinCompilationNpmResolver(
val projectPath = project.path
val packageJsonHandlers by lazy {
compilation.packageJsonHandlers
}
@Transient
val packageJsonTaskHolder: TaskProvider<KotlinPackageJsonTask>? =
KotlinPackageJsonTask.create(compilation)
@@ -478,20 +474,25 @@ internal class KotlinCompilationNpmResolver(
} else emptySet()
val allNpmDependencies = externalNpmDependencies + toolsNpmDependencies + dukatIfNecessary
val packageJsonHandlers = if (compilationResolver.compilation != null) {
compilationResolver.compilation.packageJsonHandlers
} else {
compilationResolver.rootResolver.getPackageJsonHandlers(projectPath, compilationResolver.compilationDisambiguatedName)
}
val packageJson = packageJson(
compilationResolver.npmProject.name,
compilationResolver.npmVersion,
compilationResolver.npmProject.main,
allNpmDependencies,
compilationResolver.packageJsonHandlers
packageJsonHandlers
)
compositeDependencies.forEach {
packageJson.dependencies[it.name] = it.version
}
compilationResolver.packageJsonHandlers.forEach {
packageJsonHandlers.forEach {
it(packageJson)
}
@@ -133,14 +133,17 @@ internal class KotlinRootNpmResolver internal constructor(
rootProject_.gradle.sharedServices.registerIfAbsent(
KotlinRootNpmResolverStateHolder::class.qualifiedName,
KotlinRootNpmResolverStateHolder::class.java
) {
it.parameters.plugins.set(plugins_)
it.parameters.projectResolvers.set(projectResolvers_)
it.parameters.packageManager.set(nodeJs_.packageManager)
it.parameters.yarnEnvironment.set(yarnEnvironment_?.get())
it.parameters.npmEnvironment.set(npmEnvironment_?.get())
it.parameters.yarnResolutions.set(yarnResolutions_?.get())
it.parameters.taskRequirements.set(taskRequirements_)
) { service ->
service.parameters.plugins.set(plugins_)
service.parameters.projectResolvers.set(projectResolvers_)
service.parameters.packageManager.set(nodeJs_.packageManager)
service.parameters.yarnEnvironment.set(yarnEnvironment_?.get())
service.parameters.npmEnvironment.set(npmEnvironment_?.get())
service.parameters.yarnResolutions.set(yarnResolutions_?.get())
service.parameters.taskRequirements.set(taskRequirements_)
service.parameters.packageJsonHandlers.set(compilations.associate { compilation ->
"${compilation.project.path}:${compilation.disambiguatedName}" to compilation.packageJsonHandlers
}.filter { it.value.isNotEmpty() })
}
}
@@ -197,6 +200,9 @@ internal class KotlinRootNpmResolver internal constructor(
val compilations: Collection<KotlinJsCompilation>
get() = projectResolvers.values.flatMap { it.compilationResolvers.map { it.compilation } }
internal fun getPackageJsonHandlers(projectPath: String, compilationDisambiguatedName: String): List<PackageJson.() -> Unit> =
resolverStateHolder.get().parameters.packageJsonHandlers.get()["$projectPath:$compilationDisambiguatedName"] ?: emptyList()
fun findDependentResolver(src: Project, target: Project): List<KotlinCompilationNpmResolver>? {
// todo: proper finding using KotlinTargetComponent.findUsageContext
val targetResolver = this[target.path]
@@ -13,6 +13,7 @@ import org.gradle.api.services.BuildServiceParameters
import org.jetbrains.kotlin.gradle.targets.js.nodejs.TasksRequirements
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmEnvironment
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
import org.jetbrains.kotlin.gradle.targets.js.npm.plugins.RootResolverPlugin
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnEnv
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnResolution
@@ -27,6 +28,9 @@ internal abstract class KotlinRootNpmResolverStateHolder : BuildService<KotlinRo
val npmEnvironment: Property<NpmEnvironment>
val yarnResolutions: ListProperty<YarnResolution>
val taskRequirements: Property<TasksRequirements>
// pulled up from compilation resolver since it was failing with ClassNotFoundException on deserialization, see KT-49061
val packageJsonHandlers: MapProperty<String, List<PackageJson.() -> Unit>>
}
var initialized = false