[ https://issues.apache.org/jira/browse/GROOVY-10520?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17501305#comment-17501305 ]
Paul King commented on GROOVY-10520: ------------------------------------ Attaching the GroovyConsole images which illustrate the discussion point. ClosureExpression in 2.5.15: !GroovyConsole2.5.15_ClosureExpression.png! BlockStatement in 2.5.15: !GroovyConsole2.5.15_BlockStatement.png! ClosureExpression in 3.0.9: !GroovyConsole3.0.9_ClosureExpression.png! BlockStatement in 3.0.9: !GroovyConsole3.0.9_BlockStatement.png! > 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: 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.1#820001)