[gradle][test][IDEA-323444] fix kotlin-dsl task declaration for Gradle below 5.0

(cherry picked from commit cfa45347d91b4765c360aa0acb8ced0ee14857d6)

IJ-CR-218334

GitOrigin-RevId: 7bbdcd3798ab484225f877ed7302162aa3744d48
This commit is contained in:
Alexander.Glukhov
2026-08-13 13:41:26 +00:00
committed by intellij-monorepo-bot
parent 3c7fd008d0
commit 2c2c805f8d
3 changed files with 32 additions and 5 deletions
@@ -2,6 +2,7 @@
package org.jetbrains.plugins.gradle.frameworkSupport.buildscript
import com.intellij.gradle.toolingExtension.util.GradleVersionSpecificsUtil
import com.intellij.gradle.toolingExtension.util.GradleVersionSpecificsUtil.isKotlinNamedAccessorsForCollectionsSupported
import com.intellij.gradle.toolingExtension.util.GradleVersionUtil
import com.intellij.openapi.util.text.StringUtil
import org.gradle.util.GradleVersion
@@ -68,7 +69,14 @@ abstract class AbstractGradleBuildScriptBuilder<Self : GradleBuildScriptBuilder<
else -> call("tasks.named", argument(name), argument(code(type)), argument(block))
}
GradleDsl.KOTLIN -> when (name in PREDEFINED_TASKS) {
true -> call("tasks.$name", argument(block))
true -> {
if (isKotlinNamedAccessorsForCollectionsSupported(gradleVersion)) {
call("tasks.$name", argument(block))
}
else {
call("tasks.named<$type>", argument(name), argument(block))
}
}
else -> call("tasks.named<$type>", argument(name), argument(block))
}
}
@@ -395,7 +395,7 @@ class GradleBuildScriptBuilderTest : GradleBuildScriptBuilderTestCase() {
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junit5")
}
tasks.test {
tasks.named<Test>("test") {
useJUnitPlatform()
}
""".trimIndent()),
@@ -538,15 +538,26 @@ class GradleBuildScriptBuilderTest : GradleBuildScriptBuilderTestCase() {
@Test
fun `test predefined task configuration`() {
assertBuildScript("""
assertBuildScript(
GradleVersion.version("4.6") to ("""
|test {
| myConfiguration()
|}
""".trimMargin(), """
""".trimMargin() to """
|tasks.named<Test>("test") {
| myConfiguration()
|}
""".trimMargin()),
GradleVersion.version("5.0") to ("""
|test {
| myConfiguration()
|}
""".trimMargin() to """
|tasks.test {
| myConfiguration()
|}
""".trimMargin()) {
""".trimMargin())
) {
configureTask("test", "Test") {
call("myConfiguration")
}
@@ -37,6 +37,14 @@ object GradleVersionSpecificsUtil {
fun isPluginExtensionSupported(gradleVersion: GradleVersion): Boolean =
GradleVersionUtil.isGradleAtLeast(gradleVersion, "4.10")
/**
* This feature of kotlin-dsl was introduced in 1.0-RC12 which is bundled starting from Gradle 5.0.
* https://github.com/gradle/kotlin-dsl-samples/issues/879
*/
@JvmStatic
fun isKotlinNamedAccessorsForCollectionsSupported(gradleVersion: GradleVersion): Boolean =
GradleVersionUtil.isGradleAtLeast(gradleVersion, "5.0")
@JvmStatic
fun isKotlinPropertyAssignmentSupported(gradleVersion: GradleVersion): Boolean =
GradleVersionUtil.isGradleAtLeast(gradleVersion, "8.6")