From a85490ea7d594ff24322a5f5d85e297908830393 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Wed, 22 Jun 2022 09:56:36 +0200 Subject: [PATCH] Add conventions only if they are still available So Gradle could drop conventions in Gradle 8.0 release. ^KT-47047 Fixed --- .../jetbrains/kotlin/gradle/plugin/gradleUtils.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt index 84afcd7c487..f96a960f604 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt @@ -23,7 +23,18 @@ import org.gradle.api.plugins.ExtensionAware @Deprecated("Conventions are deprecated in Gradle") internal inline fun Any.addConvention(name: String, plugin: T) { - (this as HasConvention).convention.plugins[name] = plugin + // Verifying conventions are still available via reflection, + // so Gradle could remove them in Gradle 8.0 release + val conventionsIsAvailable = try { + Class.forName("org.gradle.api.internal.HasConvention") + true + } catch (_: ClassNotFoundException) { + false + } + + if (conventionsIsAvailable) { + (this as HasConvention).convention.plugins[name] = plugin + } } internal inline fun Any.addExtension(name: String, extension: T) =