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:36:36 UTC

[groovy] 11/22: GROOVY-8258: enable STC

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 189c49d56dc83a7dd27b1597739325ae6a3433bc
Author: Daniel Sun <su...@apache.org>
AuthorDate: Mon Oct 5 04:50:41 2020 +0800

    GROOVY-8258: enable STC
---
 .../apache/groovy/linq/LinqGroovyMethods.groovy    | 26 ++++++++++++++--------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/LinqGroovyMethods.groovy b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/LinqGroovyMethods.groovy
index ad132e2..dba4f9d 100644
--- a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/LinqGroovyMethods.groovy
+++ b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/LinqGroovyMethods.groovy
@@ -18,6 +18,8 @@
  */
 package org.apache.groovy.linq
 
+import groovy.transform.CompileDynamic
+import groovy.transform.CompileStatic
 import groovy.transform.ToString
 import org.codehaus.groovy.ast.ClassHelper
 import org.codehaus.groovy.ast.expr.ArgumentListExpression
@@ -37,6 +39,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.param
 import static org.codehaus.groovy.ast.tools.GeneralUtils.params
 import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt
 
+@CompileStatic
 class LinqGroovyMethods {
     @Macro
     static Expression LINQ(MacroContext ctx, final ClosureExpression closureExpression) {
@@ -54,7 +57,7 @@ class LinqGroovyMethods {
                     break
                 }
                 case 'of': {
-                    MethodCallExpression fromMethodCallExpression = methodCallExpression.getObjectExpression()
+                    MethodCallExpression fromMethodCallExpression = (MethodCallExpression) methodCallExpression.getObjectExpression()
                     VariableExpression aliasVariable = (VariableExpression) ((ArgumentListExpression) fromMethodCallExpression.getArguments()).getExpression(0)
                     Expression dataSourceExpression = ((ArgumentListExpression) methodCallExpression.getArguments()).getExpression(0)
                     linqContext.addFrom(aliasVariable, dataSourceExpression)
@@ -79,16 +82,13 @@ class LinqGroovyMethods {
         constructLinqMethodCalls(linqContext)
     }
 
-    private static constructLinqMethodCalls(LinqContext linqContext) {
+    private static Expression constructLinqMethodCalls(LinqContext linqContext) {
         Map.Entry<VariableExpression, Expression> fromEntry = linqContext.fromMap.entrySet().toList().get(0)
         VariableExpression aliasVariable = fromEntry.key
 
         Expression selectMethodReceiver = null
 
-        MethodCallExpression from = macro {
-            org.apache.groovy.linq.provider.QueryableCollection
-                    .from($v { fromEntry.value })
-        }
+        MethodCallExpression from = constructFromMethodCall(fromEntry)
 
         selectMethodReceiver = from
 
@@ -102,13 +102,21 @@ class LinqGroovyMethods {
         return select
     }
 
-    private static callXWithLambda(Expression receiver, String methodName, String closureParamName, Expression closureCode) {
+    @CompileDynamic
+    private static MethodCallExpression constructFromMethodCall(fromEntry) {
+        macro {
+            org.apache.groovy.linq.provider.QueryableCollection
+                    .from($v { fromEntry.value })
+        }
+    }
+
+    private static MethodCallExpression callXWithLambda(Expression receiver, String methodName, String lambdaParamName, Expression lambdaCode) {
         callX(
                 receiver,
                 methodName,
                 lambdaX(
-                        params(param(ClassHelper.DYNAMIC_TYPE, closureParamName)),
-                        stmt(closureCode)
+                        params(param(ClassHelper.DYNAMIC_TYPE, lambdaParamName)),
+                        stmt(lambdaCode)
                 )
         )
     }