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) {
testTask.outputs.upToDateWhen { false }
testTask.doNotTrackState("State is tracked by AggregateTest task")
testTask.ignoreFailures = true
testTask.filter {
isFailOnNoMatchingTests = false
@@ -1218,7 +1218,8 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean)
|
|allprojects {
| 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")
| }
|}
@@ -1237,7 +1238,8 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean)
|
|allprojects {
| 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")
| }
|}
@@ -13,11 +13,10 @@ import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.pm20Extension
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
import org.jetbrains.kotlin.kpm.idea.proto.writeTo
import java.io.ByteArrayOutputStream
import java.io.ObjectOutputStream
import kotlin.time.ExperimentalTime
import kotlin.time.measureTime
internal fun Project.locateOrRegisterIdeaKpmBuildProjectModelTask(): TaskProvider<IdeaKpmBuildProjectModelTask> {
return locateOrRegisterTask(IdeaKpmBuildProjectModelTask.defaultTaskName)
@@ -34,7 +33,7 @@ internal open class IdeaKpmBuildProjectModelTask : DefaultTask() {
private val builder = project.pm20Extension.ideaKpmProjectModelBuilder
init {
outputs.upToDateWhen { false }
doNotTrackStateCompat("Should always re-run to produce updated models")
}
@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.WebpackMajorVersion.Companion.choose
import org.jetbrains.kotlin.gradle.tasks.dependsOn
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
import org.jetbrains.kotlin.gradle.utils.newFileProperty
import java.io.File
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(
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.tasks.dependsOn
import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.io.File
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(
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.internal.parseNodeJsStackTraceAsJvm
import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
import org.jetbrains.kotlin.gradle.utils.getValue
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)
init {
kotlinJsTest.outputs.upToDateWhen { false }
kotlinJsTest.doNotTrackStateCompat("Should always re-run for WASM")
}
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.internal.parseNodeJsStackTraceAsJvm
import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
internal class KotlinWasmNode(private val kotlinJsTest: KotlinJsTest) : KotlinJsTestFramework {
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)
init {
kotlinJsTest.outputs.upToDateWhen { false }
kotlinJsTest.doNotTrackStateCompat("Should always re-run for WASM")
}
override fun createTestExecutionSpec(
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.GradleException
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.file.ArchiveOperations
import org.gradle.api.file.CopySpec
import org.gradle.api.file.FileSystemOperations
@@ -99,3 +100,16 @@ internal interface LegacyTestDescriptorInternal : TestDescriptor {
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)
}
}