John Engelman created GROOVY-10520:
--------------------------------------

             Summary: 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
         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