Use Task.doNotTrackState api

This api is faster replacement for 'task.outputs.upToDateWhen { false }'
 approach.

^KT-52624 Fixed
This commit is contained in:
Yahor Berdnikau
2022-09-27 12:06:59 +02:00
committed by Space
parent 037f41526f
commit 5924a80ec8
8 changed files with 29 additions and 10 deletions
+1 -1
View File
@@ -47,7 +47,7 @@ open class AggregateTest : Test() { // Inherit from Test to see test results in
} }
private fun subTaskConfigure(testTask: Test) { private fun subTaskConfigure(testTask: Test) {
testTask.outputs.upToDateWhen { false } testTask.doNotTrackState("State is tracked by AggregateTest task")
testTask.ignoreFailures = true testTask.ignoreFailures = true
testTask.filter { testTask.filter {
isFailOnNoMatchingTests = false isFailOnNoMatchingTests = false
@@ -1218,7 +1218,8 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean)
| |
|allprojects { |allprojects {
| tasks.configureEach { | tasks.configureEach {
| if (this is org.gradle.configuration.Help) return@configureEach | if (name == org.gradle.language.base.plugins.LifecycleBasePlugin.CLEAN_TASK_NAME ||
| this is org.gradle.configuration.Help) return@configureEach
| throw GradleException("Task ${'$'}{path} shouldn't be configured") | throw GradleException("Task ${'$'}{path} shouldn't be configured")
| } | }
|} |}
@@ -1237,7 +1238,8 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean)
| |
|allprojects { |allprojects {
| tasks.configureEach { | tasks.configureEach {
| if (it instanceof org.gradle.configuration.Help) return | if (it.name == org.gradle.language.base.plugins.LifecycleBasePlugin.CLEAN_TASK_NAME ||
| it instanceof org.gradle.configuration.Help) return
| throw new GradleException("Task ${'$'}{path} shouldn't be configured") | throw new GradleException("Task ${'$'}{path} shouldn't be configured")
| } | }
|} |}
@@ -13,11 +13,10 @@ import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.pm20Extension import org.jetbrains.kotlin.gradle.dsl.pm20Extension
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
import org.jetbrains.kotlin.kpm.idea.proto.writeTo import org.jetbrains.kotlin.kpm.idea.proto.writeTo
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.ObjectOutputStream import java.io.ObjectOutputStream
import kotlin.time.ExperimentalTime
import kotlin.time.measureTime
internal fun Project.locateOrRegisterIdeaKpmBuildProjectModelTask(): TaskProvider<IdeaKpmBuildProjectModelTask> { internal fun Project.locateOrRegisterIdeaKpmBuildProjectModelTask(): TaskProvider<IdeaKpmBuildProjectModelTask> {
return locateOrRegisterTask(IdeaKpmBuildProjectModelTask.defaultTaskName) return locateOrRegisterTask(IdeaKpmBuildProjectModelTask.defaultTaskName)
@@ -34,7 +33,7 @@ internal open class IdeaKpmBuildProjectModelTask : DefaultTask() {
private val builder = project.pm20Extension.ideaKpmProjectModelBuilder private val builder = project.pm20Extension.ideaKpmProjectModelBuilder
init { init {
outputs.upToDateWhen { false } doNotTrackStateCompat("Should always re-run to produce updated models")
} }
@TaskAction @TaskAction
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode
import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackDevtool import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackDevtool
import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackMajorVersion.Companion.choose import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackMajorVersion.Companion.choose
import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.dependsOn
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
import org.jetbrains.kotlin.gradle.utils.newFileProperty import org.jetbrains.kotlin.gradle.utils.newFileProperty
import java.io.File import java.io.File
import javax.inject.Inject import javax.inject.Inject
@@ -152,7 +153,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
)() )()
task.outputs.upToDateWhen { false } task.doNotTrackStateCompat("Tracked by external webpack tool")
task.commonConfigure( task.commonConfigure(
compilation = compilation, compilation = compilation,
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackDevtool
import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackMajorVersion.Companion.choose import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackMajorVersion.Companion.choose
import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.dependsOn
import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.io.File import java.io.File
import javax.inject.Inject import javax.inject.Inject
@@ -175,7 +176,7 @@ abstract class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
} }
)() )()
task.outputs.upToDateWhen { false } task.doNotTrackStateCompat("Tracked by external webpack tool")
task.commonConfigure( task.commonConfigure(
compilation = compilation, compilation = compilation,
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments
import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin
import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm
import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
import org.jetbrains.kotlin.gradle.utils.getValue import org.jetbrains.kotlin.gradle.utils.getValue
internal class KotlinWasmD8(private val kotlinJsTest: KotlinJsTest) : KotlinJsTestFramework { internal class KotlinWasmD8(private val kotlinJsTest: KotlinJsTest) : KotlinJsTestFramework {
@@ -30,7 +31,7 @@ internal class KotlinWasmD8(private val kotlinJsTest: KotlinJsTest) : KotlinJsTe
private val isTeamCity = project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY) private val isTeamCity = project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY)
init { init {
kotlinJsTest.outputs.upToDateWhen { false } kotlinJsTest.doNotTrackStateCompat("Should always re-run for WASM")
} }
override fun createTestExecutionSpec( override fun createTestExecutionSpec(
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments
import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm
import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
internal class KotlinWasmNode(private val kotlinJsTest: KotlinJsTest) : KotlinJsTestFramework { internal class KotlinWasmNode(private val kotlinJsTest: KotlinJsTest) : KotlinJsTestFramework {
override val settingsState: String = "KotlinWasmNode" override val settingsState: String = "KotlinWasmNode"
@@ -22,7 +23,7 @@ internal class KotlinWasmNode(private val kotlinJsTest: KotlinJsTest) : KotlinJs
private val isTeamCity = compilation.target.project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY) private val isTeamCity = compilation.target.project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY)
init { init {
kotlinJsTest.outputs.upToDateWhen { false } kotlinJsTest.doNotTrackStateCompat("Should always re-run for WASM")
} }
override fun createTestExecutionSpec( override fun createTestExecutionSpec(
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.GradleException import org.gradle.api.GradleException
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.file.ArchiveOperations import org.gradle.api.file.ArchiveOperations
import org.gradle.api.file.CopySpec import org.gradle.api.file.CopySpec
import org.gradle.api.file.FileSystemOperations import org.gradle.api.file.FileSystemOperations
@@ -99,3 +100,16 @@ internal interface LegacyTestDescriptorInternal : TestDescriptor {
fun getClassDisplayName(): String? fun getClassDisplayName(): String?
} }
/**
* According to [Gradle 7.3 release notes](https://docs.gradle.org/7.3/release-notes.html#allow-plugin-authors-to-declare-tasks-as-untracked)
* [Task.doNotTrackState] is a better replacement for `Task.outputs.upToDateWhen { false }`
*/
internal fun Task.doNotTrackStateCompat(because: String) {
if (GradleVersion.current() < GradleVersion.version("7.3")) {
logger.info("Not UP-TO-DATE because $because")
outputs.upToDateWhen { false }
} else {
doNotTrackState(because)
}
}