Refine the runtime Groovydoc
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/7eab98eb Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/7eab98eb Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/7eab98eb Branch: refs/heads/master Commit: 7eab98eb9f22a3aa6985b9528dc61c63144b86f0 Parents: 0169177 Author: sunlan <[email protected]> Authored: Mon Apr 10 15:34:57 2017 +0800 Committer: sunlan <[email protected]> Committed: Mon Apr 10 15:34:57 2017 +0800 ---------------------------------------------------------------------- .../apache/groovy/parser/antlr4/GroovyParser.g4 | 18 +++++----- .../groovy/parser/antlr4/GroovydocManager.java | 35 ++++++++------------ 2 files changed, 23 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/7eab98eb/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 ---------------------------------------------------------------------- diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 index a328054..992b63f 100644 --- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 +++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 @@ -841,8 +841,8 @@ expression right=expression #shiftExprAlt // boolean relational expressions (level 7) - | left=expression nls op=(AS | INSTANCEOF | NOT_INSTANCEOF) nls type #relationalExprAlt - | left=expression nls op=(LE | GE | GT | LT | IN | NOT_IN) nls right=expression #relationalExprAlt + | left=expression nls op=(AS | INSTANCEOF | NOT_INSTANCEOF) nls type #relationalExprAlt + | left=expression nls op=(LE | GE | GT | LT | IN | NOT_IN) nls right=expression #relationalExprAlt // equality/inequality (==/!=) (level 8) | left=expression nls @@ -857,22 +857,22 @@ expression // regex find and match (=~ and ==~) (level 8.5) // jez: moved =~ closer to precedence of == etc, as... // 'if (foo =~ "a.c")' is very close in intent to 'if (foo == "abc")' - | left=expression nls op=(REGEX_FIND | REGEX_MATCH) nls right=expression #regexExprAlt + | left=expression nls op=(REGEX_FIND | REGEX_MATCH) nls right=expression #regexExprAlt // bitwise or non-short-circuiting and (&) (level 9) - | left=expression nls op=BITAND nls right=expression #andExprAlt + | left=expression nls op=BITAND nls right=expression #andExprAlt // exclusive or (^) (level 10) - | left=expression nls op=XOR nls right=expression #exclusiveOrExprAlt + | left=expression nls op=XOR nls right=expression #exclusiveOrExprAlt // bitwise or non-short-circuiting or (|) (level 11) - | left=expression nls op=BITOR nls right=expression #inclusiveOrExprAlt + | left=expression nls op=BITOR nls right=expression #inclusiveOrExprAlt // logical and (&&) (level 12) - | left=expression nls op=AND nls right=expression #logicalAndExprAlt + | left=expression nls op=AND nls right=expression #logicalAndExprAlt // logical or (||) (level 13) - | left=expression nls op=OR nls right=expression #logicalOrExprAlt + | left=expression nls op=OR nls right=expression #logicalOrExprAlt // conditional test (level 14) | <assoc=right> con=expression nls @@ -883,7 +883,7 @@ expression // assignment expression (level 15) // "(a) = [1]" is a special case of multipleAssignmentExprAlt, it will be handle by assignmentExprAlt - | <assoc=right> left=variableNames nls op=ASSIGN nls right=statementExpression #multipleAssignmentExprAlt + | <assoc=right> left=variableNames nls op=ASSIGN nls right=statementExpression #multipleAssignmentExprAlt | <assoc=right> left=expression nls op=( ASSIGN | ADD_ASSIGN http://git-wip-us.apache.org/repos/asf/groovy/blob/7eab98eb/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java ---------------------------------------------------------------------- diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java index 12d08c9..092d73b 100644 --- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java +++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java @@ -28,7 +28,7 @@ public class GroovydocManager { private static final String TRUE_STR = "true"; private static final boolean EXTRACTING_DOC_COMMENT_ENABLED; public static final String VALUE = "value"; - public static final String GROOVYDOC_PATTERN = "(?s)\\s*/[*][*]\\s+(\\s+[*]\\s*)*@Groovydoc.+?[*]/\\s*"; + public static final String RUNTIME_GROOVYDOC_PATTERN = "(?s)/[*][*]\\s+(\\s+[*]\\s*)*@Groovydoc\\b.+?[*]/"; private AstBuilder astBuilder; static { @@ -55,41 +55,35 @@ public class GroovydocManager { return; } - attachDocCommentAsMetaData(node, ctx); - attachGroovydocAnnotation(node, ctx); + String docCommentNodeText = this.findDocCommentByNode(ctx); + if (null == docCommentNodeText) { + return; + } + + attachDocCommentAsMetaData(node, docCommentNodeText); + attachGroovydocAnnotation(node, docCommentNodeText); } /* * Attach doc comment to member node as meta data */ - private void attachDocCommentAsMetaData(ASTNode node, GroovyParser.GroovyParserRuleContext ctx) { + private void attachDocCommentAsMetaData(ASTNode node, String docCommentNodeText) { if (!EXTRACTING_DOC_COMMENT_ENABLED) { return; } - String docCommentNodeText = this.findDocCommentByNode(ctx); - - if (!asBoolean((Object) docCommentNodeText)) { - return; - } - node.putNodeMetaData(DOC_COMMENT, docCommentNodeText); } - private void attachGroovydocAnnotation(ASTNode node, GroovyParser.GroovyParserRuleContext ctx) { + /* + * Attach Groovydoc annotation to the target element + */ + private void attachGroovydocAnnotation(ASTNode node, String docCommentNodeText) { if (!(node instanceof AnnotatedNode)) { return; } - String docCommentNodeText; - - if (EXTRACTING_DOC_COMMENT_ENABLED) { // try to reuse the result of extracting doc comment for better performance - docCommentNodeText = node.getNodeMetaData(DOC_COMMENT); - } else { - docCommentNodeText = this.findDocCommentByNode(ctx); - } - - if (null == docCommentNodeText || !docCommentNodeText.matches(GROOVYDOC_PATTERN)) { + if (!docCommentNodeText.matches(RUNTIME_GROOVYDOC_PATTERN)) { return; } @@ -99,7 +93,6 @@ public class GroovydocManager { annotatedNode.addAnnotation(annotationNode); } - private String findDocCommentByNode(ParserRuleContext node) { if (!asBoolean(node)) { return null;
