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 2025/06/22 08:58:52 UTC

(groovy) branch GROOVY-11703 created (now 2caf738fbf)

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

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


      at 2caf738fbf GROOVY-11703: GINQ module fails to compile due to forbidden access to SyntaxErrorReportable#this in `GinqAstWalker`

This branch includes the following new commits:

     new 2caf738fbf GROOVY-11703: GINQ module fails to compile due to forbidden access to SyntaxErrorReportable#this in `GinqAstWalker`

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(groovy) 01/01: GROOVY-11703: GINQ module fails to compile due to forbidden access to SyntaxErrorReportable#this in `GinqAstWalker`

Posted by su...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2caf738fbf524afeb1cd84c99e4e85430fef0e52
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Jun 22 17:58:33 2025 +0900

    GROOVY-11703: GINQ module fails to compile due to forbidden access to SyntaxErrorReportable#this in `GinqAstWalker`
---
 .../groovy/classgen/AsmClassGenerator.java         |  4 +-
 .../ginq/provider/collection/GinqAstWalker.groovy  | 64 +++++++++++-----------
 2 files changed, 35 insertions(+), 33 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index 3dfb93b596..6f6fdb06a3 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -1127,8 +1127,8 @@ public class AsmClassGenerator extends ClassGenerator {
         Expression objectExpression = pexp.getObjectExpression();
 
         ClassNode type = objectExpression.getType();
-        if (objectExpression instanceof ClassExpression && !type.isInterface()
-                && ("this".equals(propertyName) || "super".equals(propertyName))) {
+        if (objectExpression instanceof ClassExpression
+                && ("this".equals(propertyName) || ("super".equals(propertyName) && !type.isInterface()))) {
             // we have something like A.B.this and need to make it
             // into this.this$0.this$0, where this.this$0 produces
             // A.B and this.this$0.this$0 produces A.
diff --git a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/GinqAstWalker.groovy b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/GinqAstWalker.groovy
index 9417f939f0..4314d27bf0 100644
--- a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/GinqAstWalker.groovy
+++ b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/GinqAstWalker.groovy
@@ -18,6 +18,7 @@
  */
 package org.apache.groovy.ginq.provider.collection
 
+import groovy.transform.CompileStatic
 import org.apache.groovy.ginq.GinqGroovyMethods
 import org.apache.groovy.ginq.dsl.GinqAstBaseVisitor
 import org.apache.groovy.ginq.dsl.GinqAstBuilder
@@ -108,6 +109,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.varX
  *
  * @since 4.0.0
  */
+@CompileStatic
 class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable {
 
     GinqAstWalker(SourceUnit sourceUnit) {
@@ -129,12 +131,12 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
         DataSourceExpression resultDataSourceExpression
         MethodCallExpression resultMethodCallReceiver
 
-        FromExpression fromExpression = getCurrentGinqExpression().fromExpression
+        FromExpression fromExpression = currentGinqExpression.fromExpression
         resultDataSourceExpression = fromExpression
         MethodCallExpression fromMethodCallExpression = visitFromExpression(fromExpression)
         resultMethodCallReceiver = fromMethodCallExpression
 
-        for (JoinExpression joinExpression : getCurrentGinqExpression().joinExpressionList) {
+        for (JoinExpression joinExpression : currentGinqExpression.joinExpressionList) {
             joinExpression.putNodeMetaData(__METHOD_CALL_RECEIVER, resultMethodCallReceiver)
             joinExpression.dataSourceExpression = resultDataSourceExpression
 
@@ -142,7 +144,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
             resultMethodCallReceiver = visitJoinExpression(joinExpression)
         }
 
-        WhereExpression whereExpression = getCurrentGinqExpression().whereExpression
+        WhereExpression whereExpression = currentGinqExpression.whereExpression
         if (whereExpression) {
             whereExpression.dataSourceExpression = resultDataSourceExpression
             whereExpression.putNodeMetaData(__METHOD_CALL_RECEIVER, resultMethodCallReceiver)
@@ -151,7 +153,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
         }
 
         addDummyGroupExpressionIfNecessary()
-        GroupExpression groupExpression = getCurrentGinqExpression().groupExpression
+        GroupExpression groupExpression = currentGinqExpression.groupExpression
         if (groupExpression) {
             groupExpression.dataSourceExpression = resultDataSourceExpression
             groupExpression.putNodeMetaData(__METHOD_CALL_RECEIVER, resultMethodCallReceiver)
@@ -159,7 +161,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
             resultMethodCallReceiver = groupMethodCallExpression
         }
 
-        OrderExpression orderExpression = getCurrentGinqExpression().orderExpression
+        OrderExpression orderExpression = currentGinqExpression.orderExpression
         if (orderExpression) {
             orderExpression.dataSourceExpression = resultDataSourceExpression
             orderExpression.putNodeMetaData(__METHOD_CALL_RECEIVER, resultMethodCallReceiver)
@@ -167,7 +169,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
             resultMethodCallReceiver = orderMethodCallExpression
         }
 
-        LimitExpression limitExpression = getCurrentGinqExpression().limitExpression
+        LimitExpression limitExpression = currentGinqExpression.limitExpression
         if (limitExpression) {
             limitExpression.dataSourceExpression = resultDataSourceExpression
             limitExpression.putNodeMetaData(__METHOD_CALL_RECEIVER, resultMethodCallReceiver)
@@ -175,7 +177,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
             resultMethodCallReceiver = limitMethodCallExpression
         }
 
-        SelectExpression selectExpression = getCurrentGinqExpression().selectExpression
+        SelectExpression selectExpression = currentGinqExpression.selectExpression
         selectExpression.putNodeMetaData(__METHOD_CALL_RECEIVER, resultMethodCallReceiver)
         selectExpression.dataSourceExpression = resultDataSourceExpression
         MethodCallExpression selectMethodCallExpression = visitSelectExpression(selectExpression)
@@ -280,12 +282,12 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
     }
 
     private void addDummyGroupExpressionIfNecessary() {
-        if (getCurrentGinqExpression().groupExpression) {
+        if (currentGinqExpression.groupExpression) {
             return
         }
 
         boolean hasAggFunctionInSelect = false
-        SelectExpression selectExpression = getCurrentGinqExpression().selectExpression
+        SelectExpression selectExpression = currentGinqExpression.selectExpression
         selectExpression.projectionExpr.visit(new GinqAstBaseVisitor() {
             @Override
             void visitMethodCallExpression(MethodCallExpression call) {
@@ -306,7 +308,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
         })
 
         if (hasAggFunctionInSelect) {
-            getCurrentGinqExpression().groupExpression =
+            currentGinqExpression.groupExpression =
                     new GroupExpression(
                             new ArgumentListExpression(
                                     Collections.singletonList(
@@ -672,7 +674,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
 
     @Override
     MethodCallExpression visitSelectExpression(SelectExpression selectExpression) {
-        getCurrentGinqExpression().putNodeMetaData(__VISITING_SELECT, true)
+        currentGinqExpression.putNodeMetaData(__VISITING_SELECT, true)
         Expression selectMethodReceiver = selectExpression.getNodeMetaData(__METHOD_CALL_RECEIVER)
         DataSourceExpression dataSourceExpression = selectExpression.dataSourceExpression
         Expression projectionExpr = selectExpression.getProjectionExpr()
@@ -824,13 +826,13 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
 
         List<Expression> extra = []
         if (enableCount || rowNumberUsed) {
-            getCurrentGinqExpression().putNodeMetaData(__RN_USED, true)
+            currentGinqExpression.putNodeMetaData(__RN_USED, true)
             extra << callX(varX(rowNumberName), 'getAndIncrement')
         }
 
         def selectMethodCallExpression = callXWithLambda(selectMethodReceiver, "select", dataSourceExpression, parallel, lambdaCode, extra, param(dynamicType(), getWindowQueryableName()))
 
-        getCurrentGinqExpression().putNodeMetaData(__VISITING_SELECT, false)
+        currentGinqExpression.putNodeMetaData(__VISITING_SELECT, false)
 
         return selectMethodCallExpression
     }
@@ -977,11 +979,11 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
 
     private int windowQueryableNameSeq
     private String getWindowQueryableName() {
-        String name = (String) getCurrentGinqExpression().getNodeMetaData(__WINDOW_QUERYABLE_NAME)
+        String name = (String) currentGinqExpression.getNodeMetaData(__WINDOW_QUERYABLE_NAME)
 
         if (!name) {
             name = "${__WINDOW_QUERYABLE_NAME}${windowQueryableNameSeq++}"
-            getCurrentGinqExpression().putNodeMetaData(__WINDOW_QUERYABLE_NAME, name)
+            currentGinqExpression.putNodeMetaData(__WINDOW_QUERYABLE_NAME, name)
         }
 
         return name
@@ -1074,7 +1076,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
         }
 
         def nameListExpression = new ListExpression(nameExpressionList)
-        getCurrentGinqExpression().putNodeMetaData(metaDataKey, nameListExpression)
+        currentGinqExpression.putNodeMetaData(metaDataKey, nameListExpression)
 
         ConstructorCallExpression namedRecordCtorCallExpression =
                 ctorX(NAMED_RECORD_TYPE,
@@ -1088,11 +1090,11 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
 
     private int metaDataMapNameSeq
     private String getMetaDataMapName() {
-        String name = (String) getCurrentGinqExpression().getNodeMetaData(__META_DATA_MAP_NAME_PREFIX)
+        String name = (String) currentGinqExpression.getNodeMetaData(__META_DATA_MAP_NAME_PREFIX)
 
         if (!name) {
             name = "${__META_DATA_MAP_NAME_PREFIX}${metaDataMapNameSeq++}"
-            getCurrentGinqExpression().putNodeMetaData(__META_DATA_MAP_NAME_PREFIX, name)
+            currentGinqExpression.putNodeMetaData(__META_DATA_MAP_NAME_PREFIX, name)
         }
 
         return name
@@ -1100,11 +1102,11 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
 
     private int rowNumberNameSeq
     private String getRowNumberName() {
-        String name = (String) getCurrentGinqExpression().getNodeMetaData(__ROW_NUMBER_NAME_PREFIX)
+        String name = (String) currentGinqExpression.getNodeMetaData(__ROW_NUMBER_NAME_PREFIX)
 
         if (!name) {
             name = "${__ROW_NUMBER_NAME_PREFIX}${rowNumberNameSeq++}"
-            getCurrentGinqExpression().putNodeMetaData(__ROW_NUMBER_NAME_PREFIX, name)
+            currentGinqExpression.putNodeMetaData(__ROW_NUMBER_NAME_PREFIX, name)
         }
 
         return name
@@ -1112,11 +1114,11 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
 
     private int supplyAsyncLambdaParamNameSeq
     private String getSupplyAsyncLambdaParamName() {
-        String name = (String) getCurrentGinqExpression().getNodeMetaData(SUPPLY_ASYNC_LAMBDA_PARAM_NAME_PREFIX)
+        String name = (String) currentGinqExpression.getNodeMetaData(SUPPLY_ASYNC_LAMBDA_PARAM_NAME_PREFIX)
 
         if (!name) {
             name = "${SUPPLY_ASYNC_LAMBDA_PARAM_NAME_PREFIX}${supplyAsyncLambdaParamNameSeq++}"
-            getCurrentGinqExpression().putNodeMetaData(SUPPLY_ASYNC_LAMBDA_PARAM_NAME_PREFIX, name)
+            currentGinqExpression.putNodeMetaData(SUPPLY_ASYNC_LAMBDA_PARAM_NAME_PREFIX, name)
         }
 
         return name
@@ -1131,11 +1133,11 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
     }
 
     private ListExpression getSelectNameListExpression() {
-        (ListExpression) (getCurrentGinqExpression().getNodeMetaData(MD_SELECT_NAME_LIST) ?: [])
+        (ListExpression) (currentGinqExpression.getNodeMetaData(MD_SELECT_NAME_LIST) ?: [])
     }
 
     private ListExpression getGroupNameListExpression() {
-        (ListExpression) (getCurrentGinqExpression().getNodeMetaData(MD_GROUP_NAME_LIST) ?: [])
+        (ListExpression) (currentGinqExpression.getNodeMetaData(MD_GROUP_NAME_LIST) ?: [])
     }
 
     private List<String> getGroupNameList() {
@@ -1156,8 +1158,8 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
 
     private List<String> getDataSourceAliasList() {
         List<DataSourceExpression> dataSourceExpressionList = []
-        dataSourceExpressionList << getCurrentGinqExpression().fromExpression
-        dataSourceExpressionList.addAll(getCurrentGinqExpression().joinExpressionList)
+        dataSourceExpressionList << currentGinqExpression.fromExpression
+        dataSourceExpressionList.addAll(currentGinqExpression.joinExpressionList)
         dataSourceExpressionList.stream().map(e -> e.aliasExpr.text).collect(Collectors.toList())
     }
 
@@ -1496,19 +1498,19 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
     }
 
     private boolean isGroupByVisited() {
-        getCurrentGinqExpression().getNodeMetaData(__GROUPBY_VISITED)
+        return currentGinqExpression.getNodeMetaData(__GROUPBY_VISITED) ?: false
     }
 
     private boolean isVisitingSelect() {
-        getCurrentGinqExpression().getNodeMetaData(__VISITING_SELECT)
+        currentGinqExpression.getNodeMetaData(__VISITING_SELECT) ?: false
     }
 
     private boolean isVisitingWindowFunction() {
-        getCurrentGinqExpression().getNodeMetaData(__VISITING_WINDOW_FUNCTION)
+        currentGinqExpression.getNodeMetaData(__VISITING_WINDOW_FUNCTION) ?: false
     }
 
     private boolean isRowNumberUsed() {
-        getCurrentGinqExpression().getNodeMetaData(__RN_USED)
+        currentGinqExpression.getNodeMetaData(__RN_USED)  ?: false
     }
 
     private static MethodCallExpression callXWithLambda(Expression receiver, String methodName, LambdaExpression lambdaExpression) {
@@ -1523,7 +1525,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable
 
     final SourceUnit sourceUnit
 
-    private Map<String,String> configuration
+    private Map<String, String> configuration
     @Override
     Map<String, String> getConfiguration() {
         return configuration