Don't iterate over all tasks in KotlinProjectNpmResolver (KT-36472)
Iterating over all tasks triggered the tasks to configure even if that was not necessary. Filter the task collection by type instead. Issue #KT-36472 Fixed
This commit is contained in:
+16
-4
@@ -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
|
||||
@@ -16,6 +18,7 @@ import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinProjectNpmResolution
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
/**
|
||||
* See [KotlinNpmResolutionManager] for details about resolution process.
|
||||
@@ -112,9 +115,9 @@ internal class KotlinProjectNpmResolver(
|
||||
private set
|
||||
|
||||
init {
|
||||
projectNpmResolver.project.tasks.forEach { task ->
|
||||
if (task.enabled && task is RequiresNpmDependencies) {
|
||||
addTaskRequirements(task)
|
||||
projectNpmResolver.project.tasks.implementing(RequiresNpmDependencies::class).forEach { task ->
|
||||
if (task.enabled) {
|
||||
addTaskRequirements(task as RequiresNpmDependencies)
|
||||
task.dependsOn(projectNpmResolver[task.compilation].packageJsonTaskHolder)
|
||||
task.dependsOn(projectNpmResolver.resolver.nodeJs.npmInstallTask)
|
||||
}
|
||||
@@ -135,4 +138,13 @@ internal class KotlinProjectNpmResolver(
|
||||
.add(task)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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<T & R>
|
||||
*/
|
||||
private fun <T : Task, R : Any> TaskCollection<T>.implementing(kclass: KClass<R>): TaskCollection<T> =
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
withType(kclass.java as Class<T>)
|
||||
Reference in New Issue
Block a user