interface Processor {
fun process() = println("processed")
}
inline fun action(block: () -> Unit) = block()
// *** before: ***
fun runOld(processor: Processor?) {
action {
// if (processor != null) processor.process()
// <- Error: a captured value could change, no smart cast
processor?.process()
}
}
// *** in version 2.0: ***
fun run(processor: Processor?) {
action {
if (processor != null) {
processor.process() // the lambda of an inline function cannot leak,
} // so the check holds
}
}