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