[ https://issues.apache.org/jira/browse/GROOVY-7970?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15611543#comment-15611543 ]
Paul King commented on GROOVY-7970: ----------------------------------- After applying the proposed PR#451 from GROOVY-7973 and also convincing the type checker to allow Class.this type expressions within closures, the following script works (i.e. the above suggested workaround which was showing a VerifyError): {code} @groovy.transform.CompileStatic class Bar { String renderTemplate(String arg) { "dummy$arg" } def foo() { new Object() { String bar() { 'B'.with{ Bar.this.renderTemplate(it) } } } } } assert new Bar().foo().bar() == 'dummyB' {code} I still need to work on the fix without the qualified name workaround in place. > 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)