diff --git a/buildSrc/src/main/kotlin/AggregateTest.kt b/buildSrc/src/main/kotlin/AggregateTest.kt index d46161f24ee..37e368137f4 100644 --- a/buildSrc/src/main/kotlin/AggregateTest.kt +++ b/buildSrc/src/main/kotlin/AggregateTest.kt @@ -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 diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index 33277eee1c7..f69df4603d2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -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") | } |} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBuildProjectModelTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBuildProjectModelTask.kt index dc48cd32d37..b1777090a1b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBuildProjectModelTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBuildProjectModelTask.kt @@ -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 { 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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt index 816af2cb5f3..46670b88822 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt @@ -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, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index 7af81ce8482..fb06e920db3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -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, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinWasmD8.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinWasmD8.kt index bfee8fc8e8e..32fae92897a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinWasmD8.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinWasmD8.kt @@ -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( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinWasmNode.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinWasmNode.kt index 0738f92c3d7..237eb169d61 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinWasmNode.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinWasmNode.kt @@ -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( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/compatibiltiy.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/compatibility.kt similarity index 87% rename from libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/compatibiltiy.kt rename to libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/compatibility.kt index e884becb220..49734dd702d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/compatibiltiy.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/compatibility.kt @@ -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) + } +}