diff --git a/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocGrammar.BlockTagsBnfTerms.cs b/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocGrammar.BlockTagsBnfTerms.cs
index ea43046e8..54a0d1be0 100644
--- a/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocGrammar.BlockTagsBnfTerms.cs
+++ b/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocGrammar.BlockTagsBnfTerms.cs
@@ -25,6 +25,8 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
| DeprecatedDeclaration
| DeprecatedSinceDeclaration
| ExceptionDeclaration
+ | InheritDocDeclaration
+ | HideDeclaration
| ParamDeclaration
| ReturnDeclaration
| SeeDeclaration
@@ -78,7 +80,7 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
parseNode.AstNode = p;
};
- var nonSpaceTerm = new RegexBasedTerminal ("[^ ]", "[^ ]+") {
+ var nonSpaceTerm = new RegexBasedTerminal ("[^ \n\r\t]", "[^ \n\r\t]+") {
AstConfig = new AstNodeConfig {
NodeCreator = (context, parseNode) => parseNode.AstNode = parseNode.Token.Value,
},
@@ -99,19 +101,42 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
FinishParse (context, parseNode);
};
- ParamDeclaration.Rule = "@param" + nonSpaceTerm + BlockValues;
+ // Ignore @hide tags
+ HideDeclaration.Rule = "@hide";
+ HideDeclaration.AstConfig.NodeCreator = (context, parseNode) => {
+ FinishParse (context, parseNode);
+ };
+
+ InheritDocDeclaration.Rule = "@inheritDoc";
+ InheritDocDeclaration.AstConfig.NodeCreator = (context, parseNode) => {
+ if (!grammar.ShouldImport (ImportJavadoc.InheritDocTag)) {
+ return;
+ }
+ // TODO: Iterate through parents for corresponding javadoc element.
+ FinishParse (context, parseNode);
+ };
+
+ ParamDeclaration.Rule = "@param" + nonSpaceTerm
+ | "@param" + nonSpaceTerm + BlockValues
+ ;
ParamDeclaration.AstConfig.NodeCreator = (context, parseNode) => {
if (!grammar.ShouldImport (ImportJavadoc.ParamTag)) {
return;
}
- var p = new XElement ("param",
- new XAttribute ("name", string.Join ("", AstNodeToXmlContent (parseNode.ChildNodes [1]))),
- AstNodeToXmlContent (parseNode.ChildNodes [2]));
+ var paramName = string.Join ("", AstNodeToXmlContent (parseNode.ChildNodes [1]));
+ var p = new XElement ("param", new XAttribute ("name", paramName));
+ if (parseNode.ChildNodes.Count >= 3) {
+ p.Add (AstNodeToXmlContent (parseNode.ChildNodes [2]));
+ } else {
+ p.Add (paramName);
+ }
FinishParse (context, parseNode).Parameters.Add (p);
parseNode.AstNode = p;
};
- ReturnDeclaration.Rule = "@return" + BlockValues;
+ ReturnDeclaration.Rule = "@return"
+ | "@return" + BlockValues
+ ;
ReturnDeclaration.AstConfig.NodeCreator = (context, parseNode) => {
if (!grammar.ShouldImport (ImportJavadoc.ReturnTag)) {
return;
@@ -158,7 +183,9 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
parseNode.AstNode = p;
};
- ThrowsDeclaration.Rule = "@throws" + nonSpaceTerm + BlockValues;
+ ThrowsDeclaration.Rule = "@throws" + nonSpaceTerm
+ | "@throws" + nonSpaceTerm + BlockValues
+ ;
ThrowsDeclaration.AstConfig.NodeCreator = (context, parseNode) => {
if (!grammar.ShouldImport (ImportJavadoc.ExceptionTag)) {
return;
@@ -205,7 +232,9 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
parseNode.AstNode = parseNode.Token.Value.ToString ();
- UnknownTagDeclaration.Rule = unknownTagTerminal + BlockValues;
+ UnknownTagDeclaration.Rule = unknownTagTerminal
+ | unknownTagTerminal + BlockValues
+ ;
UnknownTagDeclaration.AstConfig.NodeCreator = (context, parseNode) => {
if (!grammar.ShouldImport (ImportJavadoc.Remarks)) {
return;
@@ -242,6 +271,8 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
public readonly NonTerminal DeprecatedDeclaration = new NonTerminal (nameof (DeprecatedDeclaration));
public readonly NonTerminal DeprecatedSinceDeclaration = new NonTerminal (nameof (DeprecatedSinceDeclaration));
public readonly NonTerminal ExceptionDeclaration = new NonTerminal (nameof (ExceptionDeclaration));
+ public readonly NonTerminal HideDeclaration = new NonTerminal (nameof (HideDeclaration));
+ public readonly NonTerminal InheritDocDeclaration = new NonTerminal (nameof (InheritDocDeclaration));
public readonly NonTerminal ParamDeclaration = new NonTerminal (nameof (ParamDeclaration));
public readonly NonTerminal ReturnDeclaration = new NonTerminal (nameof (ReturnDeclaration));
public readonly NonTerminal SeeDeclaration = new NonTerminal (nameof (SeeDeclaration));
diff --git a/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocGrammar.InlineTagsBnfTerms.cs b/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocGrammar.InlineTagsBnfTerms.cs
index 9815661ab..3685ea7b6 100644
--- a/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocGrammar.InlineTagsBnfTerms.cs
+++ b/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocGrammar.InlineTagsBnfTerms.cs
@@ -26,6 +26,7 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
| LinkDeclaration
| LinkplainDeclaration
| LiteralDeclaration
+ | SeeDeclaration
| ValueDeclaration
;
@@ -75,6 +76,14 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
parseNode.AstNode = new XText (content);
};
+ SeeDeclaration.Rule = grammar.ToTerm ("{@see") + InlineValue + "}";
+ SeeDeclaration.AstConfig.NodeCreator = (context, parseNode) => {
+ // TODO: @see supports multiple forms; see: https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#see
+ // Also need to convert to appropriate CREF value, ignore for now
+ var target = parseNode.ChildNodes [1].AstNode;
+ parseNode.AstNode = new XElement ("c", target);
+ };
+
ValueDeclaration.Rule = grammar.ToTerm ("{@value}")
| grammar.ToTerm ("{@value") + InlineValue + "}";
ValueDeclaration.AstConfig.NodeCreator = (context, parseNode) => {
@@ -114,10 +123,12 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
public readonly NonTerminal LinkplainDeclaration = new NonTerminal (nameof (LinkplainDeclaration));
// https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#literal
- public readonly NonTerminal LiteralDeclaration = new NonTerminal (nameof (LinkplainDeclaration));
+ public readonly NonTerminal LiteralDeclaration = new NonTerminal (nameof (LiteralDeclaration));
+
+ public readonly NonTerminal SeeDeclaration = new NonTerminal (nameof (SeeDeclaration));
// https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#value
- public readonly NonTerminal ValueDeclaration = new NonTerminal (nameof (ValueDeclaration));
+ public readonly NonTerminal ValueDeclaration = new NonTerminal (nameof (ValueDeclaration));
}
}
}
diff --git a/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocParser.cs b/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocParser.cs
index 4f29894cb..af671967d 100644
--- a/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocParser.cs
+++ b/src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocParser.cs
@@ -26,6 +26,7 @@ internal enum ImportJavadoc {
SinceTag = 1 << 9,
VersionTag = 1 << 10,
ExtraRemarks = 1 << 11,
+ InheritDocTag = 1 << 12,
}
[Flags]
@@ -43,6 +44,7 @@ public enum XmldocStyle {
| ImportJavadoc.SinceTag
| ImportJavadoc.VersionTag
| ImportJavadoc.ExtraRemarks
+ | ImportJavadoc.InheritDocTag
,
IntelliSense = ImportJavadoc.Summary
| ImportJavadoc.ExceptionTag
diff --git a/tests/Java.Interop.Tools.JavaSource-Tests/SourceJavadocToXmldocGrammar.BlockTagsBnfTermsTests.cs b/tests/Java.Interop.Tools.JavaSource-Tests/SourceJavadocToXmldocGrammar.BlockTagsBnfTermsTests.cs
index c695de2be..323fd8b34 100644
--- a/tests/Java.Interop.Tools.JavaSource-Tests/SourceJavadocToXmldocGrammar.BlockTagsBnfTermsTests.cs
+++ b/tests/Java.Interop.Tools.JavaSource-Tests/SourceJavadocToXmldocGrammar.BlockTagsBnfTermsTests.cs
@@ -56,14 +56,39 @@ public void ExceptionDeclaration ()
//Assert.AreEqual ("
What about hard paragraphs?
@param a something
+@param b
+@param c
@see #method()
@apiSince 1
",
FullXml = @"