Title: [1469] trunk/qdox/src: Parse EnumConstant arguments

Diff

Modified: trunk/qdox/src/grammar/lexer.flex (1468 => 1469)


--- trunk/qdox/src/grammar/lexer.flex	2011-12-28 23:13:35 UTC (rev 1468)
+++ trunk/qdox/src/grammar/lexer.flex	2011-12-29 13:36:41 UTC (rev 1469)
@@ -139,7 +139,7 @@
 Annotation                      = "@" {WhiteSpace}* {Id} ("."{Id})* {WhiteSpace}*
 JavadocEnd                      = "*"+ "/"
 
-%state JAVADOC JAVADOCTAG JAVADOCLINE CODEBLOCK PARENBLOCK ASSIGNMENT STRING CHAR SINGLELINECOMMENT MULTILINECOMMENT ANNOTATION ANNOSTRING ANNOCHAR ENUM
+%state JAVADOC JAVADOCTAG JAVADOCLINE CODEBLOCK PARENBLOCK ASSIGNMENT STRING CHAR SINGLELINECOMMENT MULTILINECOMMENT ANNOTATION ANNOSTRING ANNOCHAR ENUM ARGUMENTS
 
 %%
 
@@ -294,10 +294,11 @@
               parenMode = -1;
               return Parser.PARENOPEN;
             }
-            else if(enumConstantMode) {
-                parenDepth = classDepth;
-                pushState(PARENBLOCK);
-                return Parser.PARENBLOCK;
+            else if(enumConstantMode) 
+            {  
+              annotationDepth = nestingDepth;
+              pushState(ARGUMENTS);
+              return Parser.PARENOPEN;
             }
             else {
                 return Parser.PARENOPEN;
@@ -322,7 +323,7 @@
     }
 }
 
-<ANNOTATION> {
+<ANNOTATION,ARGUMENTS> {
 	"("                 { ++ nestingDepth; return Parser.PARENOPEN; }
     ")"                 { if( nestingDepth-- == annotationDepth) { popState(); } return Parser.PARENCLOSE; }
 
@@ -493,7 +494,7 @@
     \'                  { if (appendingToCodeBody) { codeBody.append('\''); } pushState(CHAR); }
 }
 
-<ASSIGNMENT, YYINITIAL, CODEBLOCK, PARENBLOCK, ENUM, ANNOTATION> {
+<ASSIGNMENT, YYINITIAL, CODEBLOCK, PARENBLOCK, ENUM, ANNOTATION, ARGUMENTS> {
   "//"                { if (appendingToCodeBody) { codeBody.append("//"); } pushState(SINGLELINECOMMENT); }
   "/*"                { if (appendingToCodeBody) { codeBody.append("/*"); } pushState(MULTILINECOMMENT); }
   "/**/"              { if (appendingToCodeBody) { codeBody.append("/**/"); } }

Modified: trunk/qdox/src/grammar/parser.y (1468 => 1469)


--- trunk/qdox/src/grammar/parser.y	2011-12-28 23:13:35 UTC (rev 1468)
+++ trunk/qdox/src/grammar/parser.y	2011-12-29 13:36:41 UTC (rev 1469)
@@ -623,13 +623,15 @@
             modifiers.clear();
           };
 
+// 8.9 Enums Constants
+/* See EnumBody for this slightly different code */
 EnumConstants_opt:
                  | EnumConstants_opt COMMA
                  | EnumConstants_opt EnumConstant;
                  
 EnumConstant: Annotations_opt IDENTIFIER Arguments_opt
               { 
-                makeField( new TypeDef($2, 0), "", true ); 
+                makeField( new TypeDef($2, 0), "", true );
                 builder.beginField( fd );
               }
               ClassBody_opt
@@ -639,7 +641,7 @@
               };
          
 Arguments_opt:
-             | PARENBLOCK /* =Arguments */;
+             | PARENOPEN ArgumentList_opt PARENCLOSE; //PARENBLOCK
 
 ClassBody_opt:
              | ClassBody;
@@ -710,11 +712,19 @@
     
 ElementValue: ConditionalExpression 
             | Annotation 
-            | ElementValueArrayInitializer ;
+            | ElementValueArrayInitializer;
 
+// 15.9 Class Instance Creation Expressions
+ArgumentList_opt:
+                | ArgumentList;
+
+ArgumentList: _expression_
+            | ArgumentList COMMA _expression_;
+
+
 // 15.14 Postfix Expressions
 PostfixExpression: /* ExpressionName | PostIncrementExpression | PostDecrementExpression | */
-                   primary ;
+                   primary;
 
 // 15.15 Unary Operators
 UnaryExpression: /* PreIncrementExpression | PreDecrementExpression | */

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


--- trunk/qdox/src/test/java/com/thoughtworks/qdox/EnumsTest.java	2011-12-28 23:13:35 UTC (rev 1468)
+++ trunk/qdox/src/test/java/com/thoughtworks/qdox/EnumsTest.java	2011-12-29 13:36:41 UTC (rev 1469)
@@ -120,6 +120,8 @@
                 + "}";
 
         JavaProjectBuilder javaDocBuilder = new JavaProjectBuilder();
+        javaDocBuilder.setDebugLexer( true );
+        javaDocBuilder.setDebugParser( true );
         javaDocBuilder.addSource(new StringReader(source));
 
         assertTrue(javaDocBuilder.getClassByName("AccountType").isEnum());

Modified: trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/LexerTest.java (1468 => 1469)


--- trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/LexerTest.java	2011-12-28 23:13:35 UTC (rev 1468)
+++ trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/LexerTest.java	2011-12-29 13:36:41 UTC (rev 1469)
@@ -471,7 +471,10 @@
         assertLex(Parser.IDENTIFIER, "Foo", lexer);
         assertLex(Parser.BRACEOPEN, lexer);
         assertLex(Parser.IDENTIFIER, "a", lexer);
-        assertLex(Parser.PARENBLOCK, lexer);
+        assertLex(Parser.PARENOPEN, lexer);
+        assertLex(Parser.STRING_LITERAL, "\"", lexer);
+        assertEquals( "\"hello\"", lexer.getCodeBody() );
+        assertLex(Parser.PARENCLOSE, lexer);
         assertLex(Parser.SEMI, lexer);
         assertLex(Parser.IDENTIFIER, "int", lexer);
         assertLex(Parser.IDENTIFIER, "someField", lexer);
@@ -614,7 +617,10 @@
     	assertEquals( "\"text\"", lexer.getCodeBody() );
     	assertLex(Parser.PARENCLOSE, lexer);
     	assertLex(Parser.IDENTIFIER, "VALUE", lexer);
-    	assertLex(Parser.PARENBLOCK, lexer);
+        assertLex(Parser.PARENOPEN, lexer);
+        assertLex(Parser.STRING_LITERAL, lexer);
+        assertEquals( "\"value\"", lexer.getCodeBody() );
+        assertLex(Parser.PARENCLOSE, lexer);
     	assertLex(Parser.SEMI, lexer);
     }
 }

Modified: trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java (1468 => 1469)


--- trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java	2011-12-28 23:13:35 UTC (rev 1468)
+++ trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java	2011-12-29 13:36:41 UTC (rev 1469)
@@ -2606,7 +2606,8 @@
         setupLex(Parser.BRACEOPEN);
 
         setupLex(Parser.IDENTIFIER, "a");
-        setupLex(Parser.PARENBLOCK);
+        setupLex(Parser.PARENOPEN);
+        setupLex(Parser.PARENCLOSE);
         setupLex(Parser.SEMI);
 
         setupLex(Parser.IDENTIFIER, "int");
@@ -2696,8 +2697,9 @@
         setupLex(Parser.BRACEOPEN);
 
         setupLex(Parser.IDENTIFIER, "A");
-        setupLex(Parser.PARENBLOCK);
-
+        setupLex(Parser.PARENOPEN);
+        setupLex(Parser.PARENCLOSE);
+        
         setupLex(Parser.BRACEOPEN);
         
         setupLex(Parser.AT);

To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to