From 578a33767b82d2b86d4da8bc0cd9c71ebf8fb6c5 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 16 Apr 2020 16:44:25 +0300 Subject: [PATCH] [Gradle, JS] Npm resolution plugins work in resolve phase too #KT-34832 fixed --- .../js/dukat/DukatRootResolverPlugin.kt | 6 +++++- .../js/npm/KotlinNpmResolutionManager.kt | 21 ++++++++++++++++++- .../js/npm/plugins/RootResolverPlugin.kt | 3 ++- .../npm/resolved/KotlinRootNpmResolution.kt | 6 ++++-- .../js/npm/resolver/KotlinRootNpmResolver.kt | 6 +++++- .../js/npm/tasks/KotlinNpmInstallTask.kt | 10 +-------- 6 files changed, 37 insertions(+), 15 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRootResolverPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRootResolverPlugin.kt index 4577d9d8717..bc23d209a49 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRootResolverPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRootResolverPlugin.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -20,6 +20,10 @@ internal class DukatRootResolverPlugin(val resolver: KotlinRootNpmResolver) : Ro } override fun close(resolution: KotlinRootNpmResolution) { + // do nothing + } + + override fun resolve(resolution: KotlinRootNpmResolution) { if (resolver.forceFullResolve) { // inside idea import compilations.forEach { 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 e7866189807..d2735e5bca2 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 @@ -100,13 +100,30 @@ class KotlinNpmResolutionManager(private val nodeJsSettings: NodeJsRootExtension } @Incubating - fun requireInstalled() = installIfNeeded(requireUpToDateReason = "") + internal fun requireInstalled() = installIfNeeded(requireUpToDateReason = "") internal fun requireConfiguringState(): KotlinRootNpmResolver = (this.state as? ResolutionState.Configuring ?: error("NPM Dependencies already resolved and installed")).resolver internal fun install() = installIfNeeded(requireNotInstalled = true) + internal fun resolve(args: List = emptyList()) { + val npmResolution = requireInstalled() + val npmResolutions = npmResolution + .projects + .values + + nodeJsSettings.packageManager.resolveRootProject( + nodeJsSettings.rootProject, + npmResolutions.flatMap { it.npmProjects }, + false, + args + ) + + npmResolution.plugins + .forEach { it.resolve(npmResolution) } + } + internal fun requireAlreadyInstalled(project: Project, reason: String = ""): KotlinProjectNpmResolution = installIfNeeded(requireUpToDateReason = reason)[project] @@ -173,6 +190,8 @@ class KotlinNpmResolutionManager(private val nodeJsSettings: NodeJsRootExtension } } + resolve() + return resolvedProject.npmProjectsByNpmDependency[npmDependency] ?: error("NPM project resolved without $this") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/plugins/RootResolverPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/plugins/RootResolverPlugin.kt index 55391fbe0e7..5d2f2a7b914 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/plugins/RootResolverPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/plugins/RootResolverPlugin.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -10,5 +10,6 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmR internal interface RootResolverPlugin { fun createCompilationResolverPlugins(resolver: KotlinCompilationNpmResolver): List + fun resolve(resolution: KotlinRootNpmResolution) fun close(resolution: KotlinRootNpmResolution) } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinRootNpmResolution.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinRootNpmResolution.kt index 2c7b0fc99a9..b0ec1396fc6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinRootNpmResolution.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinRootNpmResolution.kt @@ -6,10 +6,12 @@ package org.jetbrains.kotlin.gradle.targets.js.npm.resolved import org.gradle.api.Project +import org.jetbrains.kotlin.gradle.targets.js.npm.plugins.RootResolverPlugin -class KotlinRootNpmResolution( +internal class KotlinRootNpmResolution( val rootProject: Project, - val projects: Map + val projects: Map, + val plugins: List ) { operator fun get(project: Project) = projects[project] ?: KotlinProjectNpmResolution.empty(project) } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt index 81d0f8db8ed..f7832d22e90 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt @@ -117,7 +117,11 @@ internal class KotlinRootNpmResolver internal constructor( upToDateChecks.forEach { it.commit() } - return KotlinRootNpmResolution(rootProject, projectResolutions) + return KotlinRootNpmResolution( + rootProject, + projectResolutions, + plugins + ) } internal fun closePlugins(resolution: KotlinRootNpmResolution) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt index 8e04179e769..a1b3df274ef 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt @@ -45,15 +45,7 @@ open class KotlinNpmInstallTask : DefaultTask() { @TaskAction fun resolve() { - val npmResolutions = resolutionManager.requireInstalled() - .projects - .values - nodeJs.packageManager.resolveRootProject( - project, - npmResolutions.flatMap { it.npmProjects }, - false, - args - ) + resolutionManager.resolve(args) } companion object {