Fixes for task configuration avoidance in Gradle Kotlin/JS support
This commit is contained in:
+1
-1
@@ -93,7 +93,7 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) :
|
||||
super.configureCompilations(target)
|
||||
|
||||
target.compilations.all {
|
||||
it.compileKotlinTask.kotlinOptions {
|
||||
it.kotlinOptions {
|
||||
moduleKind = "umd"
|
||||
sourceMap = true
|
||||
sourceMapEmbedSources = null
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ internal class DukatCompilationResolverPlugin(
|
||||
) {
|
||||
it.group = DUKAT_TASK_GROUP
|
||||
it.description = "Generate Kotlin/JS external declarations for .d.ts files of all NPM dependencies in ${compilation}"
|
||||
it.dependsOn(nodeJs.npmInstallTask, npmProject.packageJsonTask)
|
||||
it.dependsOn(nodeJs.npmInstallTaskProvider, npmProject.packageJsonTask)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -178,7 +178,7 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
||||
val type = binary.mode
|
||||
|
||||
dependsOn(
|
||||
nodeJs.npmInstallTask,
|
||||
nodeJs.npmInstallTaskProvider,
|
||||
target.project.tasks.named(compilation.processResourcesTaskName)
|
||||
)
|
||||
|
||||
|
||||
+1
-1
@@ -113,7 +113,7 @@ abstract class KotlinJsIrSubTarget(
|
||||
testExecutableTask.flatMap { it.outputFileProperty }
|
||||
)
|
||||
|
||||
testJs.dependsOn(nodeJs.npmInstallTask, nodeJs.nodeJsSetupTask)
|
||||
testJs.dependsOn(nodeJs.npmInstallTaskProvider, nodeJs.nodeJsSetupTaskProvider)
|
||||
|
||||
testJs.onlyIf { task ->
|
||||
(task as KotlinJsTest).inputFileProperty
|
||||
|
||||
+2
-3
@@ -86,10 +86,9 @@ constructor(
|
||||
) {
|
||||
it.nodeJs = nodeJs
|
||||
it.executable = nodeJs.requireConfigured().nodeExecutable
|
||||
it.dependsOn(nodeJs.npmInstallTask)
|
||||
it.dependsOn(nodeJs.npmInstallTaskProvider)
|
||||
|
||||
val compileKotlinTask = compilation.compileKotlinTask
|
||||
it.dependsOn(nodeJs.npmInstallTask, compileKotlinTask)
|
||||
it.dependsOn(nodeJs.npmInstallTaskProvider, compilation.compileKotlinTaskProvider)
|
||||
|
||||
it.configuration()
|
||||
}
|
||||
|
||||
+7
-7
@@ -52,17 +52,17 @@ open class NodeJsRootExtension(val rootProject: Project) : ConfigurationPhaseAwa
|
||||
|
||||
val taskRequirements = TasksRequirements()
|
||||
|
||||
val nodeJsSetupTask: NodeJsSetupTask
|
||||
get() = rootProject.tasks.getByName(NodeJsSetupTask.NAME) as NodeJsSetupTask
|
||||
val nodeJsSetupTaskProvider: TaskProvider<out NodeJsSetupTask>
|
||||
get() = rootProject.tasks.withType(NodeJsSetupTask::class.java).named(NodeJsSetupTask.NAME)
|
||||
|
||||
val npmInstallTask: KotlinNpmInstallTask
|
||||
get() = rootProject.tasks.getByName(KotlinNpmInstallTask.NAME) as KotlinNpmInstallTask
|
||||
val npmInstallTaskProvider: TaskProvider<out KotlinNpmInstallTask>
|
||||
get() = rootProject.tasks.withType(KotlinNpmInstallTask::class.java).named(KotlinNpmInstallTask.NAME)
|
||||
|
||||
val packageJsonUmbrellaTaskProvider: TaskProvider<Task>
|
||||
get() = rootProject.tasks.named(PACKAGE_JSON_UMBRELLA_TASK_NAME)
|
||||
|
||||
val rootPackageJsonTask: RootPackageJsonTask
|
||||
get() = rootProject.tasks.getByName(RootPackageJsonTask.NAME) as RootPackageJsonTask
|
||||
val rootPackageJsonTaskProvider: TaskProvider<RootPackageJsonTask>
|
||||
get() = rootProject.tasks.withType(RootPackageJsonTask::class.java).named(RootPackageJsonTask.NAME)
|
||||
|
||||
val rootPackageDir: File
|
||||
get() = rootProject.buildDir.resolve("js")
|
||||
@@ -111,7 +111,7 @@ open class NodeJsRootExtension(val rootProject: Project) : ConfigurationPhaseAwa
|
||||
val nodeJsEnv = requireConfigured()
|
||||
if (download) {
|
||||
if (!nodeJsEnv.nodeBinDir.isDirectory) {
|
||||
nodeJsSetupTask.exec()
|
||||
nodeJsSetupTaskProvider.get().exec()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -132,7 +132,7 @@ class KotlinNpmResolutionManager(private val nodeJsSettings: NodeJsRootExtension
|
||||
return (state as ResolutionState.Installed).resolved
|
||||
}
|
||||
|
||||
val installUpToDate = nodeJsSettings.npmInstallTask.state.upToDate
|
||||
val installUpToDate = nodeJsSettings.npmInstallTaskProvider.get().state.upToDate
|
||||
val forceUpToDate = installUpToDate && !forceFullResolve
|
||||
|
||||
val installation = prepareIfNeeded(requireUpToDateReason = reason)
|
||||
@@ -175,7 +175,7 @@ class KotlinNpmResolutionManager(private val nodeJsSettings: NodeJsRootExtension
|
||||
when (state1) {
|
||||
is ResolutionState.Prepared -> alreadyResolved(state1.preparedInstallation)
|
||||
is ResolutionState.Configuring -> {
|
||||
val upToDate = nodeJsSettings.rootPackageJsonTask.state.upToDate
|
||||
val upToDate = nodeJsSettings.rootPackageJsonTaskProvider.get().state.upToDate
|
||||
if (requireUpToDateReason != null && !upToDate) {
|
||||
error("NPM dependencies should be resolved $requireUpToDateReason")
|
||||
}
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ internal class KotlinCompilationNpmResolver(
|
||||
listOf(nodeJs, npmProject)
|
||||
) {
|
||||
it.skipOnEmptyNpmDependencies = true
|
||||
it.dependsOn(nodeJs.npmInstallTask)
|
||||
it.dependsOn(nodeJs.npmInstallTaskProvider)
|
||||
it.dependsOn(packageJsonTaskHolder)
|
||||
}.also { packageJsonTask ->
|
||||
if (compilation.isMain()) {
|
||||
|
||||
+1
-1
@@ -59,7 +59,7 @@ internal class KotlinProjectNpmResolver(
|
||||
nodeJs.taskRequirements.addTaskRequirements(task)
|
||||
}
|
||||
task.dependsOn(packageJsonTaskHolder)
|
||||
task.dependsOn(nodeJs.npmInstallTask)
|
||||
task.dependsOn(nodeJs.npmInstallTaskProvider)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-6
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmResolver
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PACKAGE_JSON_UMBRELLA_TASK_NAME
|
||||
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||
import java.io.File
|
||||
|
||||
@@ -61,7 +62,7 @@ open class KotlinPackageJsonTask : DefaultTask() {
|
||||
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
|
||||
|
||||
val rootClean = project.rootProject.tasks.named(BasePlugin.CLEAN_TASK_NAME)
|
||||
val npmInstallTask = nodeJs.npmInstallTask
|
||||
val npmInstallTask = nodeJs.npmInstallTaskProvider
|
||||
val packageJsonTaskName = npmProject.packageJsonTaskName
|
||||
val packageJsonUmbrella = nodeJs.packageJsonUmbrellaTaskProvider
|
||||
val packageJsonTask = project.registerTask<KotlinPackageJsonTask>(packageJsonTaskName) { task ->
|
||||
@@ -77,12 +78,10 @@ open class KotlinPackageJsonTask : DefaultTask() {
|
||||
task.inputs.file(packageJsonTask.map { it.packageJson })
|
||||
}
|
||||
|
||||
nodeJs.rootPackageJsonTask.mustRunAfter(packageJsonTask)
|
||||
nodeJs.rootPackageJsonTaskProvider.configure { it.mustRunAfter(packageJsonTask) }
|
||||
|
||||
compilation.compileKotlinTask.dependsOn(
|
||||
npmInstallTask,
|
||||
packageJsonTask
|
||||
)
|
||||
compilation.compileKotlinTaskProvider.dependsOn(npmInstallTask)
|
||||
compilation.compileKotlinTaskProvider.dependsOn(packageJsonTask)
|
||||
|
||||
return packageJsonTask
|
||||
}
|
||||
|
||||
+1
-1
@@ -216,7 +216,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
||||
nodeJs: NodeJsRootExtension
|
||||
) {
|
||||
dependsOn(
|
||||
nodeJs.npmInstallTask,
|
||||
nodeJs.npmInstallTaskProvider,
|
||||
target.project.tasks.named(compilation.processResourcesTaskName)
|
||||
)
|
||||
|
||||
|
||||
+8
-8
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import org.jetbrains.kotlin.gradle.utils.newFileProperty
|
||||
|
||||
abstract class KotlinJsSubTarget(
|
||||
val target: KotlinJsTarget,
|
||||
@@ -59,7 +58,9 @@ abstract class KotlinJsSubTarget(
|
||||
|
||||
target.compilations.all {
|
||||
val npmProject = it.npmProject
|
||||
it.compileKotlinTask.kotlinOptions.outputFile = npmProject.dir.resolve(npmProject.main).canonicalPath
|
||||
it.kotlinOptions {
|
||||
outputFile = npmProject.dir.resolve(npmProject.main).canonicalPath
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,19 +98,18 @@ abstract class KotlinJsSubTarget(
|
||||
testRun.subtargetTestTaskName(),
|
||||
listOf(compilation)
|
||||
) { testJs ->
|
||||
val compileTask = compilation.compileKotlinTask
|
||||
val compileTask = compilation.compileKotlinTaskProvider
|
||||
|
||||
testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP
|
||||
testJs.description = testTaskDescription
|
||||
|
||||
testJs.inputFileProperty.set(project.newFileProperty {
|
||||
compileTask.outputFile
|
||||
})
|
||||
val compileOutputFile = compileTask.map { it.outputFile }
|
||||
testJs.inputFileProperty.set(project.layout.file(compileOutputFile))
|
||||
|
||||
testJs.dependsOn(nodeJs.npmInstallTask, compileTask, nodeJs.nodeJsSetupTask)
|
||||
testJs.dependsOn(nodeJs.npmInstallTaskProvider, compileTask, nodeJs.nodeJsSetupTaskProvider)
|
||||
|
||||
testJs.onlyIf {
|
||||
compileTask.outputFile.exists()
|
||||
compileOutputFile.get().exists()
|
||||
}
|
||||
|
||||
testJs.targetName = listOfNotNull(target.disambiguationClassifier, disambiguationClassifier)
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ open class YarnPlugin : Plugin<Project> {
|
||||
val nodeJs = NodeJsRootPlugin.apply(this)
|
||||
|
||||
registerTask<YarnSetupTask>(YarnSetupTask.NAME) {
|
||||
it.dependsOn(nodeJs.nodeJsSetupTask)
|
||||
it.dependsOn(nodeJs.nodeJsSetupTaskProvider)
|
||||
}
|
||||
|
||||
val rootClean = project.rootProject.tasks.named(BasePlugin.CLEAN_TASK_NAME)
|
||||
|
||||
+2
-3
@@ -24,9 +24,8 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = "
|
||||
get() = doGetOrCreateAggregatedTestTask(
|
||||
name = allTestsTaskName,
|
||||
description = "Runs the tests for all targets and create aggregated report"
|
||||
) {
|
||||
project.tasks.maybeCreate(LifecycleBasePlugin.CHECK_TASK_NAME)
|
||||
.dependsOn(it)
|
||||
).also {
|
||||
project.tasks.named(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(it)
|
||||
}
|
||||
|
||||
fun registerTestTask(
|
||||
|
||||
Reference in New Issue
Block a user