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

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


The following commit(s) were added to refs/heads/GROOVY-8258 by this push:
     new b126ecb  GROOVY-8258: tweak AST
b126ecb is described below

commit b126ecb3e177653460613df16696520a2ea819f6
Author: Daniel Sun <[email protected]>
AuthorDate: Tue Oct 6 23:10:45 2020 +0800

    GROOVY-8258: tweak AST
---
 .../groovy/org/apache/groovy/linq/dsl/GinqAstBuilder.java   |  2 +-
 .../groovy/org/apache/groovy/linq/dsl/GinqAstWalker.groovy  |  9 ++++++---
 .../groovy/linq/dsl/expression/FilterableExpression.java    | 13 ++++++++-----
 .../apache/groovy/linq/dsl/expression/FromExpression.java   |  2 +-
 4 files changed, 16 insertions(+), 10 deletions(-)

diff --git 
a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqAstBuilder.java
 
b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqAstBuilder.java
index 0101390..9f972a9 100644
--- 
a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqAstBuilder.java
+++ 
b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqAstBuilder.java
@@ -117,7 +117,7 @@ public class GinqAstBuilder extends CodeVisitorSupport {
             filterExpression.setSourcePosition(call);
 
             if (ginqExpression instanceof FilterableExpression) { // TODO more 
strict check
-                ((FilterableExpression) 
ginqExpression).setFilterExpression(filterExpression);
+                ((FilterableExpression) 
ginqExpression).addFilterExpression(filterExpression);
             } else {
                 throw new GroovyBugError("The preceding expression is not a 
FilterableExpression: " + ginqExpression);
             }
diff --git 
a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqAstWalker.groovy
 
b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqAstWalker.groovy
index 59c7578..ba2b497 100644
--- 
a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqAstWalker.groovy
+++ 
b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqAstWalker.groovy
@@ -20,6 +20,7 @@ package org.apache.groovy.linq.dsl
 
 import groovy.transform.CompileDynamic
 import groovy.transform.CompileStatic
+import org.apache.groovy.linq.dsl.expression.FilterExpression
 import org.apache.groovy.linq.dsl.expression.FromExpression
 import org.apache.groovy.linq.dsl.expression.GinqExpression
 import org.apache.groovy.linq.dsl.expression.InnerJoinExpression
@@ -97,8 +98,9 @@ class GinqAstWalker implements GinqVisitor<Object> {
     MethodCallExpression visitFromExpression(FromExpression fromExpression) {
         MethodCallExpression fromMethodCallExpression = 
constructFromMethodCallExpression(fromExpression)
 
-        WhereExpression whereExpression = (WhereExpression) 
fromExpression.getFilterExpression()
-        if (whereExpression) {
+        List<FilterExpression> filterExpressionList = 
fromExpression.getFilterExpressionList()
+        if (filterExpressionList) {
+            WhereExpression whereExpression = (WhereExpression) 
filterExpressionList.get(0)
             whereExpression.putNodeMetaData(__FROM_EXPRESSION, fromExpression)
             whereExpression.putNodeMetaData(__FROM_METHOD_CALL_EXPRESSION, 
fromMethodCallExpression)
 
@@ -112,7 +114,8 @@ class GinqAstWalker implements GinqVisitor<Object> {
     MethodCallExpression visitInnerJoinExpression(InnerJoinExpression 
innerJoinExpression) {
         Expression receiver = 
innerJoinExpression.getNodeMetaData(__METHOD_CALL_RECEIVER)
         Expression receiverAliasExpr = 
innerJoinExpression.getNodeMetaData(__ALIAS_EXPR)
-        OnExpression onExpression = (OnExpression) 
innerJoinExpression.getFilterExpression()
+        List<FilterExpression> filterExpressionList = 
innerJoinExpression.getFilterExpressionList()
+        OnExpression onExpression = (OnExpression) filterExpressionList.get(0)
         MethodCallExpression innerJoinMethodCallExpression = 
constructInnerJoinMethodCallExpression(receiver, receiverAliasExpr, 
innerJoinExpression, onExpression)
 
         return innerJoinMethodCallExpression
diff --git 
a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/FilterableExpression.java
 
b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/FilterableExpression.java
index 3ce3523..2808438 100644
--- 
a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/FilterableExpression.java
+++ 
b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/FilterableExpression.java
@@ -18,19 +18,22 @@
  */
 package org.apache.groovy.linq.dsl.expression;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Represents expression which could be filtered via {@code where} expression
  *
  * @since 4.0.0
  */
 public abstract class FilterableExpression extends AbstractGinqExpression {
-    protected FilterExpression filterExpression;
+    protected List<FilterExpression> filterExpressionList = new ArrayList<>();
 
-    public FilterExpression getFilterExpression() {
-        return filterExpression;
+    public List<FilterExpression> getFilterExpressionList() {
+        return filterExpressionList;
     }
 
-    public void setFilterExpression(FilterExpression filterExpression) {
-        this.filterExpression = filterExpression;
+    public void addFilterExpression(FilterExpression filterExpression) {
+        this.filterExpressionList.add(filterExpression);
     }
 }
diff --git 
a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/FromExpression.java
 
b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/FromExpression.java
index 6dd48d2..4133eec 100644
--- 
a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/FromExpression.java
+++ 
b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/FromExpression.java
@@ -41,7 +41,7 @@ public class FromExpression extends DataSourceExpression {
         return "FromExpression{" +
                 "aliasExpr=" + aliasExpr +
                 ", dataSourceExpr=" + dataSourceExpr +
-                ", whereExpression=" + filterExpression +
+                ", whereExpression=" + filterExpressionList.get(0) +
                 '}';
     }
 }

Reply via email to