Fix unrelated tasks being configured at execution time, KT-31666
Replace iteration over all tasks with `.matching { ... }` with `
.configureEach { if (...) ... }`, so that the check iterates
just over those tasks which are triggered to configure from
somewhere else.
Issue #KT-31666 Fixed
This commit is contained in:
+31
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
class ConfigurationAvoidanceIT : BaseGradleIT() {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testUnrelatedTaskNotConfigured() = with(Project("simpleProject", GradleVersionRequired.AtLeast("4.10.2"))) {
|
||||||
|
setupWorkingDir()
|
||||||
|
|
||||||
|
val expensivelyConfiguredTaskName = "expensivelyConfiguredTask"
|
||||||
|
val triggeredExpensiveConfigurationText = "Triggered expensive configuration!"
|
||||||
|
|
||||||
|
gradleBuildScript().appendText("\n" + """
|
||||||
|
tasks.register("$expensivelyConfiguredTaskName") {
|
||||||
|
println("$triggeredExpensiveConfigurationText")
|
||||||
|
}
|
||||||
|
""".trimIndent())
|
||||||
|
|
||||||
|
build("compileKotlin") {
|
||||||
|
assertSuccessful()
|
||||||
|
assertNotContains(triggeredExpensiveConfigurationText)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+22
-7
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.gradle.tasks
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.plugins.BasePluginConvention
|
import org.gradle.api.plugins.BasePluginConvention
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
@@ -33,6 +34,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformPluginBase
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformPluginBase
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PLUGIN_CLASSPATH_CONFIGURATION_NAME
|
import org.jetbrains.kotlin.gradle.plugin.PLUGIN_CLASSPATH_CONFIGURATION_NAME
|
||||||
import org.jetbrains.kotlin.gradle.report.BuildReportMode
|
import org.jetbrains.kotlin.gradle.report.BuildReportMode
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
||||||
import org.jetbrains.kotlin.gradle.utils.isParentOf
|
import org.jetbrains.kotlin.gradle.utils.isParentOf
|
||||||
import org.jetbrains.kotlin.gradle.utils.pathsAsStringRelativeTo
|
import org.jetbrains.kotlin.gradle.utils.pathsAsStringRelativeTo
|
||||||
import org.jetbrains.kotlin.gradle.utils.toSortedPathsArray
|
import org.jetbrains.kotlin.gradle.utils.toSortedPathsArray
|
||||||
@@ -459,14 +461,27 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
|
|||||||
private fun disableMultiModuleIC(): Boolean {
|
private fun disableMultiModuleIC(): Boolean {
|
||||||
if (!incremental || javaOutputDir == null) return false
|
if (!incremental || javaOutputDir == null) return false
|
||||||
|
|
||||||
val illegalTask = project.tasks.matching {
|
fun forEachTask(fn: (Task) -> Unit) {
|
||||||
it is AbstractCompile &&
|
if (isGradleVersionAtLeast(4, 10)) {
|
||||||
it !is JavaCompile &&
|
project.tasks.configureEach(fn)
|
||||||
it !is AbstractKotlinCompile<*> &&
|
} else {
|
||||||
javaOutputDir!!.isParentOf(it.destinationDir)
|
project.tasks.forEach(fn)
|
||||||
}.firstOrNull() as? AbstractCompile
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (illegalTask != null) {
|
var illegalTaskOrNull: AbstractCompile? = null
|
||||||
|
|
||||||
|
forEachTask {
|
||||||
|
if (it is AbstractCompile &&
|
||||||
|
it !is JavaCompile &&
|
||||||
|
it !is AbstractKotlinCompile<*> &&
|
||||||
|
javaOutputDir!!.isParentOf(it.destinationDir)
|
||||||
|
) {
|
||||||
|
illegalTaskOrNull = illegalTaskOrNull ?: it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
illegalTaskOrNull?.let { illegalTask ->
|
||||||
logger.info(
|
logger.info(
|
||||||
"Kotlin inter-project IC is disabled: " +
|
"Kotlin inter-project IC is disabled: " +
|
||||||
"unknown task '$illegalTask' destination dir ${illegalTask.destinationDir} " +
|
"unknown task '$illegalTask' destination dir ${illegalTask.destinationDir} " +
|
||||||
|
|||||||
Reference in New Issue
Block a user