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;

Reply via email to