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 2021/07/24 08:46:13 UTC

[groovy] branch master updated: Minor refactoring for switch-expression

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

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


The following commit(s) were added to refs/heads/master by this push:
     new d7bd362  Minor refactoring for switch-expression
d7bd362 is described below

commit d7bd362ebacc32c8878a9171f573c1791ad53fbf
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sat Jul 24 16:45:41 2021 +0800

    Minor refactoring for switch-expression
---
 .../java/org/apache/groovy/parser/antlr4/AstBuilder.java   | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 13b22bf..3e81754 100644
--- a/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -1145,7 +1145,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
         switchExpressionRuleContextStack.push(ctx);
         try {
             validateSwitchExpressionLabels(ctx);
-            final String variableName = "__$$sev" + switchExpressionVariableSeq++;
+            final String variableName = SWITCH_EXPRESSION_VARIABLE_NAME_PREFIX + switchExpressionVariableSeq++;
             List<Tuple3<List<Statement>, Boolean, Boolean>> statementInfoList =
                     ctx.switchBlockStatementExpressionGroup().stream()
                             .map(e -> {
@@ -1211,6 +1211,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
         }
     }
     private int switchExpressionVariableSeq;
+    private int switchExpressionCastedVariableSeq;
 
     @Override
     @SuppressWarnings("unchecked")
@@ -1318,14 +1319,17 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
                                 MethodCallExpression mce = expr.getNodeMetaData(SWITCH_EXPRESSION_DECONSTRUCTED);
                                 BlockStatement newCodeBlock = codeBlock;
                                 if (null != mce) {
-                                    String methodName = mce.getMethodAsString();
+                                    final String methodName = mce.getMethodAsString();
+                                    final String castedVariableName = SWITCH_EXPRESSION_CASTED_VARIABLE_NAME_PREFIX + switchExpressionCastedVariableSeq++;
+                                    Statement declarationCastStatement = declS(localVarX(castedVariableName), castX(ClassHelper.make(methodName), switchExpressionVar));
                                     List<Statement> declarationStatementList = ((TupleExpression) mce.getArguments()).getExpressions().stream().map(arg -> {
                                         String argName = arg.getText();
-                                        return declS(localVarX(argName), propX(castX(ClassHelper.make(methodName), switchExpressionVar), argName));
+                                        return declS(localVarX(argName), propX(varX(castedVariableName), argName));
                                     }).collect(Collectors.toList());
                                     newCodeBlock =
                                             createBlockStatement(
-                                                    Stream.concat(declarationStatementList.stream(), Stream.of(codeBlock))
+                                                    Stream.concat(Stream.of(declarationCastStatement),
+                                                            Stream.concat(declarationStatementList.stream(), Stream.of(codeBlock)))
                                                             .collect(Collectors.toList()));
                                 }
 
@@ -5086,4 +5090,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
     private static final String IS_YIELD_STATEMENT = "_IS_YIELD_STATEMENT";
     private static final String SWITCH_EXPRESSION_DECONSTRUCTED = "_SWITCH_EXPRESSION_DECONSTRUCTED";
     private static final String SWITCH_EXPRESSION_VARIABLE_NAME = "_SWITCH_EXPRESSION_VARIABLE_NAME";
+    private static final String SWITCH_EXPRESSION_VARIABLE_NAME_PREFIX = "__$$sev";
+    private static final String SWITCH_EXPRESSION_CASTED_VARIABLE_NAME_PREFIX = "__$$sevc";
 }