jdemeulenaere
01/15/2020, 11:48 AM@DslMarker
annotation class MyDsl
interface TopLevelBuilder : MethodsThatShouldBeAvailableAnywhere, TopLevelMethodsOnly
interface MethodsThatShouldBeAvailableAnywhere {
fun doSomethingAnywhere()
}
@MyDsl
interface TopLevelMethodsOnly {
fun doSomethingAtTopLevel()
fun lowerLevel(builder: LowerLevelBuilder.() -> Unit)
}
@MyDsl
interface LowerLevelBuilder {
fun doSomethingAtLowerLevel()
}
fun startDsl(builder: TopLevelBuilder.() -> Unit) {
}
fun main() {
startDsl {
doSomethingAnywhere() // compiles
doSomethingAtTopLevel() // compiles
lowerLevel {
doSomethingAtLowerLevel() // compiles
doSomethingAnywhere() // doesn't compile
this@startDsl.doSomethingAnywhere() // compiles but is not very nice
}
}
}
jdemeulenaere
01/15/2020, 11:53 AMMethodsThatShouldBeAvailableAnywhere
and delegate the calls but I have many of them so it's quite inconvenient.jimn
01/27/2020, 2:09 AM