Skip to content

Dsl Processor Annotations

Jacob Rein edited this page May 5, 2020 · 4 revisions

//To allow kapt
apply plugin: 'kotlin-kapt'
//For the Annotations
implementation 'com.github.jakepurple13.HelpfulTools:dslannotations:{version}'
//For the actual generation
kapt "com.github.jakepurple13.HelpfulTools:dslprocessor:{version}"

Example:

@DslMarker
annotation class PersonMarker

@DslMarker
annotation class PersonMarker2

data class Person(val name: String, var age: Int, private val birthday: (Int) -> Int) {
    fun birthday() {
        age = birthday(age)
    }
}

@DslClass(PersonMarker2::class)
class PersonBuilder {
    @DslField("birthdayParty", comment = "Set what happens on his birthday party")
    var birthday: (Int) -> Int = { it }
    @DslField(dslMarker = PersonMarker::class)
    var name: String = ""
    var age = 0

    private fun build() = Person(name, age, birthday)

    companion object {
        fun builder(block: PersonBuilder.() -> Unit) = PersonBuilder().apply(block).build()
    }

}

Generates:

/**
 * Set what happens on his birthday party
 */
@DslFieldMarker
fun PersonBuilder.birthdayParty(block: Function1<Int, Int>) {
  birthday = block
}

@PersonMarker
fun PersonBuilder.name(block: String) {
  name = block
}

@PersonMarker2
fun PersonBuilder.age(block: Int) {
  age = block
}
Clone this wiki locally