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:
+15
-3
@@ -6,6 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.npm.resolver
|
package org.jetbrains.kotlin.gradle.targets.js.npm.resolver
|
||||||
|
|
||||||
import org.gradle.api.Project
|
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.KotlinMultiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtensionOrNull
|
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.RequiredKotlinJsDependency
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
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.npm.resolved.KotlinProjectNpmResolution
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See [KotlinNpmResolutionManager] for details about resolution process.
|
* See [KotlinNpmResolutionManager] for details about resolution process.
|
||||||
@@ -112,9 +115,9 @@ internal class KotlinProjectNpmResolver(
|
|||||||
private set
|
private set
|
||||||
|
|
||||||
init {
|
init {
|
||||||
projectNpmResolver.project.tasks.forEach { task ->
|
projectNpmResolver.project.tasks.implementing(RequiresNpmDependencies::class).forEach { task ->
|
||||||
if (task.enabled && task is RequiresNpmDependencies) {
|
if (task.enabled) {
|
||||||
addTaskRequirements(task)
|
addTaskRequirements(task as RequiresNpmDependencies)
|
||||||
task.dependsOn(projectNpmResolver[task.compilation].packageJsonTaskHolder)
|
task.dependsOn(projectNpmResolver[task.compilation].packageJsonTaskHolder)
|
||||||
task.dependsOn(projectNpmResolver.resolver.nodeJs.npmInstallTask)
|
task.dependsOn(projectNpmResolver.resolver.nodeJs.npmInstallTask)
|
||||||
}
|
}
|
||||||
@@ -136,3 +139,12 @@ internal class KotlinProjectNpmResolver(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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