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 <[email protected]>
Authored: Sat Dec 17 00:30:41 2016 +0800
Committer: Daniel Sun <[email protected]>
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();

Reply via email to