[ 
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)

Reply via email to