Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.4.7
-
None
-
None
Description
This example:
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
Results in a compilation error:
[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
If you attempt to use Bar.this:
Writable writable = Bar.this.renderTemplate((Object)o, arguments)
The result is a VerifierError
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)
Attachments
Issue Links
- links to