Tweak `identifier` rule
diff --git a/src/antlr/GroovyParser.g4 b/src/antlr/GroovyParser.g4
index 9feca64..02cadee 100644
--- a/src/antlr/GroovyParser.g4
+++ b/src/antlr/GroovyParser.g4
@@ -892,7 +892,13 @@
* 6: non-static inner class creator
*/
pathExpression returns [int t]
- : primary (pathElement { $t = $pathElement.t; })*
+ : (
+ primary
+ |
+ // if 'static' followed by DOT, we can treat them as identifiers, e.g. static.unused = { -> }
+ { DOT == _input.LT(2).getType() }?
+ STATIC
+ ) (pathElement { $t = $pathElement.t; })*
;
pathElement returns [int t]
@@ -1183,10 +1189,6 @@
// | DEF
| TRAIT
| AS
- |
- // if 'static' followed by DOT, we can treat them as identifiers, e.g. static.unused = { -> }
- { DOT == _input.LT(2).getType() }?
- STATIC
;
builtInType
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 d138716..0721c14 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
@@ -2243,7 +2243,15 @@
@Override
public Expression visitPathExpression(PathExpressionContext ctx) {
- return this.createPathExpression((Expression) this.visit(ctx.primary()), ctx.pathElement());
+ final TerminalNode staticTerminalNode = ctx.STATIC();
+ Expression primaryExpr;
+ if (asBoolean(staticTerminalNode)) {
+ primaryExpr = configureAST(new VariableExpression(staticTerminalNode.getText()), staticTerminalNode);
+ } else {
+ primaryExpr = (Expression) this.visit(ctx.primary());
+ }
+
+ return this.createPathExpression(primaryExpr, ctx.pathElement());
}
@Override