diff --git a/modello-plugins/modello-plugin-xdoc/pom.xml b/modello-plugins/modello-plugin-xdoc/pom.xml
index ae951d7fd..a6ff61b48 100644
--- a/modello-plugins/modello-plugin-xdoc/pom.xml
+++ b/modello-plugins/modello-plugin-xdoc/pom.xml
@@ -30,6 +30,11 @@
jsoup
1.17.2
+
+ com.github.chhorz
+ javadoc-parser
+ 0.3.1
+
org.xmlunit
xmlunit-core
diff --git a/modello-plugins/modello-plugin-xdoc/src/main/java/org/codehaus/modello/plugin/xdoc/XdocGenerator.java b/modello-plugins/modello-plugin-xdoc/src/main/java/org/codehaus/modello/plugin/xdoc/XdocGenerator.java
index 467094ac6..8cfa03ce3 100644
--- a/modello-plugins/modello-plugin-xdoc/src/main/java/org/codehaus/modello/plugin/xdoc/XdocGenerator.java
+++ b/modello-plugins/modello-plugin-xdoc/src/main/java/org/codehaus/modello/plugin/xdoc/XdocGenerator.java
@@ -28,14 +28,14 @@
import java.io.File;
import java.io.IOException;
import java.io.Writer;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Stack;
-
+import java.util.*;
+import java.util.stream.Collectors;
+
+import com.github.chhorz.javadoc.JavaDoc;
+import com.github.chhorz.javadoc.JavaDocParserBuilder;
+import com.github.chhorz.javadoc.OutputType;
+import com.github.chhorz.javadoc.tags.BlockTag;
+import com.github.chhorz.javadoc.tags.SinceTag;
import org.codehaus.modello.ModelloException;
import org.codehaus.modello.ModelloParameterConstants;
import org.codehaus.modello.ModelloRuntimeException;
@@ -688,8 +688,24 @@ private static void writeMarkupElement(XMLWriter w, String name, String markup)
* @return valid XML string
*/
private static String rewrite(String text) {
- Document document = Jsoup.parseBodyFragment(text);
+ JavaDoc javaDoc = JavaDocParserBuilder.withStandardJavadocTags()
+ .withOutputType(OutputType.HTML)
+ .build()
+ .parse(text);
+ String html = javaDoc.getDescription()
+ + javaDoc.getTags().stream()
+ .map(XdocGenerator::renderJavaDocTag)
+ .filter(Objects::nonNull)
+ .collect(Collectors.joining("\n", "\n", ""));
+ Document document = Jsoup.parseBodyFragment(html);
document.outputSettings().syntax(Document.OutputSettings.Syntax.xml);
return document.body().html();
}
+
+ private static String renderJavaDocTag(BlockTag tag) {
+ if (tag instanceof SinceTag) {
+ return "Since: " + ((SinceTag) tag).getSinceText() + "
";
+ }
+ return null;
+ }
}
diff --git a/modello-plugins/modello-plugin-xdoc/src/test/java/org/codehaus/modello/plugin/xdoc/XdocGeneratorTest.java b/modello-plugins/modello-plugin-xdoc/src/test/java/org/codehaus/modello/plugin/xdoc/XdocGeneratorTest.java
index 278e1921c..d740643f7 100644
--- a/modello-plugins/modello-plugin-xdoc/src/test/java/org/codehaus/modello/plugin/xdoc/XdocGeneratorTest.java
+++ b/modello-plugins/modello-plugin-xdoc/src/test/java/org/codehaus/modello/plugin/xdoc/XdocGeneratorTest.java
@@ -23,6 +23,7 @@
*/
import java.io.File;
+import java.nio.file.Files;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
@@ -77,7 +78,10 @@ public void testHtmlToXml() throws Exception {
.withTest(Input.fromFile(new File(getOutputDirectory(), "html4.xml")))
.build();
- assertFalse(diff.toString(), diff.hasDifferences());
+ assertFalse(
+ diff.toString() + "\nGenerated output:\n"
+ + new String(Files.readAllBytes(new File(getOutputDirectory(), "html4.xml").toPath())),
+ diff.hasDifferences());
}
private void checkMavenXdocGenerator() throws Exception {
diff --git a/modello-plugins/modello-plugin-xdoc/src/test/resources/html4.expected.xml b/modello-plugins/modello-plugin-xdoc/src/test/resources/html4.expected.xml
index 721c68f75..494ba1d4d 100644
--- a/modello-plugins/modello-plugin-xdoc/src/test/resources/html4.expected.xml
+++ b/modello-plugins/modello-plugin-xdoc/src/test/resources/html4.expected.xml
@@ -17,8 +17,12 @@
- This is a description in HTML4
-
NOTE: HTML linebreak should be converted to selfclosing XML-tag
+ Whether this proxy configuration is the active one. Note: While the type of this field is String for technical reasons, the semantic type is actually boolean.
+
+ This is a description in HTML4
+
NOTE: HTML linebreak should be converted to selfclosing XML-tag
+
+
Since: Maven 3
| Element |
diff --git a/modello-plugins/modello-plugin-xdoc/src/test/resources/html4.mdo b/modello-plugins/modello-plugin-xdoc/src/test/resources/html4.mdo
index 769cc6f41..cb85dc092 100644
--- a/modello-plugins/modello-plugin-xdoc/src/test/resources/html4.mdo
+++ b/modello-plugins/modello-plugin-xdoc/src/test/resources/html4.mdo
@@ -16,8 +16,11 @@
This is a comment
This is a description in HTML4
- NOTE: HTML linebreak should be converted to selfclosing XML-tag
+ NOTE: HTML linebreak should be converted to selfclosing XML-tag
+ @since Maven 3
]]>
Model