Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Accessibility/AXHearingUtilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public static AXHearingDeviceEar GetMFiHearingDeviceStreamingEar ()

public static NSUuid [] GetMFiHearingDevicePairedUuids ()
{
return NSArray.ArrayFromHandle<NSUuid> (AXMFiHearingDevicePairedUUIDs ());
return NSArray.NonNullArrayFromHandleDropNullElements<NSUuid> (AXMFiHearingDevicePairedUUIDs ());
}
}
}
Expand Down
14 changes: 7 additions & 7 deletions src/AddressBook/ABAddressBook.cs
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ public nint PeopleCount {
public ABPerson [] GetPeople ()
{
var cfArrayRef = ABAddressBookCopyArrayOfAllPeople (GetCheckedHandle ());
return NSArray.ArrayFromHandle (cfArrayRef, h => new ABPerson (h, this), releaseHandle: true);
return NSArray.NonNullArrayFromHandleDropNullElements (cfArrayRef, h => new ABPerson (h, this), releaseHandle: true);
}

[DllImport (Constants.AddressBookLibrary)]
Expand All @@ -438,7 +438,7 @@ public ABPerson [] GetPeople (ABRecord source)
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (source));
var cfArrayRef = ABAddressBookCopyArrayOfAllPeopleInSource (GetCheckedHandle (), source.Handle);
GC.KeepAlive (source);
return NSArray.ArrayFromHandle (cfArrayRef, l => new ABPerson (l, this), releaseHandle: true);
return NSArray.NonNullArrayFromHandleDropNullElements (cfArrayRef, l => new ABPerson (l, this), releaseHandle: true);
}

[DllImport (Constants.AddressBookLibrary)]
Expand All @@ -455,7 +455,7 @@ public ABPerson [] GetPeople (ABRecord source, ABPersonSortBy sortOrdering)
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (source));
var cfArrayRef = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering (GetCheckedHandle (), source.Handle, sortOrdering);
GC.KeepAlive (source);
return NSArray.ArrayFromHandle (cfArrayRef, l => new ABPerson (l, this), releaseHandle: true);
return NSArray.NonNullArrayFromHandleDropNullElements (cfArrayRef, l => new ABPerson (l, this), releaseHandle: true);
}

[DllImport (Constants.AddressBookLibrary)]
Expand Down Expand Up @@ -490,7 +490,7 @@ public nint GroupCount {
public ABGroup [] GetGroups ()
{
var cfArrayRef = ABAddressBookCopyArrayOfAllGroups (GetCheckedHandle ());
return NSArray.ArrayFromHandle (cfArrayRef, h => new ABGroup (h, this), releaseHandle: true);
return NSArray.NonNullArrayFromHandleDropNullElements (cfArrayRef, h => new ABGroup (h, this), releaseHandle: true);
}

[DllImport (Constants.AddressBookLibrary)]
Expand All @@ -507,7 +507,7 @@ public ABGroup [] GetGroups (ABRecord source)

var cfArrayRef = ABAddressBookCopyArrayOfAllGroupsInSource (GetCheckedHandle (), source.Handle);
GC.KeepAlive (source);
return NSArray.ArrayFromHandle (cfArrayRef, l => new ABGroup (l, this), releaseHandle: true);
return NSArray.NonNullArrayFromHandleDropNullElements (cfArrayRef, l => new ABGroup (l, this), releaseHandle: true);
}

[DllImport (Constants.AddressBookLibrary)]
Expand Down Expand Up @@ -720,7 +720,7 @@ public ABPerson [] GetPeopleWithName (string name)
var nameHandle = CFString.CreateNative (name);
try {
var cfArrayRef = ABAddressBookCopyPeopleWithName (Handle, nameHandle);
return NSArray.ArrayFromHandle (cfArrayRef, h => new ABPerson (h, this), releaseHandle: true);
return NSArray.NonNullArrayFromHandleDropNullElements (cfArrayRef, h => new ABPerson (h, this), releaseHandle: true);
} finally {
CFString.ReleaseNative (nameHandle);
}
Expand All @@ -739,7 +739,7 @@ public ABPerson [] GetPeopleWithName (string name)
public ABSource []? GetAllSources ()
{
var cfArrayRef = ABAddressBookCopyArrayOfAllSources (GetCheckedHandle ());
return NSArray.ArrayFromHandle (cfArrayRef, h => new ABSource (h, this), releaseHandle: true);
return NSArray.NonNullArrayFromHandleDropNullElements (cfArrayRef, h => new ABSource (h, this), releaseHandle: true);
}

[DllImport (Constants.AddressBookLibrary)]
Expand Down
11 changes: 3 additions & 8 deletions src/AddressBook/ABGroup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -219,11 +219,8 @@ IEnumerator IEnumerable.GetEnumerator ()
public IEnumerator<ABRecord> GetEnumerator ()
{
var cfArrayRef = ABGroupCopyArrayOfAllMembers (Handle);
IEnumerable<ABRecord>? e = null;
if (cfArrayRef == IntPtr.Zero)
e = new ABRecord [0];
else
e = NSArray.ArrayFromHandle (cfArrayRef, h => ABRecord.FromHandle (h, AddressBook), releaseHandle: true);
IEnumerable<ABRecord> e;
e = NSArray.NonNullArrayFromHandleDropNullElements (cfArrayRef, h => ABRecord.FromHandle (h, AddressBook), releaseHandle: true);
return e.GetEnumerator ();
}

Expand All @@ -248,9 +245,7 @@ public IEnumerator<ABRecord> GetEnumerator ()
public ABRecord [] GetMembers (ABPersonSortBy sortOrdering)
{
var cfArrayRef = ABGroupCopyArrayOfAllMembersWithSortOrdering (Handle, sortOrdering);
if (cfArrayRef == IntPtr.Zero)
return new ABRecord [0];
return NSArray.ArrayFromHandle (cfArrayRef, h => ABRecord.FromHandle (h, AddressBook), releaseHandle: true);
return NSArray.NonNullArrayFromHandleDropNullElements (cfArrayRef, h => ABRecord.FromHandle (h, AddressBook), releaseHandle: true);
}

[DllImport (Constants.AddressBookLibrary)]
Expand Down
3 changes: 1 addition & 2 deletions src/AddressBook/ABMultiValue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -319,8 +319,7 @@ public ABPropertyType PropertyType {
/// </remarks>
public T [] GetValues ()
{
return NSArray.ArrayFromHandle (ABMultiValue.CopyArrayOfAllValues (Handle), toManaged, releaseHandle: true)
?? Array.Empty<T> ();
return NSArray.NonNullArrayFromHandleDropNullElements (ABMultiValue.CopyArrayOfAllValues (Handle), toManaged, releaseHandle: true);
}

/// <summary>
Expand Down
4 changes: 2 additions & 2 deletions src/AppKit/NSAccessibility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ public static void PostNotification (NSObject element, NSString notification)

var handle = NSAccessibilityUnignoredChildren (originalChildren.Handle);
GC.KeepAlive (originalChildren);
return NSArray.ArrayFromHandle<NSObject> (handle);
return NSArray.ArrayFromHandleDropNullElements<NSObject> (handle);
}

[DllImport (Constants.AppKitLibrary)]
Expand All @@ -215,7 +215,7 @@ public static void PostNotification (NSObject element, NSString notification)

var handle = NSAccessibilityUnignoredChildrenForOnlyChild (originalChild.Handle);
GC.KeepAlive (originalChild);
return NSArray.ArrayFromHandle<NSObject> (handle);
return NSArray.ArrayFromHandleDropNullElements<NSObject> (handle);
}

[DllImport (Constants.AppKitLibrary)]
Expand Down
9 changes: 4 additions & 5 deletions src/AuthenticationServices/PublicPrivateKeyAuthentication.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
#if !TVOS

using CoreGraphics;
using System.Linq;

#nullable enable

Expand All @@ -25,14 +24,14 @@ public static class PublicPrivateKeyAuthentication {

public static ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport []? GetAllSupportedPublicKeyCredentialDescriptorTransports ()
{
NSString []? nsStringArray = NSArray.ArrayFromHandle<NSString> (ASAuthorizationAllSupportedPublicKeyCredentialDescriptorTransports ());
var nsStringArray = NSArray.StringArrayFromHandle (ASAuthorizationAllSupportedPublicKeyCredentialDescriptorTransports ());

if (nsStringArray is null)
return null;

ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport [] asArray = new ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport [nsStringArray.Count ()];
for (var i = 0; i < nsStringArray.Count (); i++) {
switch (nsStringArray [i].Description) {
var asArray = new ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport [nsStringArray.Length];
for (var i = 0; i < nsStringArray.Length; i++) {
switch (nsStringArray [i]) {
case "usb":
asArray [i] = ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport.Usb;
break;
Expand Down
18 changes: 4 additions & 14 deletions src/CoreAnimation/CADefs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,24 +52,14 @@ CGColor CreateColor (NativeHandle p)
/// <summary>An array of colors defining the gradient. These values can be animated.</summary>
/// <value>To be added.</value>
/// <remarks>To be added.</remarks>
public CGColor [] Colors {
public CGColor []? Colors {
get {
return NSArray.ArrayFromHandle<CGColor> (_Colors, CreateColor);
return NSArray.ArrayFromHandleDropNullElements<CGColor> (_Colors, CreateColor);
}

set {
if (value is null) {
_Colors = IntPtr.Zero;
return;
}

var ptrs = new NativeHandle [value.Length];
for (int i = 0; i < ptrs.Length; i++)
ptrs [i] = value [i].Handle;

using (NSArray array = NSArray.FromIntPtrs (ptrs)) {
_Colors = array.Handle;
}
using var array = NSArray.FromIntPtrs (value, NativeObjectExtensions.GetHandle);
_Colors = array.GetHandle ();
}
}
}
Expand Down
4 changes: 1 addition & 3 deletions src/CoreGraphics/CGPath.cs
Original file line number Diff line number Diff line change
Expand Up @@ -841,9 +841,7 @@ public void Apply (ApplierFunction func)
public CGPath [] GetSeparateComponents (bool evenOddFillRule)
{
var cfArrayRef = CGPathCreateSeparateComponents (Handle, evenOddFillRule.AsByte ());
if (cfArrayRef == IntPtr.Zero)
return Array.Empty<CGPath> ();
return NSArray.ArrayFromHandle<CGPath> (cfArrayRef);
return NSArray.NonNullArrayFromHandleDropNullElements<CGPath> (cfArrayRef);
}

[SupportedOSPlatform ("ios16.0")]
Expand Down
4 changes: 1 addition & 3 deletions src/CoreML/MLModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@ public partial class MLModel {
public static IMLComputeDeviceProtocol [] AllComputeDevices {
get {
var ptr = MLAllComputeDevices ();
if (ptr == IntPtr.Zero)
return Array.Empty<IMLComputeDeviceProtocol> ();
return NSArray.ArrayFromHandle<IMLComputeDeviceProtocol> (ptr);
return NSArray.NonNullArrayFromHandleDropNullElements<IMLComputeDeviceProtocol> (ptr);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/CoreML/MLMultiArray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ static NSNumber [] ConvertArray (nint [] value)
// NSArray<NSNumber> => nint[]
internal static nint [] ConvertArray (IntPtr handle)
{
return NSArray.ArrayFromHandle<nint> (handle, (v) => (nint) Messaging.IntPtr_objc_msgSend (v, Selector.GetHandle ("integerValue")));
return NSArray.NonNullArrayFromHandleDropNullElements<nint> (handle, (v) => (nint) Messaging.IntPtr_objc_msgSend (v, Selector.GetHandle ("integerValue")));
}

/// <param name="shape">To be added.</param>
Expand Down
4 changes: 2 additions & 2 deletions src/CoreServices/LaunchServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ public static NSUrl [] GetApplicationUrlsForUrl (NSUrl url, LSRoles roles = LSRo
if (url is null)
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (url));

var result = NSArray.ArrayFromHandle<NSUrl> (
var result = NSArray.NonNullArrayFromHandleDropNullElements<NSUrl> (
LSCopyApplicationURLsForURL (url.Handle, roles),
releaseHandle: true
);
Expand Down Expand Up @@ -260,7 +260,7 @@ public static NSUrl [] GetApplicationUrlsForBundleIdentifier (string bundleIdent

var bundleIdentifierHandle = CFString.CreateNative (bundleIdentifier);
try {
return NSArray.ArrayFromHandle<NSUrl> (
return NSArray.NonNullArrayFromHandleDropNullElements<NSUrl> (
LSCopyApplicationURLsForBundleIdentifier (bundleIdentifierHandle, IntPtr.Zero),
releaseHandle: true
);
Expand Down
4 changes: 1 addition & 3 deletions src/CoreText/Adapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,7 @@ public static void AssertWritable (NSDictionary dictionary)
var cfArrayRef = CFDictionary.GetValue (dictionary.Handle, key.Handle);
GC.KeepAlive (dictionary);
GC.KeepAlive (key);
if (cfArrayRef == NativeHandle.Zero || CFArray.GetCount (cfArrayRef) == 0)
return new T [0];
return NSArray.ArrayFromHandle (cfArrayRef, converter);
return NSArray.NonNullArrayFromHandleDropNullElements (cfArrayRef, converter);
}

public static float? GetSingleValue (IDictionary<NSObject, NSObject> dictionary, NSObject? key)
Expand Down
4 changes: 1 addition & 3 deletions src/CoreText/CTFont.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3560,9 +3560,7 @@ public CTFontFeatureSettings [] GetFeatureSettings ()
public CTFontTable [] GetAvailableTables (CTFontTableOptions options)
{
var cfArrayRef = CTFontCopyAvailableTables (Handle, options);
if (cfArrayRef == IntPtr.Zero)
return Array.Empty<CTFontTable> ();
return NSArray.ArrayFromHandle (cfArrayRef, v => {
return NSArray.NonNullArrayFromHandle (cfArrayRef, v => {
return (CTFontTable) (uint) (IntPtr) v;
}, true);
}
Expand Down
24 changes: 6 additions & 18 deletions src/CoreText/CTFontManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -153,18 +153,6 @@ static NSArray EnsureNonNullArray (object [] items, string name)
return NSArray.FromObjects (items);
}

static T []? ArrayFromHandle<T> (IntPtr handle, bool releaseAfterUse) where T : class, INativeObject
{
if (handle == IntPtr.Zero)
return null;
try {
return NSArray.ArrayFromHandle<T> (handle);
} finally {
if (releaseAfterUse)
CFObject.CFRelease (handle);
}
}

[SupportedOSPlatform ("ios")]
[SupportedOSPlatform ("maccatalyst")]
[SupportedOSPlatform ("macos")]
Expand Down Expand Up @@ -198,7 +186,7 @@ static NSArray EnsureNonNullArray (object [] items, string name)
return null;
GC.KeepAlive (arr);
}
return ArrayFromHandle<NSError> (error_array, releaseAfterUse: true);
return NSArray.ArrayFromHandleDropNullElements<NSError> (error_array, releaseHandle: true);
}
}

Expand All @@ -211,7 +199,7 @@ static unsafe byte TrampolineRegistrationHandler (IntPtr block, /* NSArray */ In
if (del is null)
return 0;

var rv = del (NSArray.ArrayFromHandle<NSError> (errors), done == 0 ? false : true);
var rv = del (NSArray.NonNullArrayFromHandleDropNullElements<NSError> (errors), done == 0 ? false : true);
return rv ? (byte) 1 : (byte) 0;
}

Expand Down Expand Up @@ -308,7 +296,7 @@ public static void RegisterFonts (NSUrl [] fontUrls, CTFontManagerScope scope, b
return null;
GC.KeepAlive (arr);
}
return ArrayFromHandle<NSError> (error_array, releaseAfterUse: true);
return NSArray.ArrayFromHandleDropNullElements<NSError> (error_array, releaseHandle: true);
}
}

Expand Down Expand Up @@ -589,7 +577,7 @@ public unsafe static void UnregisterFontDescriptors (CTFontDescriptor [] fontDes
{
var p = CTFontManagerCopyRegisteredFontDescriptors (scope, enabled.AsByte ());
// Copy/Create rule - we must release the CFArrayRef
return ArrayFromHandle<CTFontDescriptor> (p, releaseAfterUse: true);
return NSArray.ArrayFromHandleDropNullElements<CTFontDescriptor> (p, releaseHandle: true);
}
#endif

Expand Down Expand Up @@ -628,7 +616,7 @@ public unsafe static void UnregisterFontDescriptors (CTFontDescriptor [] fontDes
var p = CTFontManagerCreateFontDescriptorsFromData (data.Handle);
GC.KeepAlive (data);
// Copy/Create rule - we must release the CFArrayRef
return ArrayFromHandle<CTFontDescriptor> (p, releaseAfterUse: true);
return NSArray.ArrayFromHandleDropNullElements<CTFontDescriptor> (p, releaseHandle: true);
}

#if __IOS__
Expand Down Expand Up @@ -676,7 +664,7 @@ static unsafe void TrampolineRequestFonts (IntPtr block, /* CFArray */ IntPtr fo
{
var del = BlockLiteral.GetTarget<CTFontManagerRequestFontsHandler> (block);
if (del is not null)
del (NSArray.ArrayFromHandle<CTFontDescriptor> (fontDescriptors));
del (NSArray.NonNullArrayFromHandleDropNullElements<CTFontDescriptor> (fontDescriptors));
}

[SupportedOSPlatform ("ios13.0")]
Expand Down
2 changes: 1 addition & 1 deletion src/CoreVideo/CVPixelFormatDescription.cs
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ static CVPixelFormatDescription ()
/// <summary>Get all the known pixel format types.</summary>
public static NSNumber [] AllTypes {
get {
return NSArray.ArrayFromHandle<NSNumber> (CVPixelFormatDescriptionArrayCreateWithAllPixelFormatTypes (IntPtr.Zero), releaseHandle: true);
return NSArray.NonNullArrayFromHandleDropNullElements<NSNumber> (CVPixelFormatDescriptionArrayCreateWithAllPixelFormatTypes (IntPtr.Zero), releaseHandle: true);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/Foundation/DictionaryContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ bool TryGetNativeValue (NativeHandle key, out NativeHandle value)
if (!TryGetNativeValue (key, out var value))
return null;

return NSArray.ArrayFromHandle<T> (value);
return NSArray.ArrayFromHandleDropNullElements<T> (value);
}

/// <summary>Returns the nullable array of <typeparamref name="T" /> associated with the specified <paramref name="key" />.</summary>
Expand Down
Loading
Loading