name: kotlin-dsl description: Kotlin DSL - type-safe builders, Gradle DSL, @DslMarker version: "1.0.0" sasmp_version: "1.3.0" bonded_agent: 07-kotlin-dsl bond_type: PRIMARY_BOND
execution: timeout_ms: 30000 retry: max_attempts: 3 backoff: exponential initial_delay_ms: 1000
parameters: required: - name: type type: string validation: "^(gradle|custom|html|config)$" optional: - name: immutable type: boolean default: true
logging: level: info events: [skill_invoked, type_loaded, error_occurred]
Kotlin DSL Skill
Build type-safe DSLs with Kotlin's language features.
Topics Covered
@DslMarker for Scope Control
@DslMarker
annotation class HtmlDsl
@HtmlDsl
class HTML { fun body(block: Body.() -> Unit) { } }
@HtmlDsl
class Body { fun p(text: String) { } }
// Usage - scoped correctly
html { body { p("Text") } }
Gradle Convention Plugin
// kotlin-library.gradle.kts
plugins { kotlin("jvm"); `java-library` }
kotlin { jvmToolchain(17) }
dependencies {
testImplementation(kotlin("test"))
testImplementation("io.mockk:mockk:1.13.9")
}
tasks.test { useJUnitPlatform() }
Type-Safe Config Builder
@ConfigDsl
class ServerConfig private constructor(val host: String, val port: Int) {
class Builder {
var host = "localhost"
var port = 8080
fun build() = ServerConfig(host, port)
}
}
fun serverConfig(block: ServerConfig.Builder.() -> Unit) =
ServerConfig.Builder().apply(block).build()
// Usage
val config = serverConfig { host = "api.example.com"; port = 443 }
Troubleshooting
| Issue | Resolution |
|---|---|
| Scope pollution | Add @DslMarker annotation |
| Gradle cache stale | Run ./gradlew --stop |
Usage
Skill("kotlin-dsl")