[PowerAssert] Update Gradle extension to be more idiomatic

Instead of using raw List types in the Gradle extension, ListProperty
should be used instead to make it more Gradle idiomatic. Also marking
the extension and all properties as experimental to allow easier
changing in the future.

^KT-65952 Fixed
This commit is contained in:
Brian Norman
2024-03-07 10:51:06 -06:00
committed by Space Team
parent ae3e770246
commit 9a5f4522e6
3 changed files with 19 additions and 9 deletions
@@ -34,15 +34,14 @@ kotlin {
} }
powerAssert { powerAssert {
functions = listOf( functions.addAll(
"kotlin.assert",
"kotlin.test.assertTrue", "kotlin.test.assertTrue",
"kotlin.require", "kotlin.require",
"sample.AssertScope.assert", "sample.AssertScope.assert",
"sample.assert", "sample.assert",
"sample.dbg" "sample.dbg"
) )
excludedSourceSets = listOf( excludedSourceSets.addAll(
"commonMain", "commonMain",
"jvmMain", "jvmMain",
"jsMain", "jsMain",
@@ -19,7 +19,16 @@
package org.jetbrains.kotlin.powerassert.gradle package org.jetbrains.kotlin.powerassert.gradle
open class PowerAssertGradleExtension { import org.gradle.api.model.ObjectFactory
var functions: List<String> = listOf("kotlin.assert") import org.gradle.api.provider.ListProperty
var excludedSourceSets: List<String> = listOf() import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import javax.inject.Inject
@ExperimentalKotlinGradlePluginApi
abstract class PowerAssertGradleExtension @Inject constructor(
objectFactory: ObjectFactory,
) {
val functions: ListProperty<String> = objectFactory.listProperty(String::class.java).convention(listOf("kotlin.assert"))
val excludedSourceSets: ListProperty<String> = objectFactory.listProperty(String::class.java).convention(emptyList())
} }
@@ -21,8 +21,10 @@ package org.jetbrains.kotlin.powerassert.gradle
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
@OptIn(ExperimentalKotlinGradlePluginApi::class)
class PowerAssertGradlePlugin : KotlinCompilerPluginSupportPlugin { class PowerAssertGradlePlugin : KotlinCompilerPluginSupportPlugin {
companion object { companion object {
private const val POWER_ASSERT_ARTIFACT_NAME = "kotlin-power-assert-compiler-plugin-embeddable" private const val POWER_ASSERT_ARTIFACT_NAME = "kotlin-power-assert-compiler-plugin-embeddable"
@@ -37,7 +39,7 @@ class PowerAssertGradlePlugin : KotlinCompilerPluginSupportPlugin {
override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean { override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean {
val project = kotlinCompilation.target.project val project = kotlinCompilation.target.project
val extension = project.extensions.getByType(PowerAssertGradleExtension::class.java) val extension = project.extensions.getByType(PowerAssertGradleExtension::class.java)
return extension.excludedSourceSets.none { it == kotlinCompilation.defaultSourceSet.name } return extension.excludedSourceSets.get().none { it == kotlinCompilation.defaultSourceSet.name }
} }
override fun applyToCompilation( override fun applyToCompilation(
@@ -45,8 +47,8 @@ class PowerAssertGradlePlugin : KotlinCompilerPluginSupportPlugin {
): Provider<List<SubpluginOption>> { ): Provider<List<SubpluginOption>> {
val project = kotlinCompilation.target.project val project = kotlinCompilation.target.project
val extension = project.extensions.getByType(PowerAssertGradleExtension::class.java) val extension = project.extensions.getByType(PowerAssertGradleExtension::class.java)
return project.provider { return extension.functions.map { functions ->
extension.functions.map { functions.map {
SubpluginOption(key = FUNCTION_ARG_NAME, value = it) SubpluginOption(key = FUNCTION_ARG_NAME, value = it)
} }
} }