Minor refactoring: Remove duplicated code in `AstBuilder`

Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/885d8f7e
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/885d8f7e
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/885d8f7e

Branch: refs/heads/master
Commit: 885d8f7ece4c80bf08254431ac24ad14349140f5
Parents: 6bb02b1
Author: Daniel Sun <sun...@apache.org>
Authored: Sat Nov 24 22:24:25 2018 +0800
Committer: Daniel Sun <sun...@apache.org>
Committed: Sat Nov 24 22:24:25 2018 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/AstBuilder.java | 26 +++++++++++---------
 1 file changed, 14 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/885d8f7e/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 13a862e..5671afc 100644
--- 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -305,6 +305,7 @@ import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.SUB;
 import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.ShiftExprAltContext;
 import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.StandardLambdaExpressionContext;
 import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.StandardLambdaParametersContext;
+import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.StatementContext;
 import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.StatementsContext;
 import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.StringLiteralAltContext;
 import static 
org.apache.groovy.parser.antlr4.GroovyLangParser.StringLiteralContext;
@@ -743,21 +744,24 @@ public class AstBuilder extends 
GroovyParserBaseVisitor<Object> implements Groov
 
     @Override
     public WhileStatement visitWhileStmtAlt(WhileStmtAltContext ctx) {
-        Expression conditionExpression = 
this.visitExpressionInPar(ctx.expressionInPar());
-        BooleanExpression booleanExpression =
-                configureAST(
-                        new BooleanExpression(conditionExpression), 
conditionExpression);
-
-        Statement loopBlock = this.unpackStatement((Statement) 
this.visit(ctx.statement()));
+        Tuple2<BooleanExpression, Statement> conditionAndBlock = 
createLoopConditionExpressionAndBlock(ctx.expressionInPar(), ctx.statement());
 
         return configureAST(
-                new WhileStatement(booleanExpression, asBoolean(loopBlock) ? 
loopBlock : EmptyStatement.INSTANCE),
+                new WhileStatement(conditionAndBlock.getV1(), 
asBoolean(conditionAndBlock.getV2()) ? conditionAndBlock.getV2() : 
EmptyStatement.INSTANCE),
                 ctx);
     }
 
     @Override
     public DoWhileStatement visitDoWhileStmtAlt(DoWhileStmtAltContext ctx) {
-        Expression conditionExpression = 
this.visitExpressionInPar(ctx.expressionInPar());
+        Tuple2<BooleanExpression, Statement> conditionAndBlock = 
createLoopConditionExpressionAndBlock(ctx.expressionInPar(), ctx.statement());
+
+        return configureAST(
+                new DoWhileStatement(conditionAndBlock.getV1(), 
asBoolean(conditionAndBlock.getV2()) ? conditionAndBlock.getV2() : 
EmptyStatement.INSTANCE),
+                ctx);
+    }
+
+    private Tuple2<BooleanExpression, Statement> 
createLoopConditionExpressionAndBlock(ExpressionInParContext eipc, 
StatementContext sc) {
+        Expression conditionExpression = this.visitExpressionInPar(eipc);
 
         BooleanExpression booleanExpression =
                 configureAST(
@@ -765,11 +769,9 @@ public class AstBuilder extends 
GroovyParserBaseVisitor<Object> implements Groov
                         conditionExpression
                 );
 
-        Statement loopBlock = this.unpackStatement((Statement) 
this.visit(ctx.statement()));
+        Statement loopBlock = this.unpackStatement((Statement) this.visit(sc));
 
-        return configureAST(
-                new DoWhileStatement(booleanExpression, asBoolean(loopBlock) ? 
loopBlock : EmptyStatement.INSTANCE),
-                ctx);
+        return tuple(booleanExpression, loopBlock);
     }
 
     @Override

Reply via email to