[ 
https://issues.apache.org/jira/browse/GROOVY-7970?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15611586#comment-15611586
 ] 

Paul King commented on GROOVY-7970:
-----------------------------------

I think it probably should - but I'll work on that more tomorrow and see if any 
ugly cases come up. It is always tricky with closures since they are so 
flexible, you can't make as many assumptions about what they would definitely 
produce. The type checking extension mechanism is in place for that purpose. If 
we can't be certain what should happen we should leave it out of the main 
compilation path. 

> 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)

Reply via email to