From fae7cd1e93f00157e7d3d393ff07183ec9f029e7 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Tue, 4 Feb 2025 10:17:52 -1000 Subject: [PATCH 1/3] [Mono.Android] `JavaList.Add` should allow duplicates. --- src/Mono.Android/Android.Runtime/JavaList.cs | 2 -- .../Mono.Android-Tests/Java.Interop/JavaListTest.cs | 12 ++++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Mono.Android/Android.Runtime/JavaList.cs b/src/Mono.Android/Android.Runtime/JavaList.cs index 478fbdfdb33..d6d358a328e 100644 --- a/src/Mono.Android/Android.Runtime/JavaList.cs +++ b/src/Mono.Android/Android.Runtime/JavaList.cs @@ -551,8 +551,6 @@ public virtual bool Add (Java.Lang.Object? item) public virtual bool Add (int index, Java.Lang.Object? item) { - if (Contains (item)) - return false; Add ((object?) item); return true; } diff --git a/tests/Mono.Android-Tests/Java.Interop/JavaListTest.cs b/tests/Mono.Android-Tests/Java.Interop/JavaListTest.cs index bd47368bdef..9e5c2c1acb5 100644 --- a/tests/Mono.Android-Tests/Java.Interop/JavaListTest.cs +++ b/tests/Mono.Android-Tests/Java.Interop/JavaListTest.cs @@ -15,6 +15,18 @@ namespace Java.InteropTests [SetUp] public void Setup () => list = new T (); + [Test] + public void Add () + { + list.Add ("foo"); + Assert.AreEqual ("foo", list [0]); + + // Ensure duplicates are allowed. + list.Add ("foo"); + Assert.AreEqual (2, list.Count); + Assert.AreEqual ("foo", list [1]); + } + [Test] public void Count () { From 916b9c9ffaadc77133fad9d62fabf71968e03f36 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Wed, 5 Feb 2025 12:52:24 -1000 Subject: [PATCH 2/3] Fix `Add (int, Object)` --- src/Mono.Android/Android.Runtime/JavaList.cs | 2 +- .../Java.Interop/JavaListTest.cs | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Mono.Android/Android.Runtime/JavaList.cs b/src/Mono.Android/Android.Runtime/JavaList.cs index d6d358a328e..4b071e71cca 100644 --- a/src/Mono.Android/Android.Runtime/JavaList.cs +++ b/src/Mono.Android/Android.Runtime/JavaList.cs @@ -551,7 +551,7 @@ public virtual bool Add (Java.Lang.Object? item) public virtual bool Add (int index, Java.Lang.Object? item) { - Add ((object?) item); + Insert (index, (object?) item); return true; } diff --git a/tests/Mono.Android-Tests/Java.Interop/JavaListTest.cs b/tests/Mono.Android-Tests/Java.Interop/JavaListTest.cs index 9e5c2c1acb5..3ac3c8220f9 100644 --- a/tests/Mono.Android-Tests/Java.Interop/JavaListTest.cs +++ b/tests/Mono.Android-Tests/Java.Interop/JavaListTest.cs @@ -27,6 +27,26 @@ public void Add () Assert.AreEqual ("foo", list [1]); } + [Test] + public void AddWithIndex () + { + list.Add ("Apple"); + list.Add ("Banana"); + list.Add ("Cherry"); + + // Ensure index is respected. + list.Add (3, "Grape"); + list.Add (2, "Blueberry"); + list.Add (4, "Fig"); + + Assert.AreEqual ("Apple", list [0]); + Assert.AreEqual ("Banana", list [1]); + Assert.AreEqual ("Blueberry", list [2]); + Assert.AreEqual ("Cherry", list [3]); + Assert.AreEqual ("Fig", list [4]); + Assert.AreEqual ("Grape", list [5]); + } + [Test] public void Count () { From 373f7ab45b0a631e446827f68dbbe39d55be7fc6 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Thu, 6 Feb 2025 07:42:29 -1000 Subject: [PATCH 3/3] Add should append, not prepend. --- src/Mono.Android/Android.Runtime/JavaList.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Mono.Android/Android.Runtime/JavaList.cs b/src/Mono.Android/Android.Runtime/JavaList.cs index 4b071e71cca..6d12575963c 100644 --- a/src/Mono.Android/Android.Runtime/JavaList.cs +++ b/src/Mono.Android/Android.Runtime/JavaList.cs @@ -546,7 +546,8 @@ public static IntPtr ToLocalJniHandle (IList? items) // public virtual bool Add (Java.Lang.Object? item) { - return Add (0, item); + Add ((object?) item); + return true; } public virtual bool Add (int index, Java.Lang.Object? item)