Title: [634] trunk/qdox: QDOX-168 patch applied - after some test fixing

Diff

Modified: trunk/qdox/pom.xml (633 => 634)

--- trunk/qdox/pom.xml	2009-08-17 09:54:22 UTC (rev 633)
+++ trunk/qdox/pom.xml	2009-09-03 12:31:34 UTC (rev 634)
@@ -196,6 +196,7 @@
            <lexDefinitions>
              <lexFile>${basedir}/src/grammar/lexer.flex</lexFile>
            </lexDefinitions>
+           <skeleton>${basedir}/src/grammar/skeleton.inner</skeleton>
          </configuration>
       </plugin>
       <plugin>

Modified: trunk/qdox/src/grammar/lexer.flex (633 => 634)

--- trunk/qdox/src/grammar/lexer.flex	2009-08-17 09:54:22 UTC (rev 633)
+++ trunk/qdox/src/grammar/lexer.flex	2009-09-03 12:31:34 UTC (rev 634)
@@ -88,8 +88,9 @@
 UnicodeChar = \\u[a-fA-F0-9]{4}						  
 Id						= ([:jletter:]|{UnicodeChar}) ([:jletterdigit:]|{UnicodeChar})*
 Annotation = "@" {WhiteSpace}* {Id} ("."{Id})* {WhiteSpace}*
+JavadocEnd  = "*"+ "/"
 
-%state JAVADOC 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
 
 %%
 
@@ -182,9 +183,9 @@
         return Parser.BRACECLOSE; 
     }
 
-    "/*" "*"+           { 
-        pushState(JAVADOC); 
-        javaDocNewLine = true; 
+    "/**" ~"*/" {
+        pushState(JAVADOC);
+        yypushStream(new java.io.StringReader(text().substring(2))); 
         return Parser.JAVADOCSTART;
     }
 
@@ -237,22 +238,24 @@
           }
 }
 <JAVADOC> {
-    "*"+ "/"            { popState(); return Parser.JAVADOCEND; }
-    ^ [ \t]* "*"+ / [^/*] { /* ignore */ }
-    {Eol}               { javaDocNewLine = true; return Parser.JAVADOCEOL; }
-    {CommentChar}* "*"+ / [ \t\r\n] {
-        return Parser.JAVADOCTOKEN;
-    }
-    {CommentChar}+ { 
-        int token = Parser.JAVADOCTOKEN;
-        if (javaDocNewLine && yycharat(0) == '@') {
-                token = Parser.JAVADOCTAG;
-        }
-        javaDocNewLine = false;
-        return token;
-    }
+    "@"               { yypushback(1); pushState(JAVADOCTAG); }
+    [^ \t...@]		  { yypushback(1); pushState(JAVADOCLINE); }
+    "*"+ [ \t]* / "@" { pushState(JAVADOCTAG); }
+    "*"+ [ \t]?       { pushState(JAVADOCLINE); }
+    {JavadocEnd}      { popState(); yypopStream(); return Parser.JAVADOCEND; }
 }
+<JAVADOCLINE> {
+  ~{Eol}                           { popState(); return Parser.JAVADOCLINE; }
+  .* [^ \t*] / [ \t]* {JavadocEnd} { popState(); return Parser.JAVADOCLINE;}
+  {JavadocEnd}                     { popState(); popState(); yypopStream(); return Parser.JAVADOCEND; }
+}
 
+<JAVADOCTAG> {
+  "@" [^ \t\n\r]+  { return Parser.JAVADOCTAG; }
+  [ \t]+           { popState();pushState(JAVADOCLINE);}
+  {Eol}            { popState();return Parser.JAVADOCLINE;}
+}
+
 <CODEBLOCK> {
      "{"  { 
             if(codeblockDepth++ > 0 ) {

Modified: trunk/qdox/src/grammar/parser.y (633 => 634)

--- trunk/qdox/src/grammar/parser.y	2009-08-17 09:54:22 UTC (rev 633)
+++ trunk/qdox/src/grammar/parser.y	2009-09-03 12:31:34 UTC (rev 634)
@@ -25,7 +25,7 @@
 %token BYTE SHORT INT LONG CHAR FLOAT DOUBLE BOOLEAN
 
 // strongly typed tokens/types
-%token <sval> IDENTIFIER JAVADOCTAG JAVADOCTOKEN
+%token <sval> IDENTIFIER JAVADOCTAG JAVADOCLINE
 %token <sval> BOOLEAN_LITERAL
 %token <sval> INTEGER_LITERAL
 %token <sval> LONG_LITERAL
@@ -78,12 +78,9 @@
 javadoctokens: | javadoctokens javadoctoken;
 
 javadoctoken: 
-    JAVADOCTOKEN {
+    JAVADOCLINE {
         appendToBuffer($1);
-    } |
-    JAVADOCEOL {
-        textBuffer.append('\n');
-    };
+    } 
 
 javadoctags: | javadoctags javadoctag;
 

Modified: trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java (633 => 634)

--- trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java	2009-08-17 09:54:22 UTC (rev 633)
+++ trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java	2009-09-03 12:31:34 UTC (rev 634)
@@ -652,8 +652,8 @@
         builder.addSource(new StringReader(source));
         JavaClass x = builder.getClassByName("x");
         DocletTag tag = x.getTagByName("bar.baz");
-        assertEquals("foo=\"this is\\\nmultilined\"", tag.getValue());
-        assertEquals("this is\nmultilined", tag.getNamedParameter("foo"));
+        assertEquals("foo=\"this is\\\n      multilined\"", tag.getValue());
+        assertEquals("this is\n      multilined", tag.getNamedParameter("foo"));
     }
 
     public void testJiraQdox19() {
@@ -1024,6 +1024,26 @@
         JavaMethod javaMethod = javaClass.getMethods()[0];
         assertEquals("\"test blah blah\"", javaMethod.getAnnotations()[0].getNamedParameter("description").toString());
     }
+    
+    //for qdox-146
+    public void testWhitespaceCanBeRetainedInJavadoc() {
+        String sourceCode = ""
+                + "package com.acme.thing;\n"
+                + "\n"
+                + "/**\n"
+                + " * This class does something.\n"
+                + " *     chalala\n"
+                + " *         cha  **  lala\n"
+                + " **/\n"
+                + "public class AClassName {\n"
+                + "}";
+        JavaDocBuilder builder = new JavaDocBuilder();
+        builder.addSource(new StringReader(sourceCode));
+        JavaClass aClass = builder.getClassByName("com.acme.thing.AClassName");
+        assertEquals("This class does something.\n"
+                + "    chalala\n"
+                + "        cha  **  lala", aClass.getComment());
+    }
 
     //for qdox-152
     public void testExtendedClass() throws Exception {
@@ -1098,4 +1118,25 @@
     	assertNotNull(javaClass.getAnnotations()[0].getNamedParameter("cascade"));
     } 
     
+    /**
+     * According to sun specs: Starting with Javadoc 1.4, the leading asterisks are optional
+     * @throws Exception
+     */
+    public void testJavadocWithoutStartingAsterisks() throws Exception {
+    	String source = "    /**\n" + 
+    			"     Some text\n" +
+    			"more text\n" +
+    			"\t and even more\n" +
+    			"     \n" + 
+    			"     @throws Exception\n" +
+    			"@deprecated" + 
+    			"     */\n" + 
+    			"public class Foo{}";
+    	JavaSource javaSource = builder.addSource(new StringReader(source));
+    	JavaClass javaClass = javaSource.getClasses()[0];
+    	assertEquals("Some text\nmore text\nand even more", javaClass.getComment());
+    	assertEquals("throws", javaClass.getTags()[0].getName());
+    	assertEquals("Exception", javaClass.getTags()[0].getValue());
+    	assertEquals("deprecated", javaClass.getTags()[1].getName());
+    }
 }

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

--- trunk/qdox/src/test/com/thoughtworks/qdox/parser/LexerTest.java	2009-08-17 09:54:22 UTC (rev 633)
+++ trunk/qdox/src/test/com/thoughtworks/qdox/parser/LexerTest.java	2009-09-03 12:31:34 UTC (rev 634)
@@ -313,22 +313,18 @@
         Lexer lexer = new JFlexLexer(new StringReader(in));
         assertLex(Parser.JAVADOCSTART, lexer);
 
-        assertLex(Parser.JAVADOCEOL, lexer);
+        assertLex(Parser.JAVADOCLINE, "\n",lexer);
         assertLex(Parser.JAVADOCTAG, "@hello", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "world", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
+        assertLex(Parser.JAVADOCLINE, "world\n", lexer);
 
         assertLex(Parser.JAVADOCTAG, "@a", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "b", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "c", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "d", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
+        assertLex(Parser.JAVADOCLINE, "b c d\n", lexer);
 
         assertLex(Parser.JAVADOCTAG, "@bye", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
+        assertLex(Parser.JAVADOCLINE, "\n",lexer);
 
         assertLex(Parser.JAVADOCTAG, "@bye:bye", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
+        assertLex(Parser.JAVADOCLINE, "\n",lexer);
 
         assertLex(Parser.JAVADOCEND, lexer);
         assertLex(0, lexer);
@@ -340,7 +336,7 @@
         assertLex(Parser.JAVADOCSTART, lexer);
 
         assertLex(Parser.JAVADOCTAG, "@hello", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "world", lexer);
+        assertLex(Parser.JAVADOCLINE, "world", lexer);
 
         assertLex(Parser.JAVADOCEND, lexer);
         assertLex(0, lexer);
@@ -352,12 +348,24 @@
         assertLex(Parser.JAVADOCSTART, lexer);
         
         assertLex(Parser.JAVADOCTAG, "@foo", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "bar", lexer);
+        assertLex(Parser.JAVADOCLINE, "bar", lexer);
         
         assertLex(Parser.JAVADOCEND, lexer);
         assertLex(0, lexer);
     }
 
+    public void testDeepJavadocTag() throws Exception {
+        String in = "  /** *  *** * @m x \n" +
+        		"*/";
+        Lexer lexer = new JFlexLexer(new StringReader(in));
+        assertLex(Parser.JAVADOCSTART, lexer);
+        
+        assertLex(Parser.JAVADOCLINE, "*  *** * @m x \n", lexer);
+        
+        assertLex(Parser.JAVADOCEND, lexer);
+        assertLex(0, lexer); 
+    }
+
     public void testDocCommentContainingAtSymbols() throws Exception {
         String in = ""
             + "/**\n"
@@ -369,19 +377,11 @@
         Lexer lexer = new JFlexLexer(new StringReader(in));
         assertLex(Parser.JAVADOCSTART, lexer);
 
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "[email protected]", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "{...@link", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "here}.", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "me", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "@home", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "geeks", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "@", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "play", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
+        assertLex(Parser.JAVADOCLINE, "\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "[email protected]\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "{...@link here}.\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "me @home\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "geeks @ play\n", lexer);
 
         assertLex(Parser.JAVADOCEND, lexer);
         assertLex(0, lexer);
@@ -397,16 +397,10 @@
         Lexer lexer = new JFlexLexer(new StringReader(in));
         assertLex(Parser.JAVADOCSTART, lexer);
 
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "5", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "*", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "4", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "SELECT", lexer);
-        assertLex(Parser.JAVADOCTOKEN, "COUNT(*)", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "**stars**everywhere**", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
+        assertLex(Parser.JAVADOCLINE, "\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "5 * 4\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "SELECT COUNT(*)\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "**stars**everywhere** \n", lexer);
 
         assertLex(Parser.JAVADOCEND, lexer);
         assertLex(0, lexer);
@@ -419,9 +413,8 @@
                 + " *****/";
         Lexer lexer = new JFlexLexer(new StringReader(in));
         assertLex(Parser.JAVADOCSTART, lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "blah", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
+        assertLex(Parser.JAVADOCLINE, "\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "blah\n", lexer);
         assertLex(Parser.JAVADOCEND, lexer);
         assertLex(0, lexer);
     }
@@ -431,7 +424,7 @@
                 + "/***blah***/public";
         Lexer lexer = new JFlexLexer(new StringReader(in));
         assertLex(Parser.JAVADOCSTART, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "blah", lexer);
+        assertLex(Parser.JAVADOCLINE, "blah", lexer);
         assertLex(Parser.JAVADOCEND, lexer);
         assertLex(Parser.PUBLIC, lexer);
         assertLex(0, lexer);
@@ -449,16 +442,12 @@
         Lexer lexer = new JFlexLexer(new StringReader(in));
         assertLex(Parser.JAVADOCSTART, lexer);
         
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "simple", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "indented", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "nospace", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCTOKEN, "multistar", lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
-        assertLex(Parser.JAVADOCEOL, lexer);
+        assertLex(Parser.JAVADOCLINE, "\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "simple\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "indented\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "nospace\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "multistar\n", lexer);
+        assertLex(Parser.JAVADOCLINE, "\n", lexer);
         
         assertLex(Parser.JAVADOCEND, lexer);
         assertLex(0, lexer);

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

--- trunk/qdox/src/test/com/thoughtworks/qdox/parser/ParserTest.java	2009-08-17 09:54:22 UTC (rev 633)
+++ trunk/qdox/src/test/com/thoughtworks/qdox/parser/ParserTest.java	2009-09-03 12:31:34 UTC (rev 634)
@@ -171,9 +171,7 @@
 
         // setup values
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "This");
-        setupLex(Parser.JAVADOCTOKEN, "is");
-        setupLex(Parser.JAVADOCTOKEN, "great!");
+        setupLex(Parser.JAVADOCLINE, "This is great!");
         setupLex(Parser.JAVADOCEND);
         setupLex(0);
 
@@ -194,8 +192,7 @@
         // setup values
         setupLex(Parser.JAVADOCSTART);
         setupLex(Parser.JAVADOCTAG, "@This");
-        setupLex(Parser.JAVADOCTOKEN, "is");
-        setupLex(Parser.JAVADOCTOKEN, "great!");
+        setupLex(Parser.JAVADOCLINE, "is great!");
         setupLex(Parser.JAVADOCEND);
         setupLex(0);
 
@@ -236,9 +233,7 @@
         // setup values
         setupLex(Parser.JAVADOCSTART);
         setupLex(Parser.JAVADOCTAG, "@This");
-        setupLex(Parser.JAVADOCTOKEN, "is");
-        setupLex(Parser.JAVADOCTOKEN, "great!");
-        setupLex(Parser.JAVADOCTOKEN, "Mmmkay.");
+        setupLex(Parser.JAVADOCLINE, "is great! Mmmkay.");
         setupLex(Parser.JAVADOCEND);
         setupLex(0);
 
@@ -262,10 +257,9 @@
         // setup values
         setupLex(Parser.JAVADOCSTART);
         setupLex(Parser.JAVADOCTAG, "@This");
-        setupLex(Parser.JAVADOCTOKEN, "is");
-        setupLex(Parser.JAVADOCTOKEN, "great!");
+        setupLex(Parser.JAVADOCLINE, "is great!");
         setupLex(Parser.JAVADOCTAG, "@mock");
-        setupLex(Parser.JAVADOCTOKEN, "generate");
+        setupLex(Parser.JAVADOCLINE, "generate");
         setupLex(Parser.JAVADOCEND);
         setupLex(0);
 
@@ -287,16 +281,11 @@
 
         // setup values
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "Welcome!");
-        setupLex(Parser.JAVADOCTOKEN, "Here");
-        setupLex(Parser.JAVADOCTOKEN, "is");
-        setupLex(Parser.JAVADOCTOKEN, "my");
-        setupLex(Parser.JAVADOCTOKEN, "class.");
+        setupLex(Parser.JAVADOCLINE, "Welcome! Here is my class.");
         setupLex(Parser.JAVADOCTAG, "@This");
-        setupLex(Parser.JAVADOCTOKEN, "is");
-        setupLex(Parser.JAVADOCTOKEN, "great!");
+        setupLex(Parser.JAVADOCLINE, "is great!");
         setupLex(Parser.JAVADOCTAG, "@mock");
-        setupLex(Parser.JAVADOCTOKEN, "generate");
+        setupLex(Parser.JAVADOCLINE, "generate");
         setupLex(Parser.JAVADOCEND);
         setupLex(0);
 
@@ -789,11 +778,11 @@
 
         // setup values
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "javadoc1");
+        setupLex(Parser.JAVADOCLINE, "javadoc1");
         setupLex(Parser.JAVADOCEND);
 
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "javadoc2");
+        setupLex(Parser.JAVADOCLINE, "javadoc2");
         setupLex(Parser.JAVADOCEND);
 
         setupLex(Parser.PACKAGE);
@@ -801,11 +790,11 @@
         setupLex(Parser.SEMI);
 
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "javadoc3");
+        setupLex(Parser.JAVADOCLINE, "javadoc3");
         setupLex(Parser.JAVADOCEND);
 
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "javadoc4");
+        setupLex(Parser.JAVADOCLINE, "javadoc4");
         setupLex(Parser.JAVADOCEND);
 
         setupLex(Parser.IMPORT);
@@ -815,11 +804,11 @@
         setupLex(Parser.SEMI);
 
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "javadoc5");
+        setupLex(Parser.JAVADOCLINE, "javadoc5");
         setupLex(Parser.JAVADOCEND);
 
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "javadoc6");
+        setupLex(Parser.JAVADOCLINE, "javadoc6");
         setupLex(Parser.JAVADOCEND);
 
         setupLex(Parser.IMPORT);
@@ -829,11 +818,11 @@
         setupLex(Parser.SEMI);
 
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "javadoc7");
+        setupLex(Parser.JAVADOCLINE, "javadoc7");
         setupLex(Parser.JAVADOCEND);
 
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "javadoc8");
+        setupLex(Parser.JAVADOCLINE, "javadoc8");
         setupLex(Parser.JAVADOCEND);
 
         setupLex(Parser.PUBLIC);
@@ -843,11 +832,11 @@
         setupLex(Parser.BRACECLOSE);
 
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "javadoc9");
+        setupLex(Parser.JAVADOCLINE, "javadoc9");
         setupLex(Parser.JAVADOCEND);
 
         setupLex(Parser.JAVADOCSTART);
-        setupLex(Parser.JAVADOCTOKEN, "javadoc10");
+        setupLex(Parser.JAVADOCLINE, "javadoc10");
         setupLex(Parser.JAVADOCEND);
 
         setupLex(0);


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to