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 642e02da6..258e5c473 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 @@ -114,10 +114,20 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar) if (!grammar.ShouldImport (ImportJavadoc.ReturnTag)) { return; } - var r = new XElement ("returns", + // When encountering multiple @return keys in a line, append subsequent @return key content to the original element. + var jdi = FinishParse (context, parseNode); + if (jdi.Returns.Count == 0) { + var r = new XElement ("returns", AstNodeToXmlContent (parseNode.ChildNodes [1])); - FinishParse (context, parseNode).Returns.Add (r); - parseNode.AstNode = r; + FinishParse (context, parseNode).Returns.Add (r); + parseNode.AstNode = r; + } else { + var r = jdi.Returns.First () as XElement; + if (r != null) { + r.Add (" ", AstNodeToXmlContent (parseNode.ChildNodes [1])); + parseNode.AstNode = r; + } + } }; SeeDeclaration.Rule = "@see" + BlockValues; diff --git a/tests/Java.Interop.Tools.JavaSource-Tests/SourceJavadocToXmldocParserTests.cs b/tests/Java.Interop.Tools.JavaSource-Tests/SourceJavadocToXmldocParserTests.cs index a5cf7ddcc..0f88478ac 100644 --- a/tests/Java.Interop.Tools.JavaSource-Tests/SourceJavadocToXmldocParserTests.cs +++ b/tests/Java.Interop.Tools.JavaSource-Tests/SourceJavadocToXmldocParserTests.cs @@ -17,21 +17,19 @@ namespace Java.Interop.Tools.JavaSource.Tests [TestFixture] public class SourceJavadocToXmldocParserTests : SourceJavadocToXmldocGrammarFixture { - [Test] - public void TryParse () + [Test, TestCaseSource (nameof (TryParse_Success))] + public void TryParse (ParseResult parseResult) { - foreach (var values in TryParse_Success) { - ParseTree parseTree; - var p = new SourceJavadocToXmldocParser (XmldocStyle.Full); - var n = p.TryParse (values.Javadoc, null, out parseTree); - Assert.IsFalse (parseTree.HasErrors (), DumpMessages (parseTree, p)); - Assert.AreEqual (values.FullXml, GetMemberXml (n), $"while parsing input: ```{values.Javadoc}```"); + ParseTree parseTree; + var p = new SourceJavadocToXmldocParser (XmldocStyle.Full); + var n = p.TryParse (parseResult.Javadoc, null, out parseTree); + Assert.IsFalse (parseTree.HasErrors (), DumpMessages (parseTree, p)); + Assert.AreEqual (parseResult.FullXml, GetMemberXml (n), $"while parsing input: ```{parseResult.Javadoc}```"); - p = new SourceJavadocToXmldocParser (XmldocStyle.IntelliSense); - n = p.TryParse (values.Javadoc, null, out parseTree); - Assert.IsFalse (parseTree.HasErrors (), DumpMessages (parseTree, p)); - Assert.AreEqual (values.IntelliSenseXml, GetMemberXml (n), $"while parsing input: ```{values.Javadoc}```"); - } + p = new SourceJavadocToXmldocParser (XmldocStyle.IntelliSense); + n = p.TryParse (parseResult.Javadoc, null, out parseTree); + Assert.IsFalse (parseTree.HasErrors (), DumpMessages (parseTree, p)); + Assert.AreEqual (parseResult.IntelliSenseXml, GetMemberXml (n), $"while parsing input: ```{parseResult.Javadoc}```"); } static string GetMemberXml (IEnumerable members) @@ -40,7 +38,7 @@ static string GetMemberXml (IEnumerable members) return e.ToString (); } - static readonly ParseResult[] TryParse_Success = new ParseResult[]{ + public static readonly ParseResult[] TryParse_Success = new ParseResult[]{ new ParseResult { Javadoc = "Summary.\n\nP2.\n\n

Hello!

", FullXml = @" @@ -78,6 +76,17 @@ static string GetMemberXml (IEnumerable members) true if something or other; otherwise false. +", + }, + new ParseResult { + Javadoc = "@return {@code true} if something else @return {@code false}.", + FullXml = @" + + true if something else false. +", + IntelliSenseXml = @" + + true if something else false. ", }, new ParseResult { @@ -166,7 +175,7 @@ more description here. }, }; - class ParseResult { + public class ParseResult { public string Javadoc; public string FullXml; public string IntelliSenseXml;