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 2021/01/26 14:22:43 UTC

[groovy] branch master updated: Validate unknown statement in GINQ

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 3f12afc  Validate unknown statement in GINQ
3f12afc is described below

commit 3f12afc8c4100366415957c940986da1e4cc96d1
Author: Daniel Sun <su...@apache.org>
AuthorDate: Tue Jan 26 22:22:15 2021 +0800

    Validate unknown statement in GINQ
---
 .../org/apache/groovy/ginq/dsl/GinqAstBuilder.java | 10 +++++-----
 .../org/apache/groovy/ginq/GinqErrorTest.groovy    | 22 ++++++++++++++++++++++
 2 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/dsl/GinqAstBuilder.java b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/dsl/GinqAstBuilder.java
index 47daa05..9d36427 100644
--- a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/dsl/GinqAstBuilder.java
+++ b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/dsl/GinqAstBuilder.java
@@ -102,14 +102,14 @@ public class GinqAstBuilder extends CodeVisitorSupport implements SyntaxErrorRep
         }
 
         astNode.visit(this);
-        return getGinqExpression();
+        return getGinqExpression(astNode);
     }
 
-    public GinqExpression getGinqExpression() {
-        if (null == latestGinqExpression && !ginqExpressionStack.isEmpty()) {
-            GinqExpression latestGinqExpression = ginqExpressionStack.peek();
+    private GinqExpression getGinqExpression(ASTNode astNode) {
+        if (null == latestGinqExpression) {
+            ASTNode node = ginqExpressionStack.isEmpty() ? astNode : ginqExpressionStack.peek();
             this.collectSyntaxError(new GinqSyntaxError("`select` clause is missing",
-                    latestGinqExpression.getLineNumber(), latestGinqExpression.getColumnNumber()));
+                    node.getLineNumber(), node.getColumnNumber()));
         }
 
         latestGinqExpression.visit(new GinqAstBaseVisitor() {
diff --git a/subprojects/groovy-ginq/src/test/groovy/org/apache/groovy/ginq/GinqErrorTest.groovy b/subprojects/groovy-ginq/src/test/groovy/org/apache/groovy/ginq/GinqErrorTest.groovy
index 53c0200..de60e91 100644
--- a/subprojects/groovy-ginq/src/test/groovy/org/apache/groovy/ginq/GinqErrorTest.groovy
+++ b/subprojects/groovy-ginq/src/test/groovy/org/apache/groovy/ginq/GinqErrorTest.groovy
@@ -576,4 +576,26 @@ class GinqErrorTest {
 
         assert err.toString().contains('Invalid option: zzz. (supported options: [immediate, abort]) @ line 2, column 26.')
     }
+
+    @Test
+    void "testGinq - unknown statement - 1"() {
+        def err = shouldFail '''\
+            GQ {
+                hello
+            }
+        '''
+
+        assert err.toString().contains('`select` clause is missing @ line 2, column 17.')
+    }
+
+    @Test
+    void "testGinq - unknown statement - 2"() {
+        def err = shouldFail '''\
+            GQ {
+                hello world
+            }
+        '''
+
+        assert err.toString().contains('`select` clause is missing @ line 2, column 17.')
+    }
 }