From d0c0ddd7e59d5b4fc3cdf0ec33b146d29849a7e0 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 9 Jun 2020 16:24:17 +0300 Subject: [PATCH] [Gradle, JS] Move initialization of RequiresNpmDepends in project resolver --- .../resolver/KotlinCompilationNpmResolver.kt | 31 +---------------- .../npm/resolver/KotlinProjectNpmResolver.kt | 33 ++++++++++++++++++- 2 files changed, 33 insertions(+), 31 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 2c854ffc037..acbe6f7fc57 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 @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.gradle.targets.js.npm.resolver -import org.gradle.api.Task import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ResolvedArtifact import org.gradle.api.artifacts.ResolvedDependency @@ -15,7 +14,6 @@ import org.gradle.api.initialization.IncludedBuild import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.TaskCollection import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.bundling.Zip import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation @@ -32,14 +30,12 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject.Companion.PACKAGE_J 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 -import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.utils.CompositeProjectComponentArtifactMetadata import org.jetbrains.kotlin.gradle.utils.`is` import org.jetbrains.kotlin.gradle.utils.topRealPath import java.io.File import java.io.Serializable -import kotlin.reflect.KClass /** * See [KotlinNpmResolutionManager] for details about resolution process. @@ -74,22 +70,6 @@ internal class KotlinCompilationNpmResolver( } } - init { - project.tasks.implementing(RequiresNpmDependencies::class) - .configureEach { task -> - if (task.enabled) { - task as RequiresNpmDependencies - // KotlinJsTest delegates npm dependencies to testFramework, - // which can be defined after this configure action - if (task !is KotlinJsTest) { - nodeJs.taskRequirements.addTaskRequirements(task) - } - task.dependsOn(packageJsonTaskHolder) - task.dependsOn(nodeJs.npmInstallTask) - } - } - } - val plugins: List = projectResolver.resolver.plugins .flatMap { if (compilation.isMain()) { @@ -384,13 +364,4 @@ internal class KotlinCompilationNpmResolver( ?: emptyList() } } -} - -/** - * Filters a [TaskCollection] by type that is not a subtype of [Task] (for use with interfaces) - * - * TODO properly express within the type system? The result should be a TaskCollection - */ -private fun TaskCollection.implementing(kclass: KClass): TaskCollection = - @Suppress("UNCHECKED_CAST") - withType(kclass.java as Class) \ No newline at end of file +} \ 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/KotlinProjectNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt index fa80db8ac70..8deac7cb171 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.gradle.targets.js.npm.resolver import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.tasks.TaskCollection import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtensionOrNull @@ -13,7 +15,10 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget +import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinProjectNpmResolution +import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest +import kotlin.reflect.KClass /** * See [KotlinNpmResolutionManager] for details about resolution process. @@ -38,6 +43,22 @@ internal class KotlinProjectNpmResolver( init { addContainerListeners() + + val nodeJs = resolver.nodeJs + project.tasks.implementing(RequiresNpmDependencies::class) + .configureEach { task -> + if (task.enabled) { + task as RequiresNpmDependencies + // KotlinJsTest delegates npm dependencies to testFramework, + // which can be defined after this configure action + val packageJsonTaskHolder = get(task.compilation).packageJsonTaskHolder + if (task !is KotlinJsTest) { + nodeJs.taskRequirements.addTaskRequirements(task) + } + task.dependsOn(packageJsonTaskHolder) + task.dependsOn(nodeJs.npmInstallTask) + } + } } private fun addContainerListeners() { @@ -92,4 +113,14 @@ internal class KotlinProjectNpmResolver( resolver.nodeJs.taskRequirements.byTask ) } -} \ No newline at end of file +} + + +/** + * Filters a [TaskCollection] by type that is not a subtype of [Task] (for use with interfaces) + * + * TODO properly express within the type system? The result should be a TaskCollection + */ +private fun TaskCollection.implementing(kclass: KClass): TaskCollection = + @Suppress("UNCHECKED_CAST") + withType(kclass.java as Class) \ No newline at end of file