Hi Jochen,
Thanks for looking, and for the findings - interesting!
Actually I think my reproducer was not a good representation of the real issue
I saw in production.
I added the getName() call in my first repro as a random thing to do with the
argument, but that introduced unintended behaviour.
My real case is closer to this (literally implementations of List, in my case):
```
def foo(List<String> x) { }
def bar(List<String> x) { foo(x) }
List<String> l1 = new ArrayList();
List<String> l2 = new LinkedList();
while (true) {
bar(l1)
127.times { bar(l2) }
}
```
The call site causing the difficulty here is (I think) foo(x) within bar, where
a 'sameClasses' guard is inserted and
invalidates the previous method handle whenever the argument class changes
(LinkedList != ArrayList) -
I confirmed this by adding logging to the guard.
Oli
P.S. I now have a JIRA account for Groovy, should I create a ticket?
Amazon Development Centre (London) Ltd. Registered in England and Wales with
registration number 04543232 with its registered office at 1 Principal Place,
Worship Street, London EC2A 2FA, United Kingdom.