You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@(JavaSourceJar) can be is a way to extract parameter name information from Javadoc files, and use that parameter name information within a .jar binding.
With the introduction of JDK 11 support #4567, @(JavaSourceJar) support is unfortunately broken, in part because JDK 11's javadoc utility emits different HTML, which isn't currently supported.
Activity
jonpryor commentedon Jun 9, 2020
In-progress (and incomplete) xamarin-android patch to fix
javadoc-to-mdoc.exe:jonpryor commentedon Jun 9, 2020
In-progress (and incomplete) changes to Java.Interop allow reading of JDK11 Javadoc:
commit 280b9ce7f399f50aea1499fa37b40f482356c93c Author: Jonathan Pryor <jonpryor@vt.edu> Date: Thu May 28 18:54:40 2020 -0400 Javadoc 11 support? diff --git a/external/xamarin-android-tools b/external/xamarin-android-tools index 23c4fe0..f5fcb9f 160000 --- a/external/xamarin-android-tools +++ b/external/xamarin-android-tools @@ -1 +1 @@ -Subproject commit 23c4fe0a989f8d0887786fdee6db635387597c13 +Subproject commit f5fcb9fd1583ebe928734e8525303a0dbe93c79c diff --git a/src/Xamarin.Android.Tools.Bytecode/ClassPath.cs b/src/Xamarin.Android.Tools.Bytecode/ClassPath.cs index 62adb9a..5909c4a 100644 --- a/src/Xamarin.Android.Tools.Bytecode/ClassPath.cs +++ b/src/Xamarin.Android.Tools.Bytecode/ClassPath.cs @@ -19,6 +19,8 @@ namespace Xamarin.Android.Tools.Bytecode { Java8, _ApiXml, JavaApiParameterNamesXml, + Java, + Java11, } public class ClassPath { @@ -247,9 +249,11 @@ namespace Xamarin.Android.Tools.Bytecode { switch (JavaMethodParameterNameProvider.GetDocletType (src)) { default: return new DroidDoc2Scraper (src); case JavaDocletType.DroidDoc: return new DroidDocScraper (src); - case JavaDocletType.Java6: return new JavaDocScraper (src); + case JavaDocletType.Java: return new JavaDocScraper (src); + case JavaDocletType.Java6: return new Java6DocScraper (src); case JavaDocletType.Java7: return new Java7DocScraper (src); case JavaDocletType.Java8: return new Java8DocScraper (src); + case JavaDocletType.Java11: return new Java11DocScraper (src); case JavaDocletType._ApiXml: return new ApiXmlDocScraper (src); case JavaDocletType.JavaApiParameterNamesXml: return new JavaParameterNamesLoader (src); } diff --git a/src/Xamarin.Android.Tools.Bytecode/JavaDocumentScraper.cs b/src/Xamarin.Android.Tools.Bytecode/JavaDocumentScraper.cs index 3adb738..a52e164 100644 --- a/src/Xamarin.Android.Tools.Bytecode/JavaDocumentScraper.cs +++ b/src/Xamarin.Android.Tools.Bytecode/JavaDocumentScraper.cs @@ -83,13 +83,13 @@ namespace Xamarin.Android.Tools.Bytecode } } - class JavaDocScraper : AndroidDocScraper + class Java6DocScraper : AndroidDocScraper { const String pattern_head_javadoc = "<TD><CODE><B><A HREF=\"[./]*"; // I'm not sure how path could be specified... (./ , ../ , or even /) const String reset_pattern_head_javadoc = "<TD><CODE>"; const String parameter_pair_splitter_javadoc = " "; - public JavaDocScraper (string dir) + public Java6DocScraper (string dir) : base (dir, pattern_head_javadoc, reset_pattern_head_javadoc, parameter_pair_splitter_javadoc, false) { } @@ -129,6 +129,35 @@ namespace Xamarin.Android.Tools.Bytecode } } + class Java11DocScraper : AndroidDocScraper + { + const String pattern_head_javadoc = "<td class=\"col.+\" scope=\"row\"><code><span class=\"memberNameLink\"><a href=\"[./]*"; + const String reset_pattern_head_javadoc = "<td><code>"; + const String parameter_pair_splitter_javadoc = " "; + + public Java11DocScraper (string dir) + : base (dir, pattern_head_javadoc, reset_pattern_head_javadoc, parameter_pair_splitter_javadoc, true, "\\-", "\\-", "\\-", null) + { + ShouldAlterArraySpec = true; + ShouldEliminateGenericArguments = true; + } + + protected override string StripTagsFromParameters (string value) + { + // Java8 javadoc contains possibly linked types with <a> tags, so remove all of them. + while (value.IndexOf ('<') >= 0 && value.IndexOf ('>') > value.IndexOf ('<')) + value = value.Substring (0, value.IndexOf ('<')) + value.Substring (value.IndexOf ('>') + 1); + return value; + } + } + + class JavaDocScraper : Java11DocScraper { + public JavaDocScraper (string dir) + : base (dir) + { + } + } + public abstract class AndroidDocScraper : IJavaMethodParameterNameProvider { readonly String pattern_head; @@ -163,8 +192,14 @@ namespace Xamarin.Android.Tools.Bytecode throw new Exception ("Directory '" + dir + "' does not exist"); root = dir; + + var packageFiles = new[]{ + Path.Combine (dir, "package-list"), + Path.Combine (dir, "packages.html"), + Path.Combine (dir, "allpackages-index.html"), + }; - if (!File.Exists (Path.Combine (dir, "package-list")) && !File.Exists (Path.Combine (dir, "packages.html"))) + if (!packageFiles.Any (File.Exists)) throw new ArgumentException ("Directory '" + dir + "' does not appear to be an android doc reference directory."); //foreach (var f in Directory.GetFiles (dir, "*.html", SearchOption.AllDirectories)) @@ -319,6 +354,10 @@ namespace Xamarin.Android.Tools.Bytecode kind = JavaDocletType.Java7; else if (rawHTML.Contains ("Generated by javadoc (1.8")) kind = JavaDocletType.Java8; + else if (rawHTML.Contains ("Generated by javadoc (11.")) + kind = JavaDocletType.Java11; + else if (rawHTML.Contains ("Generated by javadoc ")) + kind = JavaDocletType.Java; } // Check to see if it's an api.xml formatted doc[ci] Preliminary JDK11 Support (#4567)
[ci] Preliminary JDK11 Support (#4567)
jonpryor commentedon Aug 3, 2020
Better solution: dotnet/java-interop#687.
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11
[generator] Add `generator --with-javadoc-xml=FILE` support. (#687)
[Mono.Android] Generate Mono.Android.xml; @(JavaSourceJar) on JDK11 (#…