From 2c2c805f8dcf265235bfe58244f7a74bf538947b Mon Sep 17 00:00:00 2001 From: "Alexander.Glukhov" Date: Tue, 30 Jun 2026 13:12:07 +0200 Subject: [PATCH] [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 --- .../AbstractGradleBuildScriptBuilder.kt | 10 +++++++++- .../GradleBuildScriptBuilderTest.kt | 19 +++++++++++++++---- .../util/GradleVersionSpecificsUtil.kt | 8 ++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/frameworkSupport/buildscript/AbstractGradleBuildScriptBuilder.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/frameworkSupport/buildscript/AbstractGradleBuildScriptBuilder.kt index 72d36000a856..3fe4d3d56a71 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/frameworkSupport/buildscript/AbstractGradleBuildScriptBuilder.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/frameworkSupport/buildscript/AbstractGradleBuildScriptBuilder.kt @@ -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 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)) } } diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/frameworkSupport/GradleBuildScriptBuilderTest.kt b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/frameworkSupport/GradleBuildScriptBuilderTest.kt index 61aec4fed13e..e2b3ad450b4f 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/frameworkSupport/GradleBuildScriptBuilderTest.kt +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/frameworkSupport/GradleBuildScriptBuilderTest.kt @@ -395,7 +395,7 @@ class GradleBuildScriptBuilderTest : GradleBuildScriptBuilderTestCase() { testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junit5") } - tasks.test { + tasks.named("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") { + | myConfiguration() + |} + """.trimMargin()), + GradleVersion.version("5.0") to (""" + |test { + | myConfiguration() + |} + """.trimMargin() to """ |tasks.test { | myConfiguration() |} - """.trimMargin()) { + """.trimMargin()) + ) { configureTask("test", "Test") { call("myConfiguration") } diff --git a/plugins/gradle/tooling-extension-api/src/com/intellij/gradle/toolingExtension/util/GradleVersionSpecificsUtil.kt b/plugins/gradle/tooling-extension-api/src/com/intellij/gradle/toolingExtension/util/GradleVersionSpecificsUtil.kt index 523f3e3ebc44..5ae11a52a77a 100644 --- a/plugins/gradle/tooling-extension-api/src/com/intellij/gradle/toolingExtension/util/GradleVersionSpecificsUtil.kt +++ b/plugins/gradle/tooling-extension-api/src/com/intellij/gradle/toolingExtension/util/GradleVersionSpecificsUtil.kt @@ -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")