diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-ir/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-ir/build.gradle.kts index 9306b2711f9..4b844bba0bf 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-ir/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-ir/build.gradle.kts @@ -13,10 +13,10 @@ kotlin { browser { commonWebpackConfig { cssSupport { - enabled = true + enabled.set(true) } scssSupport { - enabled = true + enabled.set(true) } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts index 6279ab7a01d..ed3c9edf7b3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts @@ -16,7 +16,7 @@ abstract class CustomWebpackRule @javax.inject.Inject constructor(name: String) : org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackRule(name) { init { - test = "none" + test.set("none") } override fun loaders() = listOf() } @@ -26,10 +26,10 @@ kotlin { browser { webpackTask { cssSupport { - enabled = true + enabled.set(true) } scssSupport { - enabled = true + enabled.set(true) } rules { rule("custom") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt index 32e504194bc..d1437e0093b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt @@ -8,6 +8,8 @@ package org.jetbrains.kotlin.gradle.targets.js.webpack import com.google.gson.GsonBuilder +import org.gradle.api.ExtensiblePolymorphicDomainObjectContainer +import org.gradle.api.model.ObjectFactory import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Nested @@ -70,20 +72,6 @@ data class KotlinWebpackConfig( @Input val webpackMajorVersion: WebpackMajorVersion = WebpackMajorVersion.V5 ) : WebpackRulesDsl { - @get:Internal - @Deprecated("use cssSupport methods instead") - var cssSupport: KotlinWebpackCssRule - get() = rules.maybeCreate("css", KotlinWebpackCssRule::class.java) - set(value) { - rules.maybeCreate("css", KotlinWebpackCssRule::class.java).apply { - this.mode = value.mode - this.enabled = value.enabled - this.test = value.test - this.include = value.include - this.exclude = value.exclude - } - } - @get:Input @get:Optional val entryInput: String? diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackCssRule.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackCssRule.kt index 27b4c3c38d7..5a854c03ec9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackCssRule.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackCssRule.kt @@ -25,12 +25,15 @@ typealias KotlinWebpackCssSupport = KotlinWebpackCssRule @Suppress("LeakingThis") abstract class KotlinWebpackCssRule @Inject constructor(name: String) : KotlinWebpackRule(name) { @get:Input - var mode: String = INLINE + abstract val mode: Property - override var test: String = "/\\.css\$/" + init { + mode.convention(INLINE) + test.convention("/\\.css\$/") + } override fun validate(): Boolean { - if (mode !in arrayOf(EXTRACT, INLINE, IMPORT)) { + if (mode.get() !in arrayOf(EXTRACT, INLINE, IMPORT)) { error( """ Possible values for cssSupport.mode: @@ -46,7 +49,7 @@ abstract class KotlinWebpackCssRule @Inject constructor(name: String) : KotlinWe override fun dependencies(versions: NpmVersions): Collection { return mutableListOf().apply { add(versions.cssLoader) - when (mode) { + when (mode.get()) { EXTRACT -> add(versions.miniCssExtractPlugin) INLINE -> add(versions.styleLoader) IMPORT -> add(versions.toStringLoader) @@ -54,7 +57,7 @@ abstract class KotlinWebpackCssRule @Inject constructor(name: String) : KotlinWe } } - override fun loaders(): List = when (mode) { + override fun loaders(): List = when (mode.get()) { EXTRACT -> listOf( Loader( loader = "MiniCssExtractPlugin.loader", diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRule.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRule.kt index 69b9ca01216..792a6fda702 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRule.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRule.kt @@ -20,24 +20,28 @@ import javax.inject.Inject @Suppress("LeakingThis") abstract class KotlinWebpackRule @Inject constructor(private val name: String) : Named { @get:Input - var enabled: Boolean = false + abstract val enabled: Property /** * Raw rule `test` field value. Needs to be wrapped in quotes when using string notation. */ @get:Input - abstract var test: String + abstract val test: Property @get:Input - var include: MutableList = mutableListOf() + abstract val include: ListProperty @get:Input - var exclude: MutableList = mutableListOf() + abstract val exclude: ListProperty @get:Input protected open val description: String get() = (this::class.simpleName?.removeSuffix("_Decorated") ?: "KotlinWebpackRule") + "[${getName()}]" + init { + enabled.convention(false) + } + /** * Validates the rule state just before it getting applied. * Returning false will skip the rule silently. To terminate the build instead, throw an error. @@ -55,7 +59,7 @@ abstract class KotlinWebpackRule @Inject constructor(private val name: String) : protected abstract fun loaders(): List @get:Internal - internal val active: Boolean get() = enabled && validate() + internal val active: Boolean get() = enabled.get() && validate() internal fun Appendable.appendToWebpackConfig() { appendLine( """ @@ -83,14 +87,14 @@ abstract class KotlinWebpackRule @Inject constructor(private val name: String) : """.trimIndent() ) - val excluded = exclude.takeIf(List<*>::isNotEmpty) + val excluded = exclude.get().takeIf(List<*>::isNotEmpty) ?.joinToString(separator = ",", prefix = "[", postfix = "]") ?: "undefined" - val included = include.takeIf(List<*>::isNotEmpty) + val included = include.get().takeIf(List<*>::isNotEmpty) ?.joinToString(separator = ",", prefix = "[", postfix = "]") ?: "undefined" appendLine( """ config.module.rules.push({ - test: ${test}, + test: ${test.get()}, use: use, exclude: $excluded, include: $included, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackScssRule.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackScssRule.kt index 6efd8486a49..82c42f1a51a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackScssRule.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackScssRule.kt @@ -11,7 +11,9 @@ import javax.inject.Inject @Suppress("LeakingThis") abstract class KotlinWebpackScssRule @Inject constructor(name: String) : KotlinWebpackCssRule(name) { - override var test: String = "/\\.(scss|sass)\$/" + init { + test.convention("/\\.(scss|sass)\$/") + } override fun dependencies(versions: NpmVersions): Collection { return super.dependencies(versions) + versions.sass + versions.sassLoader