You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2022/04/27 08:34:00 UTC

[jira] [Closed] (GROOVY-10520) Incorrect line numbers for Closure classes in AstNode

     [ https://issues.apache.org/jira/browse/GROOVY-10520?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Paul King closed GROOVY-10520.
------------------------------

> 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
>            Assignee: Paul King
>            Priority: Major
>             Fix For: 5.0.0-alpha-1, 3.0.11, 4.0.2
>
>         Attachments: GroovyConsole2.5.15_BlockStatement.png, GroovyConsole2.5.15_ClosureExpression.png, GroovyConsole3.0.9_BlockStatement.png, GroovyConsole3.0.9_ClosureExpression.png, 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.7#820007)