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

Paul King commented on GROOVY-10520:
------------------------------------

The Parrot parser was rejigged a bit to provide more accurate line numbers in 
particular scenarios. It may have some cases which are less accurate. I haven't 
looked in the parsing code yet and your comments above certainly seem 
reasonable at first glance, but just setting expectations that we don't 
necessarily always try to have the exact line number info across versions.

> Incorrect line numbers for Closure classes in AstNode
> -----------------------------------------------------
>
>                 Key: GROOVY-10520
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10520
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 3.0.10
>            Reporter: John Engelman
>            Priority: Major
>         Attachments: image-2022-03-03-19-48-26-005.png
>
>
> The line number recorded in the compiled class for {{Closure}} is incorrect 
> in certain circumstances.
>  
> {noformat}
> 1. void doThing(Closure c) {
> 2.   c.class()
> 3. }
> 4.
> 5. void go() {
> 6.   doThing { // This is a comment
> 7.     // And there is no body
> 8.   }
> 9. }{noformat}
> When grabbing the {{lineNumber}} (using javassist and loading the {{doCall}} 
> method from the {{CtClass}} for the {{{}Closure{}}}), it is reported as line 
> 8, where in Groovy 2.5.x it was reported as line 6. Removing the comments but 
> leaving just a new line between the {{{}} and {{}}} (an empty block) has the 
> same result.
> The expected outcome here should be line 6 as that's the start of the closure.
> If you modify the closure like so:
>  
> {noformat}
> 1. void doThing(Closure c) {
> 2.   c.class()
> 3. }
> 4.
> 5. void go() {
> 6.   doThing { // This is a comment
> 7.     println "hi"
> 8.   }
> 9. }{noformat}
> The line is reported as line 7. This is also incorrect as that would be the 
> {{BlockStatement}} inside the {{Closure.}}
> Trying to debug the parser, I ended up in {{GroovyParse.blockStatementOpts}} 
> which appears to be setting the {{startLine}} value incorrectly (The below 
> screen shot is from compilation of a similar class where a closure contains 
> only comments). Notice that {{start}} is marked as a line number after 
> {{end}} which can't really be true.
> !image-2022-03-03-19-48-26-005.png!
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to