See http://mrhaki.blogspot.com/2009/10/groovy-goodness-static-imports.html

For Web GUI programming we use Groovy together with Vaadin, and I recently had some cases, where e.g. an anonymous class method calls a Groovy closure which calls a Groovy closure which calls a method of the orginal containing class. In these cases it can become hard to have the expected method get called, and I also found that (depending on the situation) either using import aliasing or introducing a uniquely named helper method in the right class can clear things up quick & easy.

Cheers,
mg


On 12/04/2019 23:14, Paul King wrote:
Using import aliases can be a good workaround for such a case.

On Sat, Apr 13, 2019 at 4:58 AM Jochen Theodorou <blackd...@gmx.org <mailto:blackd...@gmx.org>> wrote:

    On 10.04.19 16:05, Herrendorf Johannes wrote:
    > Hi Groovy users,
    >
    > I’m currently building a DSL in groovy and found some strange
    behaviour
    > I have no explanation for: If a method pointer with name
    "myMethod" is
    > imported as static import and a closure has a delegate with a method
    > "myMethod" and it's delegation strategy is set to
    "DELEGATION_ONLY", the
    > imported method is always called inside the closure - the delegate
    > property seems to be ignored.

    two things to always remember:
    * closure delegation is a runtime mechanism, it has no influence on
    static compiled features
    * static imports are compiled statically

    The later is not because we want this, but because we have to more or
    less. And it is painful. I can imagine a system where this is not
    required, but that is far from easy or efficient.

    [...]
    > import static mailinglist.SomeOtherClass.myMethod
    [...]
    >           // dispatched to SomeOtherClass.myMethod; correct
    >          myMethod "Hello"
    >          closureStuff {
    >              // dispatched to SomeOtherClass.myMethod, but I
    expected that
    >                       // it's dispatched to
    ClosureDelegate.myMethod instead
    >              myMethod "Good Morning"
    >          }
    [...]
    > Am I missing something or is this a bug? Thanks for your help in
    advance!

    In short it is a limitation. I am not sure we can really do something
    against that.

    bye Jochen


Reply via email to