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 2bc382fa669dc119c30d615efefc9f6de2a7c391 Author: Daniel Sun <[email protected]> AuthorDate: Mon Jun 23 01:31:20 2025 +0900 GROOVY-11703: Fails to compile due to forbidden access to `this` of interface --- .../groovy/classgen/AsmClassGenerator.java | 4 +- .../ginq/provider/collection/GinqAstWalker.groovy | 65 +++++++++++----------- 2 files changed, 35 insertions(+), 34 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..4175370541 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) } private boolean isVisitingSelect() { - getCurrentGinqExpression().getNodeMetaData(__VISITING_SELECT) + currentGinqExpression.getNodeMetaData(__VISITING_SELECT) } private boolean isVisitingWindowFunction() { - getCurrentGinqExpression().getNodeMetaData(__VISITING_WINDOW_FUNCTION) + currentGinqExpression.getNodeMetaData(__VISITING_WINDOW_FUNCTION) } private boolean isRowNumberUsed() { - getCurrentGinqExpression().getNodeMetaData(__RN_USED) + currentGinqExpression.getNodeMetaData(__RN_USED) } 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 @@ -1534,7 +1536,6 @@ class GinqAstWalker implements GinqAstVisitor<Expression>, SyntaxErrorReportable } private final Deque<GinqExpression> ginqExpressionStack = new ArrayDeque<>() - private final Deque<String> visitingAggregateFunctionStack = new ArrayDeque<>() private static final ClassNode MAPS_TYPE = makeWithoutCaching(Maps.class)
