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 2020/10/06 13:49:42 UTC

[groovy] 01/02: GROOVY-8258: simplify the ginq AST

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

commit 378a1ef3d008b316e146156c8790381183e84277
Author: Daniel Sun <su...@apache.org>
AuthorDate: Tue Oct 6 21:46:54 2020 +0800

    GROOVY-8258: simplify the ginq AST
---
 .../org/apache/groovy/linq/dsl/GinqAstBuilder.java       |  2 +-
 .../groovy/org/apache/groovy/linq/dsl/GinqBuilder.groovy | 16 ++++++----------
 .../groovy/linq/dsl/expression/SimpleGinqExpression.java | 12 ++++++------
 3 files changed, 13 insertions(+), 17 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 4905871..e3b70c6 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
@@ -88,7 +88,7 @@ public class GinqAstBuilder extends CodeVisitorSupport {
             if ("from".equals(methodName)) {
                 FromExpression fromExpression = new FromExpression(aliasExpr, dataSourceExpr);
                 fromExpression.setSourcePosition(call);
-                simpleGinqExpression.addFromExpression(fromExpression);
+                simpleGinqExpression.setFromExpression(fromExpression);
                 ginqExpression = fromExpression;
             } else if ("innerJoin".equals(methodName)) {
                 InnerJoinExpression innerJoinExpression = new InnerJoinExpression(aliasExpr, dataSourceExpr);
diff --git a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqBuilder.groovy b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqBuilder.groovy
index b9dd39a..ed0a962 100644
--- a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqBuilder.groovy
+++ b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/GinqBuilder.groovy
@@ -53,20 +53,16 @@ class GinqBuilder implements GinqVisitor<Object> {
 
     @Override
     MethodCallExpression visitSimpleGinqExpression(SimpleGinqExpression simpleGinqExpression) {
-        List<MethodCallExpression> fromMethodCallExpressionList = new LinkedList<>()
-        List<FromExpression> fromExpressionList = simpleGinqExpression.getFromExpressionList()
-        for (FromExpression fromExpression : fromExpressionList) {
-            MethodCallExpression methodCallExpression = this.visitFromExpression(fromExpression)
-            fromMethodCallExpressionList.add(methodCallExpression)
-        }
+        FromExpression fromExpression = simpleGinqExpression.getFromExpression()
+        MethodCallExpression fromMethodCallExpression = this.visitFromExpression(fromExpression)
 
-        MethodCallExpression selectMethodReceiver = fromMethodCallExpressionList.getLast()
+        MethodCallExpression selectMethodReceiver = fromMethodCallExpression
 
         List<MethodCallExpression> innerJoinMethodCallExpressionList = new LinkedList<>()
         List<JoinExpression> joinExpressionList = simpleGinqExpression.getJoinExpressionList()
         for (JoinExpression joinExpression : joinExpressionList) {
-            joinExpression.putNodeMetaData(__INNER_JOIN_METHOD_RECEIVER, fromMethodCallExpressionList.getLast())
-            joinExpression.putNodeMetaData(__RECEIVER_ALIAS_EXPR, fromExpressionList.get(fromExpressionList.size() - 1).aliasExpr)
+            joinExpression.putNodeMetaData(__INNER_JOIN_METHOD_RECEIVER, fromMethodCallExpression)
+            joinExpression.putNodeMetaData(__RECEIVER_ALIAS_EXPR, fromExpression.aliasExpr)
             MethodCallExpression methodCallExpression = this.visitInnerJoinExpression((InnerJoinExpression) joinExpression)
             innerJoinMethodCallExpressionList.add(methodCallExpression);
         }
@@ -85,7 +81,7 @@ class GinqBuilder implements GinqVisitor<Object> {
 
             selectExpression.putNodeMetaData(__ALIAS_EXPR, new VariableExpression(__T))
         } else {
-            selectExpression.putNodeMetaData(__ALIAS_EXPR, fromExpressionList.get(fromExpressionList.size() - 1).aliasExpr)
+            selectExpression.putNodeMetaData(__ALIAS_EXPR, fromExpression.aliasExpr)
         }
 
         MethodCallExpression selectMethodCallExpression = this.visitSelectExpression(selectExpression)
diff --git a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/SimpleGinqExpression.java b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/SimpleGinqExpression.java
index 23d59ed..43abe75 100644
--- a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/SimpleGinqExpression.java
+++ b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/dsl/expression/SimpleGinqExpression.java
@@ -29,7 +29,7 @@ import java.util.List;
  * @since 4.0.0
  */
 public class SimpleGinqExpression extends AbstractGinqExpression {
-    private final List<FromExpression> fromExpressionList = new ArrayList<>();
+    private FromExpression fromExpression;
     private final List<JoinExpression> joinExpressionList = new ArrayList<>();
     private SelectExpression selectExpression;
 
@@ -38,12 +38,12 @@ public class SimpleGinqExpression extends AbstractGinqExpression {
         return visitor.visitSimpleGinqExpression(this);
     }
 
-    public List<FromExpression> getFromExpressionList() {
-        return fromExpressionList;
+    public FromExpression getFromExpression() {
+        return fromExpression;
     }
 
-    public void addFromExpression(FromExpression fromExpression) {
-        this.fromExpressionList.add(fromExpression);
+    public void setFromExpression(FromExpression fromExpression) {
+        this.fromExpression = fromExpression;
     }
 
     public List<JoinExpression> getJoinExpressionList() {
@@ -65,7 +65,7 @@ public class SimpleGinqExpression extends AbstractGinqExpression {
     @Override
     public String toString() {
         return "SimpleGinqExpression{" +
-                "fromExpressionList=" + fromExpressionList +
+                "fromExpression=" + fromExpression +
                 ", selectExpression=" + selectExpression +
                 '}';
     }