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();