From 30814937fd035abc6feb2b3dc24fb960afa387d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Mon, 10 Aug 2026 21:57:03 +0200 Subject: [PATCH] refactor(kotlin): Remove the kotlin-dsl plugin To learn more about the motivation, see https://mbonnin.net/2025-07-10_the_case_against_kotlin_dsl/ --- vite-kotlin/build.gradle.kts | 3 - .../src/main/kotlin/KotlinVitePlugin.kt | 3 +- .../src/main/kotlin/tasks/Filtering.kt | 5 +- .../src/main/kotlin/tasks/ViteExecTask.kt | 65 +++++++++---------- 4 files changed, 32 insertions(+), 44 deletions(-) diff --git a/vite-kotlin/build.gradle.kts b/vite-kotlin/build.gradle.kts index 1a30365..456f0ee 100644 --- a/vite-kotlin/build.gradle.kts +++ b/vite-kotlin/build.gradle.kts @@ -6,9 +6,6 @@ plugins { alias(opensavvyConventions.plugins.kotlin.abstractLibrary) alias(libsCommon.plugins.testBalloon) id("org.jetbrains.kotlin.plugin.power-assert") - - `kotlin-dsl` - `java-gradle-plugin` } repositories { diff --git a/vite-kotlin/src/main/kotlin/KotlinVitePlugin.kt b/vite-kotlin/src/main/kotlin/KotlinVitePlugin.kt index d34029a..66c17a1 100644 --- a/vite-kotlin/src/main/kotlin/KotlinVitePlugin.kt +++ b/vite-kotlin/src/main/kotlin/KotlinVitePlugin.kt @@ -8,7 +8,6 @@ import org.gradle.api.Project import org.gradle.api.file.Directory import org.gradle.api.provider.Provider import org.gradle.internal.extensions.stdlib.capitalized -import org.gradle.kotlin.dsl.getByType import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl @@ -83,4 +82,4 @@ internal fun Project.viteBuildDistDir(targetName: String): Provider = * Accesses the project's [KotlinViteConfig] extension. */ val Project.kotlinViteConfig: KotlinViteConfig - get() = extensions.getByType() + get() = extensions.getByType(KotlinViteConfig::class.java) diff --git a/vite-kotlin/src/main/kotlin/tasks/Filtering.kt b/vite-kotlin/src/main/kotlin/tasks/Filtering.kt index 2a4f8f3..7b697e7 100644 --- a/vite-kotlin/src/main/kotlin/tasks/Filtering.kt +++ b/vite-kotlin/src/main/kotlin/tasks/Filtering.kt @@ -2,7 +2,6 @@ package opensavvy.gradle.vite.kotlin.tasks import opensavvy.gradle.vite.base.config.ViteConfig import org.gradle.api.Project -import org.gradle.kotlin.dsl.getByName import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinTarget @@ -19,7 +18,7 @@ internal fun configureFiltering(project: Project, vitePrefix: String, target: Ko else kotlin.js().outputModuleName.get() val jsFileExtension = (target.compilations.getByName("main") as KotlinJsCompilation).fileExtension.get() val jsFileName = "$moduleName.$jsFileExtension" - project.tasks.getByName("${vitePrefix}CompileKotlinDev", CustomIncrementalSyncTask::class) { + project.tasks.named("${vitePrefix}CompileKotlinDev", CustomIncrementalSyncTask::class.java) { addFilter { if (name == "index.html") { filter { s -> @@ -29,7 +28,7 @@ internal fun configureFiltering(project: Project, vitePrefix: String, target: Ko } } } - project.tasks.getByName("${vitePrefix}CompileKotlinProd", CustomIncrementalSyncTask::class) { + project.tasks.named("${vitePrefix}CompileKotlinProd", CustomIncrementalSyncTask::class.java) { addFilter { if (name == "index.html") { filter { s -> diff --git a/vite-kotlin/src/main/kotlin/tasks/ViteExecTask.kt b/vite-kotlin/src/main/kotlin/tasks/ViteExecTask.kt index 5fb0f85..c205c05 100644 --- a/vite-kotlin/src/main/kotlin/tasks/ViteExecTask.kt +++ b/vite-kotlin/src/main/kotlin/tasks/ViteExecTask.kt @@ -9,9 +9,8 @@ import opensavvy.gradle.vite.kotlin.viteBuildProdDir import org.gradle.api.Project import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.TaskProvider import org.gradle.internal.extensions.stdlib.capitalized -import org.gradle.kotlin.dsl.getByType -import org.gradle.kotlin.dsl.getValue import org.gradle.process.ExecOperations import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension @@ -38,7 +37,7 @@ abstract class KotlinViteExec @Inject constructor( @get:Internal override val compilation: KotlinJsIrCompilation get() { - val extension = project.extensions.getByType() + val extension = project.extensions.getByType(KotlinMultiplatformExtension::class.java) val targetDsl = if (targetType == "js") extension.js() else extension.wasmJs() return targetDsl.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME) } @@ -71,55 +70,49 @@ abstract class KotlinViteExec @Inject constructor( } internal fun createExecTasks(project: Project, vitePrefix: String, target: KotlinTarget) { - val configureDev: WriteConfig by project.tasks.named("${vitePrefix}ConfigureDev") - val configureProd: WriteConfig by project.tasks.named("${vitePrefix}ConfigureProd") + val configureDev: TaskProvider = project.tasks.named("${vitePrefix}ConfigureDev", WriteConfig::class.java) + val configureProd: TaskProvider = project.tasks.named("${vitePrefix}ConfigureProd", WriteConfig::class.java) val targetName = target.name val targetType = if (target.targetName == "wasmJs") "wasm" else "js" - project.tasks.register("${vitePrefix}Build", KotlinViteExec::class.java, targetName, targetType).apply { - configure { - description = "Builds the production variant of the project" - dependsOn(configureProd, "${vitePrefix}CompileProd") + project.tasks.register("${vitePrefix}Build", KotlinViteExec::class.java, targetName, targetType).configure { + description = "Builds the production variant of the project" + dependsOn(configureProd, "${vitePrefix}CompileProd") - command.set("build") + command.set("build") - config.setDefaultsFrom(configureProd.config) + config.setDefaultsFrom(configureProd.get().config) - config.root.set(project.viteBuildProdDir(targetName).map { it.dir("kotlin") }) - configurationFile.set(configureProd.configurationFile) - outputs.dir(project.viteBuildDistDir(targetName)) - } + config.root.set(project.viteBuildProdDir(targetName).map { it.dir("kotlin") }) + configurationFile.set(configureProd.get().configurationFile) + outputs.dir(project.viteBuildDistDir(targetName)) } - project.tasks.register("${vitePrefix}Preview", KotlinViteExec::class.java, targetName, targetType).apply { - configure { - description = "Previews the production variant of the project" - dependsOn("${vitePrefix}Build") + project.tasks.register("${vitePrefix}Preview", KotlinViteExec::class.java, targetName, targetType).configure { + description = "Previews the production variant of the project" + dependsOn("${vitePrefix}Build") - command.set("preview") + command.set("preview") - config.setDefaultsFrom(configureProd.config) + config.setDefaultsFrom(configureProd.get().config) - config.root.set(project.viteBuildProdDir(targetName).map { it.dir("kotlin") }) - configurationFile.set(configureProd.configurationFile) - outputs.dir(project.viteBuildDistDir(targetName)) - } + config.root.set(project.viteBuildProdDir(targetName).map { it.dir("kotlin") }) + configurationFile.set(configureProd.get().configurationFile) + outputs.dir(project.viteBuildDistDir(targetName)) } - project.tasks.register("${vitePrefix}Run", KotlinViteExec::class.java, targetName, targetType).apply { - configure { - description = "Hosts the development variant of the project" - dependsOn(configureDev, "${vitePrefix}CompileDev") + project.tasks.register("${vitePrefix}Run", KotlinViteExec::class.java, targetName, targetType).configure { + description = "Hosts the development variant of the project" + dependsOn(configureDev, "${vitePrefix}CompileDev") - config.setDefaultsFrom(configureDev.config) + config.setDefaultsFrom(configureDev.get().config) - config.root.set(project.viteBuildDevDir(targetName).map { it.dir("kotlin") }) - configurationFile.set(configureDev.configurationFile) + config.root.set(project.viteBuildDevDir(targetName).map { it.dir("kotlin") }) + configurationFile.set(configureDev.get().configurationFile) - inputs.property("server.host", config.server.host) - inputs.property("server.port", config.server.port) - inputs.property("server.strictPort", config.server.strictPort) - } + inputs.property("server.host", config.server.host) + inputs.property("server.port", config.server.port) + inputs.property("server.strictPort", config.server.strictPort) } project.tasks.named("assemble") { -- 2.51.2