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 2016/12/16 16:31:11 UTC

groovy git commit: Minor refactoring

Repository: groovy
Updated Branches:
  refs/heads/parrot ee67bddd3 -> e689436b3


Minor refactoring


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

Branch: refs/heads/parrot
Commit: e689436b3f74b9108e73d64dba4a297380c83c17
Parents: ee67bdd
Author: Daniel Sun <su...@apache.org>
Authored: Sat Dec 17 00:30:41 2016 +0800
Committer: Daniel Sun <su...@apache.org>
Committed: Sat Dec 17 00:30:41 2016 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/GroovyParser.g4 |  7 +++++-
 .../apache/groovy/parser/antlr4/AstBuilder.java | 25 ++++++++++++++++----
 2 files changed, 26 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/e689436b/subprojects/groovy-antlr4-grammar/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-antlr4-grammar/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-antlr4-grammar/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index ad95fef..dec2f3f 100644
--- a/subprojects/groovy-antlr4-grammar/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-antlr4-grammar/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -514,7 +514,12 @@ annotationsOpt
     ;
 
 annotation
-    :   AT annotationName ( LPAREN ( elementValuePairs | elementValue )? rparen )?
+    :   AT annotationName ( LPAREN elementValues? rparen )?
+    ;
+
+elementValues
+    :   elementValuePairs
+    |   elementValue
     ;
 
 annotationName : qualifiedClassName ;

http://git-wip-us.apache.org/repos/asf/groovy/blob/e689436b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index b046f98..3f78bbf 100644
--- a/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-antlr4-grammar/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -343,6 +343,7 @@ import static org.apache.groovy.parser.antlr4.GroovyLangParser.VariableModifiers
 import static org.apache.groovy.parser.antlr4.GroovyLangParser.VariableModifiersOptContext;
 import static org.apache.groovy.parser.antlr4.GroovyLangParser.VariableNamesContext;
 import static org.apache.groovy.parser.antlr4.GroovyLangParser.WhileStmtAltContext;
+import static org.apache.groovy.parser.antlr4.GroovyParser.ElementValuesContext;
 import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
 import static org.codehaus.groovy.runtime.DefaultGroovyMethods.last;
 
@@ -3581,20 +3582,34 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
     @Override
     public AnnotationNode visitAnnotation(AnnotationContext ctx) {
         String annotationName = this.visitAnnotationName(ctx.annotationName());
-
         AnnotationNode annotationNode = new AnnotationNode(ClassHelper.make(annotationName));
+        List<Pair<String, Expression>> annotationElementValues = this.visitElementValues(ctx.elementValues());
+
+        annotationElementValues.forEach(e -> annotationNode.addMember(e.getKey(), e.getValue()));
+
+        return this.configureAST(annotationNode, ctx);
+    }
+
+    @Override
+    public List<Pair<String, Expression>> visitElementValues(ElementValuesContext ctx) {
+        if (!asBoolean(ctx)) {
+            return Collections.emptyList();
+        }
+
+        List<Pair<String, Expression>> annotationElementValues = new LinkedList<>();
 
         if (asBoolean(ctx.elementValuePairs())) {
-            this.visitElementValuePairs(ctx.elementValuePairs()).entrySet().stream().forEach(e -> {
-                annotationNode.addMember(e.getKey(), e.getValue());
+            this.visitElementValuePairs(ctx.elementValuePairs()).entrySet().forEach(e -> {
+                annotationElementValues.add(new Pair<>(e.getKey(), e.getValue()));
             });
         } else if (asBoolean(ctx.elementValue())) {
-            annotationNode.addMember(VALUE_STR, this.visitElementValue(ctx.elementValue()));
+            annotationElementValues.add(new Pair<>(VALUE_STR, this.visitElementValue(ctx.elementValue())));
         }
 
-        return this.configureAST(annotationNode, ctx);
+        return annotationElementValues;
     }
 
+
     @Override
     public String visitAnnotationName(AnnotationNameContext ctx) {
         return this.visitQualifiedClassName(ctx.qualifiedClassName()).getName();