You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2022/03/08 12:03:58 UTC

[groovy] 02/02: Groovy-10520: Capture correct line numbers for Closure/Block statements.

This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 638ba3d3b1d21060ec3549349fcd6389ccfa4079
Author: John Engelman <jo...@target.com>
AuthorDate: Sat Mar 5 16:12:34 2022 -0600

    Groovy-10520: Capture correct line numbers for Closure/Block statements.
---
 src/antlr/GroovyParser.g4                            | 6 +++---
 src/test/org/codehaus/groovy/ast/LineColumnCheck.txt | 8 ++++++++
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/antlr/GroovyParser.g4 b/src/antlr/GroovyParser.g4
index 9d26199..1e5662a 100644
--- a/src/antlr/GroovyParser.g4
+++ b/src/antlr/GroovyParser.g4
@@ -499,7 +499,7 @@ lambdaBody
 
 // CLOSURE
 closure
-    :   LBRACE (nls (formalParameterList nls)? ARROW)? sep? blockStatementsOpt RBRACE
+    :   LBRACE (nls (formalParameterList nls)? ARROW)? blockStatementsOpt RBRACE
     ;
 
 // GROOVY-8991: Difference in behaviour with closure and lambda
@@ -509,7 +509,7 @@ closureOrLambdaExpression
     ;
 
 blockStatementsOpt
-    :   blockStatements?
+    :   sep? blockStatements?
     ;
 
 blockStatements
@@ -560,7 +560,7 @@ elementValueArrayInitializer
 // STATEMENTS / BLOCKS
 
 block
-    :   LBRACE sep? blockStatementsOpt RBRACE
+    :   LBRACE blockStatementsOpt RBRACE
     ;
 
 blockStatement
diff --git a/src/test/org/codehaus/groovy/ast/LineColumnCheck.txt b/src/test/org/codehaus/groovy/ast/LineColumnCheck.txt
index 4148608..353e2e3 100644
--- a/src/test/org/codehaus/groovy/ast/LineColumnCheck.txt
+++ b/src/test/org/codehaus/groovy/ast/LineColumnCheck.txt
@@ -171,6 +171,14 @@ var = f{closure}
 :::[MethodCallExpression,(1:7),(1:17)];
 [ConstantExpression,(1:7),(1:8)][ArgumentListExpression,(1:8),(1:17)][ClosureExpression,(1:8),(1:17)]
 
+
+###closureExpressionWithEmptyBlockStatement:::
+f{
+
+}
+:::[MethodCallExpression,(1:1),(3:2)];
+[ConstantExpression,(1:1),(1:2)][ArgumentListExpression,(1:2),(3:2)][ClosureExpression,(1:2),(3:2)][BlockStatement,(1:3),(3:1)]
+
 ###ArrayExpressionD1:::
 def array = new int[1]
 :::[ArrayExpression,(1:13),(1:23)][ClassNode,(1:17),(1:20)][ConstantExpression,(1:21),(1:22)]