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

[groovy] 02/02: GROOVY-10520: Incorrect line numbers for Closure classes in AstNode

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

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

commit 19a64640acd6aa6772a8f698ed9067884f13967e
Author: Daniel Sun <su...@apache.org>
AuthorDate: Tue Mar 8 22:13:07 2022 +0800

    GROOVY-10520: Incorrect line numbers for Closure classes in AstNode
---
 src/test/org/codehaus/groovy/ast/LineColumnCheck.txt               | 7 +++++++
 .../src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java  | 6 +++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/test/org/codehaus/groovy/ast/LineColumnCheck.txt b/src/test/org/codehaus/groovy/ast/LineColumnCheck.txt
index bb6bd63..bdd28e8 100644
--- a/src/test/org/codehaus/groovy/ast/LineColumnCheck.txt
+++ b/src/test/org/codehaus/groovy/ast/LineColumnCheck.txt
@@ -172,6 +172,13 @@ a = obj.prop[]
 a = obj['prop']
 :::[BinaryExpression,(1:5),(1:16)]
 
+###closureExpressionWithEmptyBlockStatement:::
+f{
+
+}
+:::[MethodCallExpression,(1:1),(3:2)];
+[ConstantExpression,(1:1),(1:2)][ArgumentListExpression,(1:2),(3:2)][ClosureExpression,(1:2),(3:2)][BlockStatement,(1:2),(3:2)]
+
 ###resolvedDeclarationExpression:::
 def i = Integer.parseInt("42")
 :::[DeclarationExpression,(1:1),(1:31)]
diff --git a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 6d4e23b..74b084d 100644
--- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -3447,11 +3447,15 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
                 ? this.visitFormalParameterList(ctx.formalParameterList())
                 : null;
 
+        BlockStatement code = this.visitBlockStatementsOpt(ctx.blockStatementsOpt());
         if (!asBoolean(ctx.ARROW())) {
             parameters = Parameter.EMPTY_ARRAY;
+
+            if (code.isEmpty()) {
+                configureAST(code, ctx);
+            }
         }
 
-        Statement code = this.visitBlockStatementsOpt(ctx.blockStatementsOpt());
         ClosureExpression result = configureAST(new ClosureExpression(parameters, code), ctx);
 
         visitingClosureCount -= 1;