-
-
Notifications
You must be signed in to change notification settings - Fork 1
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
}