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