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;