Title: [1112] trunk/qdox/src/grammar: Using EnumBody and EnumConstant almost according to JLS, but just as strong
Revision
1112
Author
rfscholte
Date
2011-03-09 13:54:36 -0600 (Wed, 09 Mar 2011)

Log Message

Using EnumBody and EnumConstant almost according to JLS, but just as strong

Modified Paths

Added Paths

  • trunk/qdox/src/test/com/thoughtworks/qdox/parser/impl/

Diff

Modified: trunk/qdox/src/grammar/parser.y (1111 => 1112)

--- trunk/qdox/src/grammar/parser.y	2011-03-08 20:35:16 UTC (rev 1111)
+++ trunk/qdox/src/grammar/parser.y	2011-03-09 19:54:36 UTC (rev 1112)
@@ -144,10 +144,6 @@
                 
 // ----- JAVADOC
 
-javadoclist: 
-    javadoc |
-    javadoclist javadoc;
-
 javadoc: JAVADOCSTART javadocdescription javadoctags JAVADOCEND;
 
 javadocdescription: 
@@ -483,29 +479,38 @@
                  fieldType = new TypeDef($3, 0);
                } EnumBody;
 
-EnumBody: BRACEOPEN enum_body BRACECLOSE 
-        { builder.endClass();
-          fieldType = null;
-          modifiers.clear();
-        };
 
 ClassModifiers_opt: modifiers;
 
-enum_body: enum_values | enum_values SEMI ClassBodyDeclarations_opt;
+/* Specs say: EnumConstants_opt ,_opt EnumBodyDeclarations_opt
+   The optional COMMA causes trouble for the parser
+   For that reason the options of EnumConstants_opt, which will accept all cases 
+*/
+EnumBody: BRACEOPEN EnumConstants_opt EnumBodyDeclarations_opt BRACECLOSE 
+          { builder.endClass();
+            fieldType = null;
+            modifiers.clear();
+          };
 
-enum_values: | enum_value | enum_value COMMA enum_values;
+EnumConstants_opt:
+                 | EnumConstants_opt COMMA
+                 | EnumConstants_opt EnumConstant;
+                 
+EnumConstant: opt_annotations IDENTIFIER Arguments_opt ClassBody_opt
+              { 
+                makeField(new TypeDef($2, 0), ""); 
+              };
 
-enum_value:
-    javadoclist opt_annotations enum_constructor |
-    opt_annotations enum_constructor;
+         
+Arguments_opt:
+             | PARENBLOCK /* =Arguments */;
 
-enum_constructor:
-    IDENTIFIER { makeField(new TypeDef($1, 0), ""); } |
-    IDENTIFIER CODEBLOCK  { makeField(new TypeDef($1, 0), ""); } |
-    IDENTIFIER PARENBLOCK { makeField(new TypeDef($1, 0), ""); } |
-    IDENTIFIER PARENBLOCK CODEBLOCK { makeField(new TypeDef($1, 0), ""); };
+ClassBody_opt:
+             | CODEBLOCK /* =ClassBody */;
 
-
+EnumBodyDeclarations_opt:
+                        | SEMI ClassBodyDeclarations_opt;
+          
 // ----- CLASS
 
 // 8.1 Class Declaration
@@ -519,13 +524,13 @@
         builder.beginClass(cls); 
         cls = new ClassDef(); 
     }
-    ClassBody;
+    ClassBody
+    {
+      builder.endClass(); 
+    };    
 
 // 8.1.6 Class Body and Member Declarations
-ClassBody: BRACEOPEN ClassBodyDeclarations_opt BRACECLOSE 
-           {
-             builder.endClass(); 
-           };    
+ClassBody: BRACEOPEN ClassBodyDeclarations_opt BRACECLOSE; 
 
 // this is slighly different so we can get the correct linenumber
 ClassBodyDeclarations_opt:
@@ -707,7 +712,9 @@
                      };
                    | FormalParameter;
 
-opt_annotations: | opt_annotations annotation;
+opt_annotations: 
+               | opt_annotations annotation;
+               | opt_annotations javadoc;
 
 VariableModifiers_opt: 
                      | VariableModifiers_opt modifier;

Modified: trunk/qdox/src/test/com/thoughtworks/qdox/EnumsTest.java (1111 => 1112)

--- trunk/qdox/src/test/com/thoughtworks/qdox/EnumsTest.java	2011-03-08 20:35:16 UTC (rev 1111)
+++ trunk/qdox/src/test/com/thoughtworks/qdox/EnumsTest.java	2011-03-09 19:54:36 UTC (rev 1112)
@@ -11,14 +11,15 @@
     public void testAddEmptyEnumsToModel() {
         String source = ""
                 + "public enum Enum1 {}\n"
-                + "enum Enum2 {;}\n"; 
-                //+ "private enum Enum3 {,}"; @todo
+                + "enum Enum2 {;}\n"
+                + "private enum Enum3 {,}";
 
         JavaDocBuilder javaDocBuilder = new JavaDocBuilder();
         javaDocBuilder.addSource(new StringReader(source));
 
         assertTrue(javaDocBuilder.getClassByName("Enum1").isEnum());
         assertTrue(javaDocBuilder.getClassByName("Enum2").isEnum());
+        assertTrue(javaDocBuilder.getClassByName("Enum3").isEnum());
     }
 
     public void testAddSimpleEnumsToModel() {


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to