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";
}