- Revision
- 634
- Author
- paul
- Date
- 2009-09-03 07:31:34 -0500 (Thu, 03 Sep 2009)
Log Message
QDOX-168 patch applied - after some test fixing
Modified Paths
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:
