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) +
'}';
}
}