On 02.05.2016 16:44, Cédric Champeau wrote:
[...]
Of course, it may look a bit superficial but it is super important for
nice DSLs like in Gradle.
could you give an example of a more complex closure usage?
We should be also aware that this change may break code, since it is
semantic change and a local method of the same name will no longer be
called if it exists on the delegate. A functional interface is after all
not something that came really to exist with java8 only, Callable and
Runnable are examples that existed before and work with Closure already.
Implementation wise to have something like
void configure(Action<Person> config) {
config.execute(person)
}
working we need to set the delegate to person, but we don´t know person
before the method invocation. This means the proxy for the Action
delegating to the closure config represents must also make the
delegation setter call.
And there is also the problem of what we do if Action contains default
methods - I do not consider our current solution as appropriate anymore.
But of course that is not essential for the idea at hand.
bye Jochen