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 <[email protected]> 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) ) ) }
