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)