Skip to content

Commit a01683a

Browse files
committed
Merge branch 'main' into all-assemblies-per-rid
* main: [Mono.Android] Generate API docs with "full" verbosity (dotnet#8435) [profiled-aot] update profile for .NET 8 GA (dotnet#8428) Bump to xamarin/Java.Interop/main@3c83179 (dotnet#8429) [Xamarin.Android.Build.Tasks] Small refactoring to `AddKeepAlives` method (dotnet#8423) [Xamarin.Android.Build.Tasks] Fixup indirect resource references (dotnet#8416)
2 parents 4efb704 + 07dc60b commit a01683a

File tree

10 files changed

+186
-167
lines changed

10 files changed

+186
-167
lines changed

build-tools/automation/azure-pipelines-apidocs.yaml

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ parameters:
2929
type: string
3030
default: default
3131

32+
- name: javadocVerbosity
33+
displayName: AndroidJavadocVerbosity property value
34+
type: string
35+
default: default
36+
37+
3238
# Global variables
3339
variables:
3440
- template: yaml-templates/variables.yaml
@@ -40,6 +46,8 @@ variables:
4046
value: ''
4147
- name: MdocPackageVersionArg
4248
value: ''
49+
- name: AndroidJavadocVerbosity
50+
value: ''
4351

4452

4553
stages:
@@ -79,6 +87,10 @@ stages:
7987
- script: echo "##vso[task.setvariable variable=MdocPackageVersionArg]-p:MdocPackageVersion=${{ parameters.mdocVersion }}"
8088
displayName: set MdocPackageVersionArg
8189

90+
- ${{ if ne(parameters.javadocVerbosity, 'default') }}:
91+
- script: echo "##vso[task.setvariable variable=AndroidJavadocVerbosity]-p:AndroidJavadocVerbosity=${{ parameters.javadocVerbosity }}"
92+
displayName: set AndroidJavadocVerbosity
93+
8294
- template: yaml-templates/use-dot-net.yaml
8395

8496
- task: NuGetAuthenticate@0
@@ -97,15 +109,21 @@ stages:
97109

98110
- script: >-
99111
make update-api-docs CONFIGURATION=$(XA.Build.Configuration)
100-
MSBUILD_ARGS='$(DocsApiLevelArg) $(DocsPlatformIdArg) $(DocsFxVersionArg) $(MdocPackageVersionArg)'
112+
MSBUILD_ARGS='$(DocsApiLevelArg) $(DocsPlatformIdArg) $(DocsFxVersionArg) $(MdocPackageVersionArg) $(AndroidJavadocVerbosity)'
101113
workingDirectory: $(Build.SourcesDirectory)
102114
displayName: make update-api-docs
103115
104-
- template: yaml-templates/upload-results.yaml
105-
parameters:
106-
artifactName: Build Results - API Docs Update
107-
includeBuildResults: true
108-
condition: always()
116+
- script: >
117+
mkdir -p $(Build.StagingDirectory)/docs-binaries &&
118+
ln $(Build.SourcesDirectory)/bin/$(XA.Build.Configuration)/lib/xamarin.android/xbuild-frameworks/Microsoft.Android/34/*.dll $(Build.StagingDirectory)/docs-binaries/ &&
119+
ln $(Build.SourcesDirectory)/bin/$(XA.Build.Configuration)/lib/xamarin.android/xbuild-frameworks/Microsoft.Android/34/*.xml $(Build.StagingDirectory)/docs-binaries/
120+
displayName: copy docs files
121+
122+
- task: PublishPipelineArtifact@1
123+
displayName: upload docs files
124+
inputs:
125+
artifactName: Binaries
126+
targetPath: $(Build.StagingDirectory)/docs-binaries
109127

110128
- script: >
111129
mkdir -p $(Build.StagingDirectory)/api-doc-diff &&
@@ -118,6 +136,12 @@ stages:
118136
artifactName: Api Docs Diff
119137
targetPath: $(Build.StagingDirectory)/api-doc-diff
120138

139+
- template: yaml-templates/upload-results.yaml
140+
parameters:
141+
artifactName: Build Results - API Docs Update
142+
includeBuildResults: true
143+
condition: always()
144+
121145
- powershell: |
122146
$docsUpdateBinlog = Get-ChildItem -Path "$(Build.SourcesDirectory)/bin/Build$(XA.Build.Configuration)" -Filter *UpdateApiDocs-*.binlog | Select-Object -First 1
123147
$buildLog = "$(Build.SourcesDirectory)/bin/Build$(XA.Build.Configuration)/temp-build.log"

external/Java.Interop

src/Mono.Android/Mono.Android.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
</PropertyGroup>
3838

3939
<PropertyGroup Condition=" '$(IncludeAndroidJavadoc)' == 'True' ">
40-
<AndroidJavadocVerbosity Condition=" '$(AndroidJavadocVerbosity)' == '' ">intellisense+extraremarks</AndroidJavadocVerbosity>
40+
<AndroidJavadocVerbosity Condition=" '$(AndroidJavadocVerbosity)' == '' ">full</AndroidJavadocVerbosity>
4141
<DocumentationFile>$(OutputPath)Mono.Android.xml</DocumentationFile>
4242
<NoWarn>$(NoWarn);CS1572;CS1573;CS1574;CS1584;CS1587;CS1591;CS1658;</NoWarn>
4343
</PropertyGroup>

src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/AddKeepAlivesStep.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,13 @@ bool AddKeepAlives (TypeDefinition type)
8686
{
8787
bool changed = false;
8888
foreach (MethodDefinition method in type.Methods) {
89-
if (!method.CustomAttributes.Any (a => a.AttributeType.FullName == "Android.Runtime.RegisterAttribute"))
89+
if (method.Parameters.Count == 0)
9090
continue;
9191

92-
if (method.Parameters.Count == 0)
92+
if (!method.CustomAttributes.Any (a => a.AttributeType.FullName == "Android.Runtime.RegisterAttribute"))
9393
continue;
9494

95-
var processor = method.Body.GetILProcessor ();
96-
var module = method.DeclaringType.Module;
9795
var instructions = method.Body.Instructions;
98-
var end = instructions.Last ();
99-
if (end.Previous.OpCode == OpCodes.Endfinally)
100-
end = end.Previous;
10196

10297
var found = false;
10398
for (int off = Math.Max (0, instructions.Count - 6); off < instructions.Count; off++) {
@@ -111,6 +106,12 @@ bool AddKeepAlives (TypeDefinition type)
111106
if (found)
112107
continue;
113108

109+
var processor = method.Body.GetILProcessor ();
110+
var module = method.DeclaringType.Module;
111+
var end = instructions.Last ();
112+
if (end.Previous.OpCode == OpCodes.Endfinally)
113+
end = end.Previous;
114+
114115
for (int i = 0; i < method.Parameters.Count; i++) {
115116
if (method.Parameters [i].ParameterType.IsValueType || method.Parameters [i].ParameterType.FullName == "System.String")
116117
continue;

src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixLegacyResourceDesignerStep.cs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,32 @@ string GetNativeTypeNameFromManagedTypeName (string name)
139139
}
140140
}
141141

142+
string GetFixupKey (Instruction instruction, string designerFullName)
143+
{
144+
string line = instruction.ToString ();
145+
int idx = line.IndexOf (designerFullName, StringComparison.Ordinal);
146+
if (idx >= 0) {
147+
return line.Substring (idx + designerFullName.Length);
148+
}
149+
if (instruction.Operand is FieldReference fieldRef &&
150+
(fieldRef.DeclaringType?.ToString()?.Contains (".Resource/") ?? false)) {
151+
var canResolve = false;
152+
try {
153+
var resolved = fieldRef.Resolve ();
154+
canResolve = resolved != null;
155+
} catch (Exception) {
156+
}
157+
if (canResolve)
158+
return null;
159+
var type = fieldRef.DeclaringType.FullName;
160+
var s = type.LastIndexOf ('/');
161+
type = type.Substring (s + 1);
162+
var key = type + "::" + fieldRef.Name;
163+
return key;
164+
}
165+
return null;
166+
}
167+
142168
protected override void FixBody (MethodBody body, TypeDefinition designer)
143169
{
144170
// replace
@@ -152,18 +178,16 @@ protected override void FixBody (MethodBody body, TypeDefinition designer)
152178
{
153179
if (i.OpCode != OpCodes.Ldsfld)
154180
continue;
155-
string line = i.ToString ();
156-
int idx = line.IndexOf (designerFullName, StringComparison.Ordinal);
157-
if (idx >= 0) {
158-
string key = line.Substring (idx + designerFullName.Length);
181+
var key = GetFixupKey (i, designerFullName);
182+
if (key != null) {
159183
LogMessage ($"Looking for {key}.");
160184
var found = lookup.TryGetValue (key, out MethodDefinition method);
161185
if (!found) {
162186
LogMessage ($"DEBUG! Failed to find {key}! Trying case insensitive lookup.");
163187
found = lookupCaseInsensitive.TryGetValue (key, out method);
164188
}
165189
if (found) {
166-
var importedMethod = designer.Module.ImportReference (method);
190+
var importedMethod = body.Method.Module.ImportReference (method);
167191
var newIn = Instruction.Create (OpCodes.Call, importedMethod);
168192
instructions.Add (i, newIn);
169193
} else {

src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/LinkDesignerBase.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,37 @@ protected bool FindResourceDesigner (AssemblyDefinition assembly, bool mainAppli
6060

6161
}
6262
}
63+
64+
if (string.IsNullOrEmpty(designerFullName)) {
65+
LogMessage ($"Inspecting member references for assembly: {assembly.FullName};");
66+
var memberRefs = assembly.MainModule.GetMemberReferences ();
67+
foreach (var memberRef in memberRefs) {
68+
string declaringType = memberRef.DeclaringType?.ToString () ?? string.Empty;
69+
if (!declaringType.Contains (".Resource/")) {
70+
continue;
71+
}
72+
if (declaringType.Contains ("_Microsoft.Android.Resource.Designer")) {
73+
continue;
74+
}
75+
var resolved = false;
76+
try {
77+
var def = memberRef.Resolve ();
78+
if (resolved = def != null) {
79+
LogMessage ($"Resolved member `{memberRef?.Name}`");
80+
}
81+
} catch (Exception ex) {
82+
LogMessage ($"Exception resolving member `{memberRef?.Name}`: {ex}");
83+
resolved = false;
84+
}
85+
if (!resolved) {
86+
LogMessage ($"Adding _Linker.Generated.Resource to {assembly.Name.Name}. Could not resolve {memberRef?.Name} : {declaringType}");
87+
designer = new TypeDefinition ("_Linker.Generated", "Resource", TypeAttributes.Public | TypeAttributes.AnsiClass);
88+
designer.BaseType = new TypeDefinition ("System", "Object", TypeAttributes.Public | TypeAttributes.AnsiClass);
89+
return true;
90+
}
91+
}
92+
}
93+
6394
if (string.IsNullOrEmpty(designerFullName))
6495
return false;
6596

src/profiled-aot/CommonMethods.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// This class represents common code paths we always want to AOT
22

3+
// DateTime.Now
34
// string interpolation & split
45
// int.Parse(), int.ToString()
56
// Culture-aware string comparisons
@@ -15,8 +16,11 @@ static class CommonMethods
1516
// Returns '200 OK' if the caller wants to set that on the UI
1617
public static async Task<string> Invoke()
1718
{
18-
var url = $"https://httpstat.us/{200}";
19+
// NOTE: alternate web services if one of these is down
20+
//var url = $"https://httpstat.us/{200}";
21+
var url = $"https://httpbin.org/status/{200}";
1922

23+
var now = DateTime.Now;
2024
var foo = "foo";
2125
foo.StartsWith("f");
2226
foo.Contains("o");

src/profiled-aot/dotnet.aotprofile

-8.62 KB
Binary file not shown.

0 commit comments

Comments
 (0)