[ https://issues.apache.org/jira/browse/GROOVY-9662?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17202987#comment-17202987 ]
Paul King edited comment on GROOVY-9662 at 9/28/20, 4:02 AM: ------------------------------------------------------------- >From the log when I run tests in the grails-views/views-json subproject: {noformat} result.jsonText == '{"_links":{"self":{"href":"http://localhost:8080/player","hreflang":"en","type":"application/hal+json"}},"name":"Cantona"}' | | | | | false | | 1 difference (99% similarity) | | {"_links":{"self":{(,)"href":"http://localhost:8080/player","hreflang":"en","type":"application/hal+json"}},"name":"Cantona"} ... {noformat} Each level during json rendering has its own closure with a delegate having a boolean property {{first}} which is checked to avoid a comma before the first element at that level. Here, {{first}} from an outer level (where it is already set to false) is returned, hence the extra comma one level down. I haven't yet had time to produce a standalone example. was (Author: paulk): >From the log when I run tests in the grails-views/views-json subproject: {noformat} result.jsonText == '{"_links":{"self":{"href":"http://localhost:8080/player","hreflang":"en","type":"application/hal+json"}},"name":"Cantona"}' | | | | | false | | 1 difference (99% similarity) | | {"_links":{"self":{(,)"href":"http://localhost:8080/player","hreflang":"en","type":"application/hal+json"}},"name":"Cantona"} ... {noformat} Each level during json rendering has its own closure with a delegate having a boolean property {{first}} which is checked to avoid a comma before the first element at that level. Here, {{first}} from an outer level (where it is already set to false) is returned, hence the extra comma one level down. > Groovy 3.0.5: Closure delegate is not working properly > ------------------------------------------------------ > > Key: GROOVY-9662 > URL: https://issues.apache.org/jira/browse/GROOVY-9662 > Project: Groovy > Issue Type: Bug > Affects Versions: 3.0.2, 3.0.3, 3.0.4, 3.0.5 > Reporter: Puneet Behl > Assignee: Eric Milles > Priority: Major > > In Grails Views, we are using closures to generate JSON using > `StreamingJsonBuilder`. The HAL implementation for an entity now generates an > incorrect JSON after updating to Groovy 3. > > Here is the problem code snipped from Grails Views: > {code:java} > jsonDelegate.call(LINKS_ATTRIBUTE) { > call(SELF_ATTRIBUTE) { > call HREF_ATTRIBUTE, viewHelper.link(resource: object, method: > HttpMethod.GET, absolute: true) > call HREFLANG_ATTRIBUTE, locale.toString() > call TYPE_ATTRIBUTE, contentType > } > Set<Link> links = getLinks(object) > for (link in links) { > call(link.rel) { > call HREF_ATTRIBUTE, link.href > call HREFLANG_ATTRIBUTE, link.hreflang?.toString() ?: > locale.toString() > def linkType = link.contentType > if (linkType) { > call TYPE_ATTRIBUTE, linkType > } > } > } > } > {code} > > Although the `resolveStatergy` for the closures is `DELEGATE_FIRST` but I > believe that is not working correctly because it works if I change the above > to: > {code:java} > delegate.call (... > {code} > > To reproduce the issue please checkout > https://github.com/grails/grails-views/commits/bugs/groovy-9962 > -- This message was sent by Atlassian Jira (v8.3.4#803005)