Code
class DemoExtension {
String non_closure
def override_closure = {}
}
class DemoPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create('demoExtension', DemoExtension)
}
}
apply plugin: DemoPlugin
demoExtension {
non_closure = "Hello"
override_closure= {String jniPaths -> return ""}
new_closure = {}
}
println "Non Closure:"
println demoExtension.non_closure
demoExtension.non_closure("hello, world")
println demoExtension.non_closure
println "Override closure:"
println demoExtension.override_closure
demoExtension.override_closure("hello, world")
println demoExtension.override_closure
println "New closure:"
println demoExtension.new_closure
demoExtension.new_closure("hello, world")
println demoExtension.new_closure
Output
Non Closure:
Hello
hello, world
Override closure:
build_7rtsbsk9dvhokdfj78dc5gki0k$_run_closure5_closure13@6cf26de4
hello, world
New closure:
build_7rtsbsk9dvhokdfj78dc5gki0k$_run_closure5_closure14@4aff7dfe
build_7rtsbsk9dvhokdfj78dc5gki0k$_run_closure5_closure14@4aff7dfe
Question: If a closure defined in the plugin extension, when I try to call it, it is actually an assignment statement, which set my closure to a weird value (which takes 0.5 day to diagnose), but if the closure is not predefined in the extension, it is actually calling the closure. Why would we want to support a function call like assignment in this case, is there a way to disable it?
Thanks.