Skip to content

Commit 4766917

Browse files
Remove unrelated changes: revert test plumbing, CI lane, and manifest refactoring
Revert files that are not about [Export] support: - CI lane (stage-package-tests.yaml) - Test exclusions/categories (TrimmableIgnore, DoNotGenerateAcw) - NUnitInstrumentation test plumbing - Mono.Android.NET-Tests.csproj trimmable setup - TrimmableTypeMapGenerator manifest refactoring (from #11105) - TrimmableTypeMapGeneratorTests manifest/propagation tests Keep only Export-related changes: - CoreCLRIgnore removal from Export tests in JnienvTest.cs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 7818344 commit 4766917

9 files changed

Lines changed: 41 additions & 59 deletions

File tree

build-tools/automation/yaml-templates/stage-package-tests.yaml

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -199,20 +199,10 @@ stages:
199199
testName: Mono.Android.NET_Tests-CoreCLR
200200
project: tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj
201201
testResultsFiles: TestResult-Mono.Android.NET_Tests-$(XA.Build.Configuration)CoreCLR.xml
202-
extraBuildArgs: -p:TestsFlavor=CoreCLR -p:_AndroidTypeMapImplementation=llvm-ir
202+
extraBuildArgs: -p:TestsFlavor=CoreCLR -p:UseMonoRuntime=false
203203
artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab
204204
artifactFolder: $(DotNetTargetFramework)-CoreCLR
205205

206-
- template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml
207-
parameters:
208-
configuration: $(XA.Build.Configuration)
209-
testName: Mono.Android.NET_Tests-CoreCLRTrimmable
210-
project: tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj
211-
testResultsFiles: TestResult-Mono.Android.NET_Tests-$(XA.Build.Configuration)CoreCLRTrimmable.xml
212-
extraBuildArgs: -p:_AndroidTypeMapImplementation=trimmable -p:UseMonoRuntime=false
213-
artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab
214-
artifactFolder: $(DotNetTargetFramework)-CoreCLRTrimmable
215-
216206
- template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml
217207
parameters:
218208
configuration: $(XA.Build.Configuration)

src/Microsoft.Android.Sdk.TrimmableTypeMap/TrimmableTypeMapGenerator.cs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -331,28 +331,32 @@ internal void RootManifestReferencedTypes (List<JavaPeerInfo> allPeers, XDocumen
331331
/// TestInstrumentation_1 must also defer — otherwise the base class <c>&lt;clinit&gt;</c> will call
332332
/// <c>registerNatives</c> before the managed runtime is ready.
333333
/// </summary>
334-
static void PropagateDeferredRegistrationToBaseClasses (List<JavaPeerInfo> allPeers)
334+
internal static void PropagateDeferredRegistrationToBaseClasses (List<JavaPeerInfo> allPeers)
335335
{
336-
var peersByJniName = new Dictionary<string, JavaPeerInfo> (StringComparer.Ordinal);
336+
// In practice only 1–2 types need propagation (one Application, maybe one
337+
// Instrumentation), each with a short base-class chain. A linear scan per
338+
// ancestor is simpler and cheaper than building a Dictionary<JavaName, List<Peer>>
339+
// lookup over all peers up front.
337340
foreach (var peer in allPeers) {
338-
if (!peersByJniName.ContainsKey (peer.JavaName)) {
339-
peersByJniName [peer.JavaName] = peer;
341+
if (peer.CannotRegisterInStaticConstructor) {
342+
PropagateToAncestors (peer.BaseJavaName, allPeers);
340343
}
341344
}
342345

343-
foreach (var peer in allPeers) {
344-
if (!peer.CannotRegisterInStaticConstructor) {
345-
continue;
346-
}
346+
static void PropagateToAncestors (string? baseJniName, List<JavaPeerInfo> allPeers)
347+
{
348+
while (baseJniName is not null) {
349+
string? nextBase = null;
350+
foreach (var basePeer in allPeers) {
351+
if (!string.Equals (basePeer.JavaName, baseJniName, StringComparison.Ordinal) || basePeer.DoNotGenerateAcw) {
352+
continue;
353+
}
347354

348-
var current = peer;
349-
while (current.BaseJavaName is { } baseJniName && peersByJniName.TryGetValue (baseJniName, out var basePeer)) {
350-
if (basePeer.DoNotGenerateAcw) {
351-
break;
355+
basePeer.CannotRegisterInStaticConstructor = true;
356+
nextBase = basePeer.BaseJavaName;
352357
}
353358

354-
basePeer.CannotRegisterInStaticConstructor = true;
355-
current = basePeer;
359+
baseJniName = nextBase;
356360
}
357361
}
358362
}

tests/Microsoft.Android.Sdk.TrimmableTypeMap.Tests/Generator/TrimmableTypeMapGeneratorTests.cs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ public void Execute_ManifestReferencedTypeNames_AreNormalizedInGeneratedManifest
227227
Assert.Equal ("my.app.SimpleActivity", androidName);
228228
}
229229

230+
230231
TrimmableTypeMapGenerator CreateGenerator () => new (new TestTrimmableTypeMapLogger (logMessages));
231232

232233
TrimmableTypeMapGenerator CreateGenerator (List<string> warnings) =>
@@ -270,12 +271,6 @@ public void RootManifestReferencedTypes_RootsManifestReferencedTypes (
270271
var generator = CreateGenerator ();
271272
generator.RootManifestReferencedTypes (peers, doc);
272273

273-
var actualName = (string?) doc.Root?
274-
.Element ("application")?
275-
.Element (elementName)?
276-
.Attribute (System.Xml.Linq.XName.Get ("name", "http://schemas.android.com/apk/res/android"));
277-
278-
Assert.Equal (JniSignatureHelper.JniNameToJavaName (javaName), actualName);
279274
Assert.True (peers [0].IsUnconditional, "The manifest-referenced type should be rooted as unconditional.");
280275
Assert.False (peers [1].IsUnconditional, "Non-matching peers should remain conditional.");
281276
Assert.Contains (logMessages, m => m.Contains ("Rooting manifest-referenced type"));
@@ -315,7 +310,7 @@ public void RootManifestReferencedTypes_RootsApplicationAndInstrumentationTypes
315310
}
316311

317312
[Fact]
318-
public void PropagateDeferredRegistration_PropagatesCannotRegisterToBaseClasses ()
313+
public void PropagateDeferredRegistrationToBaseClasses_PropagatesToBaseClassesOfManifestReferencedTypes ()
319314
{
320315
var basePeer = new JavaPeerInfo {
321316
JavaName = "crc64aaa/TestInstrumentation_1", CompatJniName = "crc64aaa/TestInstrumentation_1",
@@ -347,16 +342,17 @@ public void PropagateDeferredRegistration_PropagatesCannotRegisterToBaseClasses
347342
var generator = CreateGenerator ();
348343
generator.RootManifestReferencedTypes (peers, doc);
349344

350-
// Execute calls PropagateDeferredRegistrationToBaseClasses internally,
351-
// but we test the generator method through the public Execute path indirectly.
352-
// For unit testing, call RootManifestReferencedTypes + verify the propagation
353-
// by invoking the static helper through a full Execute run.
354-
// Instead, use reflection or just verify after calling Execute with a manifest.
345+
// RootManifestReferencedTypes sets the flag only on the directly matched leaf
346+
Assert.True (leafPeer.CannotRegisterInStaticConstructor, "Leaf instrumentation should have deferred registration after manifest rooting.");
347+
Assert.False (midPeer.CannotRegisterInStaticConstructor, "Mid peer should NOT have deferred registration before propagation.");
348+
Assert.False (basePeer.CannotRegisterInStaticConstructor, "Base peer should NOT have deferred registration before propagation.");
349+
350+
// PropagateDeferredRegistrationToBaseClasses walks the BaseJavaName chain
351+
TrimmableTypeMapGenerator.PropagateDeferredRegistrationToBaseClasses (peers);
355352

356-
// RootManifestReferencedTypes sets the flag on the leaf only
357-
Assert.True (leafPeer.CannotRegisterInStaticConstructor, "Leaf instrumentation should have deferred registration.");
358-
Assert.False (midPeer.CannotRegisterInStaticConstructor, "Mid peer should NOT have deferred registration yet (before propagation).");
359-
Assert.False (basePeer.CannotRegisterInStaticConstructor, "Base peer should NOT have deferred registration yet (before propagation).");
353+
Assert.True (leafPeer.CannotRegisterInStaticConstructor, "Leaf instrumentation should still have deferred registration.");
354+
Assert.True (midPeer.CannotRegisterInStaticConstructor, "Mid peer should have deferred registration after propagation.");
355+
Assert.True (basePeer.CannotRegisterInStaticConstructor, "Base peer should have deferred registration after propagation.");
360356
}
361357

362358
[Fact]

tests/Mono.Android-Tests/Mono.Android-Tests/Android.Runtime/JnienvArrayMarshaling.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ public void NewArray_Int32ArrayArray_ShouldNotLeak ()
321321
}
322322
}
323323

324-
[Test, Category ("TrimmableIgnore")]
324+
[Test]
325325
public void NewArray_UseJcwTypeWhenRenamed ()
326326
{
327327
IntPtr lref = JNIEnv.NewArray<CreateInstance_OverrideAbsListView_Adapter>(new CreateInstance_OverrideAbsListView_Adapter[0]);

tests/Mono.Android-Tests/Mono.Android-Tests/Android.Widget/AdapterTests.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Android.WidgetTests {
1313
[TestFixture]
1414
public class AdapterTests {
1515

16-
[Test, Category ("TrimmableIgnore")]
16+
[Test]
1717
public void InvokeOverriddenAbsListView_AdapterProperty ()
1818
{
1919
IntPtr grefAbsListView_class = JNIEnv.FindClass ("android/widget/AbsListView");
@@ -57,13 +57,8 @@ public void GridView_Adapter ()
5757
}
5858
}
5959

60-
#if TRIMMABLE_TYPEMAP
61-
[Register (CanOverrideAbsListView_Adapter.JcwType, DoNotGenerateAcw = true)]
62-
#endif
6360
public class CanOverrideAbsListView_Adapter : AbsListView {
6461

65-
internal const string JcwType = "crc647ca01befd1981339/CanOverrideAbsListView_Adapter";
66-
6762
public CanOverrideAbsListView_Adapter (Context context)
6863
: base (context)
6964
{

tests/Mono.Android-Tests/Mono.Android-Tests/Java.Interop/JavaObjectExtensionsTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212

1313
namespace Java.InteropTests {
1414

15-
[TestFixture]
16-
public class JavaObjectExtensionsTests {
15+
[TestFixture]
16+
public class JavaObjectExtensionsTests {
1717

18-
[Test, Category ("TrimmableIgnore")]
19-
public void JavaCast_BaseToGenericWrapper ()
18+
[Test]
19+
public void JavaCast_BaseToGenericWrapper ()
2020
{
2121
using (var list = new JavaList (new[]{ 1, 2, 3 }))
2222
using (var generic = JavaObjectExtensions.JavaCast<JavaList<int>> (list)) {

tests/Mono.Android-Tests/Mono.Android-Tests/Java.Lang/ObjectTest.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,14 @@ static MethodInfo MakeGenericMethod (MethodInfo method, Type type) =>
6666
MakeGenericMethod (FromJavaObject_T, typeof (int)));
6767
}
6868

69-
[Test, Category ("TrimmableIgnore")]
69+
[Test]
7070
public void JnienvCreateInstance_RegistersMultipleInstances ()
7171
{
7272
using (var adapter = new CreateInstance_OverrideAbsListView_Adapter (Application.Context)) {
7373

7474
var intermediate = CreateInstance_OverrideAbsListView_Adapter.Intermediate;
7575
var registered = Java.Lang.Object.GetObject<CreateInstance_OverrideAbsListView_Adapter>(adapter.Handle, JniHandleOwnership.DoNotTransfer);
76+
7677
Assert.AreNotSame (adapter, intermediate);
7778
Assert.AreSame (adapter, registered);
7879
}
@@ -109,11 +110,7 @@ public void java_lang_Object_Is_Java_Lang_Object ()
109110
*
110111
* Alas, this is the pre-4.10 behavior!
111112
*/
112-
#if TRIMMABLE_TYPEMAP
113-
[Register (CreateInstance_OverrideAbsListView_Adapter.JcwType, DoNotGenerateAcw = true)]
114-
#else
115113
[Register (CreateInstance_OverrideAbsListView_Adapter.JcwType)]
116-
#endif
117114
public class CreateInstance_OverrideAbsListView_Adapter : AbsListView {
118115

119116
/* (IntPtr, JniHandleOwnership) ctor is reqiured because AbsListView

tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<PropertyGroup>
4141
<UseMonoRuntime Condition=" '$(_AndroidTypeMapImplementation)' == 'trimmable' and '$(UseMonoRuntime)' == '' and '$(PublishAot)' != 'true' ">false</UseMonoRuntime>
4242
<TestsFlavor Condition=" '$(TestsFlavor)' == '' and '$(_AndroidTypeMapImplementation)' == 'trimmable' ">CoreCLRTrimmable</TestsFlavor>
43-
<ExcludeCategories Condition=" '$(_AndroidTypeMapImplementation)' == 'trimmable' ">$(ExcludeCategories):NativeTypeMap:TrimmableIgnore:SSL</ExcludeCategories>
43+
<ExcludeCategories Condition=" '$(_AndroidTypeMapImplementation)' == 'trimmable' ">$(ExcludeCategories):NativeTypeMap:TrimmableIgnore</ExcludeCategories>
4444
<DefineConstants Condition=" '$(_AndroidTypeMapImplementation)' == 'trimmable' ">$(DefineConstants);TRIMMABLE_TYPEMAP</DefineConstants>
4545
</PropertyGroup>
4646

tests/Mono.Android-Tests/Mono.Android-Tests/Xamarin.Android.RuntimeTests/NUnitInstrumentation.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ protected override IList<TestAssemblyInfo> GetTestAssemblies()
4242
};
4343
}
4444
}
45-
}
45+
}

0 commit comments

Comments
 (0)