[ https://issues.apache.org/jira/browse/GROOVY-7970?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15615142#comment-15615142 ]
ASF GitHub Bot commented on GROOVY-7970: ---------------------------------------- GitHub user paulk-asert opened a pull request: https://github.com/apache/groovy/pull/452 GROOVY-7970: Can't call private method from outer class when using anonymous inner classes and @CS Not a final solution. This fixes public methods. Private/protected methods are handled by a different code path which isn't yet fixed. You can merge this pull request into a Git repository by running: $ git pull https://github.com/paulk-asert/groovy groovy7970 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/groovy/pull/452.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #452 ---- commit b75907f844f0abb44414ee3e53e9bb247ee33a55 Author: paulk <pa...@asert.com.au> Date: 2016-10-25T04:30:08Z GROOVY-7970: Can't call private method from outer class when using anonymous inner classes and @CS (allow through the type checker) commit 63e55bbd79a1fa5318feaf08c43ac9e86e9c0593 Author: paulk <pa...@asert.com.au> Date: 2016-10-28T11:27:24Z GROOVY-7970: Can't call private method from outer class when using anonymous inner classes and @CS ---- > Can't call private method from outer class when using anonymous inner classes > and @CS > ------------------------------------------------------------------------------------- > > Key: GROOVY-7970 > URL: https://issues.apache.org/jira/browse/GROOVY-7970 > Project: Groovy > Issue Type: Bug > Affects Versions: 2.4.7 > Reporter: Graeme Rocher > > This example: > {code} > import groovy.json.* > import groovy.transform.* > @CompileStatic > class Bar { > private Writable renderTemplate(Object o, Map args) { > > } > def foo(Map map, Map arguments) { > > def writable = new Writable() { > @Override > Writer writeTo(Writer out) throws IOException { > StreamingJsonBuilder builder = new StreamingJsonBuilder(out) > builder.call { > for(key in map.keySet()) { > def o = map.get(key) > Writable writable = renderTemplate((Object)o, > arguments) > call(key.toString(), writable) > } > } > return out > } > } > } > } > writable = new Bar().foo([one:'two'],[foo:'bar']) > sw = new StringWriter() > writable.writeTo(sw) > println sw > {code} > Results in a compilation error: > {code} > [Static type checking] - Cannot find matching method > Bar$1#renderTemplate(java.lang.Object, java.util.Map). Please check if the > declared type is right and if the method exists. > at line: 18, column: 45 > {code} > If you attempt to use {{Bar.this}}: > {code} > Writable writable = Bar.this.renderTemplate((Object)o, arguments) > {code} > The result is a VerifierError > {code} > java.lang.VerifyError: (class: Bar$1$_writeTo_closure1, method: doCall > signature: (Ljava/lang/Object;)Ljava/lang/Object;) Incompatible argument to > function > at Bar$1.writeTo(ConsoleScript11:15) > at groovy.lang.Writable$writeTo.call(Unknown Source) > at > org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) > > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)