You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (JIRA)" <ji...@apache.org> on 2017/03/02 09:13:45 UTC
[jira] [Resolved] (GROOVY-7797) Private trait method called from
within a closure has the wrong "this" context
[ https://issues.apache.org/jira/browse/GROOVY-7797?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King resolved GROOVY-7797.
-------------------------------
Resolution: Fixed
Assignee: Paul King
Fix Version/s: 2.4.10
Thanks Aaron for reporting the issue and Bo Zhang for the PR. Proposed PR merged with some minor tweaking.
> Private trait method called from within a closure has the wrong "this" context
> ------------------------------------------------------------------------------
>
> Key: GROOVY-7797
> URL: https://issues.apache.org/jira/browse/GROOVY-7797
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 2.4.6
> Reporter: Aaron Long
> Assignee: Paul King
> Priority: Critical
> Fix For: 2.4.10
>
>
> Calling a private trait method from within a closure results in a MethodMissing exception. It looks like within the closure, `this` is referring to the implementing Class and not the instance.
> This might be related to GROOVY-7373. The problem is that calling getDelegate() doesn't work as delegate also seems to have the wrong context.
> {code}
> trait MyTrait {
> void greeter() {
> {-> doGreeting("hi")}.call()
> }
> private void doGreeting(String message) { println message }
> }
> class MyClass implements MyTrait { }
> new MyClass().greeter()
> {code}
> If you make the doGreeting method above `static`, it will work properly.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)