diff --git a/Documentation/guides/building-apps/build-items.md b/Documentation/guides/building-apps/build-items.md index 3905cd51c7f..1c88b2f99bd 100644 --- a/Documentation/guides/building-apps/build-items.md +++ b/Documentation/guides/building-apps/build-items.md @@ -370,6 +370,11 @@ Starting in Xamarin.Android 11.3, the following MSBuild metadata is supported: online documentation. Only one style is currently supported: `developer.android.com/reference@2020-Nov`. +Starting in Xamarin.Android 12.3, the following MSBuild metadata is supported: + +* `%(DocRootUrl)`: A URL prefix to use in place of all {@docroot} + instances in the imported documentation. + ## LibraryProjectZip diff --git a/external/Java.Interop b/external/Java.Interop index d3f0c5c6f63..32635fd67bf 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit d3f0c5c6f634380b6156c98f57e98463adf0de52 +Subproject commit 32635fd67bfc74fbb7d0370d1bc75bd13c838b61 diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets index fbd10e37b7e..115043cdeca 100644 --- a/src/Mono.Android/Mono.Android.targets +++ b/src/Mono.Android/Mono.Android.targets @@ -78,6 +78,8 @@ <_Doclink Include="https://developer.android.com/reference" /> <_Doclink Include="--doc-url-style" /> <_Doclink Include="developer.android.com/reference@2020-Nov" /> + <_Doclink Include="--doc-root-url" /> + <_Doclink Include="https://developer.android.com/" /> <_AndroidSources Include="$(_AndroidStableSrcDir)\android\**\*.java" /> diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets index eaed2e525c5..de37de3657f 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets @@ -79,6 +79,7 @@ This file is only used by binding projects. JavadocCopyrightFile="%(_JavaSourceJavadocXml.CopyrightFile)" JavadocUrlPrefix="%(_JavaSourceJavadocXml.UrlPrefix)" JavadocUrlStyle="%(_JavaSourceJavadocXml.UrlStyle)" + JavadocDocRootUrl="%(_JavaSourceJavadocXml.DocRootUrl)" JavaMaximumHeapSize="$(JavaMaximumHeapSize)" JavaOptions="$(JavaOptions)" JavaSdkDirectory="$(_JavaSdkDirectory)" diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/JavaSourceUtils.cs b/src/Xamarin.Android.Build.Tasks/Tasks/JavaSourceUtils.cs index d22ba15b1e2..55dc41f9616 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/JavaSourceUtils.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/JavaSourceUtils.cs @@ -31,6 +31,7 @@ public class JavaSourceUtils : AndroidToolTask public ITaskItem JavadocCopyrightFile { get; set; } public string JavadocUrlPrefix { get; set; } public string JavadocUrlStyle { get; set; } + public string JavadocDocRootUrl { get; set; } public string JavaOptions { get; set; } @@ -139,11 +140,15 @@ string CreateResponseFile () } if (!string.IsNullOrEmpty (JavadocUrlPrefix)) { AppendArg (response, "--doc-url-prefix"); - AppendArg (response, Path.GetFullPath (JavadocUrlPrefix)); + AppendArg (response, JavadocUrlPrefix); } if (!string.IsNullOrEmpty (JavadocUrlStyle)) { - AppendArg (response, "--doc-link-style"); - AppendArg (response, Path.GetFullPath (JavadocUrlStyle)); + AppendArg (response, "--doc-url-style"); + AppendArg (response, JavadocUrlStyle); + } + if (!string.IsNullOrEmpty (JavadocDocRootUrl)) { + AppendArg (response, "--doc-root-url"); + AppendArg (response, JavadocDocRootUrl); } foreach (var path in InputFiles) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index d948cf4f211..07c1c103abc 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -470,18 +470,29 @@ public void JavaSourceJar () AndroidClassParser = "class-parse", }; binding.SetProperty ("DocumentationFile", "UnnamedProject.xml"); + binding.SetProperty ("AndroidJavadocVerbosity", "full"); using (var bindingBuilder = CreateDllBuilder ()) { binding.Jars.Add (new AndroidItem.EmbeddedJar ("javasourcejartest.jar") { BinaryContent = () => ResourceData.JavaSourceJarTestJar, }); + binding.OtherBuildItems.Add (new BuildItem ("None", "javadoc-copyright.xml") { + BinaryContent = () => ResourceData.JavadocCopyright, + }); binding.OtherBuildItems.Add (new BuildItem ("JavaSourceJar", "javasourcejartest-sources.jar") { BinaryContent = () => ResourceData.JavaSourceJarTestSourcesJar, + MetadataValues = "CopyrightFile=$(MSBuildThisFileDirectory)javadoc-copyright.xml;" + + "UrlPrefix=https://developer.android.com/reference;" + + "UrlStyle=developer.android.com/reference@2020-Nov;" + + "DocRootUrl=https://developer.android.com", }); Assert.IsTrue (bindingBuilder.Build (binding), "binding build should have succeeded"); var path = Path.Combine (Root, bindingBuilder.ProjectDirectory, binding.OutputPath, "UnnamedProject.xml"); var xml = File.ReadAllText (path); Assert.IsTrue (xml.Contains ("name to display."), "param `name` documentation not imported!"); + Assert.IsTrue (xml.Contains ("Includes a https://developer.android.com/test.html element."), "{@docRoot} value was not replaced!"); + Assert.IsTrue (xml.Contains (""), "Java documentation URL was not imported!"); + Assert.IsTrue (xml.Contains ("Android Open Source Project"), "Copyright file was not imported!"); } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-javadoc.jar b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-javadoc.jar index 4eadc3f4db9..54801d3efb3 100644 Binary files a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-javadoc.jar and b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-javadoc.jar differ diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-sources.jar b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-sources.jar index 456b53d3525..d6f79a8e348 100644 Binary files a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-sources.jar and b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-sources.jar differ diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest.jar b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest.jar index fe7ba83bf2a..3de5e890b7a 100644 Binary files a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest.jar and b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest.jar differ diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ResourceData.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ResourceData.cs index fbe1b707ab1..19c2cba2839 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ResourceData.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ResourceData.cs @@ -16,6 +16,7 @@ static class ResourceData static Lazy library1Aar = new Lazy (() => GetResourceData ("library1.aar")); static Lazy library2Aar = new Lazy (() => GetResourceData ("library2.aar")); static Lazy apacheHttpClient_cs = new Lazy (() => GetResourceData ("ApacheHttpClient.cs")); + static Lazy javadocCopyright = new Lazy (() => GetResourceData ("javadoc-copyright.xml")); public static byte[] JavaSourceJarTestJar => javaSourceJarTestJar.Value; public static byte[] JavaSourceJarTestSourcesJar => javaSourceJarTestSourcesJar.Value; @@ -23,6 +24,7 @@ static class ResourceData public static byte [] Library1Aar => library1Aar.Value; public static byte [] Library2Aar => library2Aar.Value; public static byte [] ApacheHttpClient_cs => apacheHttpClient_cs.Value; + public static byte [] JavadocCopyright => javadocCopyright.Value; static byte[] GetResourceData (string name) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj index 3509782af29..3bdb1b40f6b 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj @@ -61,6 +61,7 @@ %(FileName)%(Extension) + diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/java/com/microsoft/android/test/msbuildtest/JavaSourceJarTest.java b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/java/com/microsoft/android/test/msbuildtest/JavaSourceJarTest.java index 1d42690ced9..a2986fab8bf 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/java/com/microsoft/android/test/msbuildtest/JavaSourceJarTest.java +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/java/com/microsoft/android/test/msbuildtest/JavaSourceJarTest.java @@ -6,7 +6,7 @@ public class JavaSourceJarTest * Returns greeting message. *

* Returns "Morning, ", "Hello, " or "Evening, " with name argument, - * depending on the argument hour. + * depending on the argument hour. Includes a {@docRoot}test.html element. *

* @param name name to display. * @param date time to determine the greeting message.