[ https://issues.apache.org/jira/browse/GROOVY-9459?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17056914#comment-17056914 ]
Björn Kautler commented on GROOVY-9459: --------------------------------------- After talking a bit with Paul about it, it seems to make sense to take the information from the {{ExpressionStatement}} which was the change in 3.0.0. But as the {{ExpressionStatement}} gets replaced by the {{ReturnStatement}}, would it maybe make sense to have some logic like "take the info from {{ExpressionStatement}} if present and if not, take it from the wrapped {{Expression}} instead"? > Line number information for automatically inserted return statements quirky > --------------------------------------------------------------------------- > > Key: GROOVY-9459 > URL: https://issues.apache.org/jira/browse/GROOVY-9459 > Project: Groovy > Issue Type: Bug > Affects Versions: 3.0.0 > Reporter: Björn Kautler > Priority: Major > > While trying to work-around GROOVY-9440, I found another quirk regarding line > numbers. > I'm sorry if this is intended and not a bug, but it looks strange to me. > Here what I found out so far: > > The Spock AST transformation previously had (semantically equivalent) {{new > ReturnStatement(new ExpressionStatement(theVariableExpression)))}} where the > two statements have no line information, the expression does have it. > This caused the line information to be missing from the > {{MissingPropertyException}}. > If I look at the AST Browser at end of semantic analysis, this results in > {{ReturnStatement -> Variable}} where the return statement has no line > information, the variable does have it, in both 2.5.8 and 3.0.0. > > I thought as work-around I remove the explicit return statement and let > Groovy handle it, as it knows better what to do, so currently I have {{new > ExpressionStatement(theVariableExpression))}} where the statement still has > no line information, but the expression does have it. > This now causes the line information to be missing from the > {{MissingPropertyException}} still, if Groovy 3.0.0 is used. > If I look at the AST Browser at end of semantic analysis, this results in > {{ExpressionStatement -> Variable}} where the statement has no line > information, the variable does have it, in both 2.5.8 and 3.0.0. > If I now look at the end of class generation, this results in > {{ReturnStatement -> Variable}} in both 2.5.8 and 3.0.0, but only 2.5.8 has > line information for the return statement, in 3.0.0 it is {{-1}}. > > I now tried {{ExpressionStatement exprStat = new > ExpressionStatement(theVariableExpression)); exprStat.setLineNumber(666);}} > and now it gets even fancier. > In 2.5.8 the return statement takes the line information from the variable > expression, ignoring the expression statement, > in 3.0.0 the return statement takes the line information from the expression > statement. > -- This message was sent by Atlassian Jira (v8.3.4#803005)