[Foundation] Improve nullability in NSArray.FromArray.#24873
Conversation
* Improve nullability annotations for FromArray<T> (accept NSArray?, return T[]?). * Add a ToNonNullArrayDropNullElements<T> variant that guarantees a non-null return value. * Add an ArrayFromHandleDropNullElements overload with NSNullBehavior parameter. * Rewrite FromArray<T> to use ArrayFromHandleDropNullElements. * Update UIFontDescriptor.CascadeList to use ToNonNullArrayDropNullElements. * Update bgen to append '!' for non-nullable wrapped array properties. * Fix MTKMesh.FromAsset to annotate sourceMeshes as MDLMesh[]?. * Add a test for MTKMesh.FromAsset. Contributes towards #17285. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR improves nullability correctness and array conversion behavior for Apple bindings/tests, and adds coverage for MetalKit’s MTKMesh.FromAsset wrapper.
Changes:
- Update
NSArray.FromArray<T>to use the newer handle-based conversion path and add helpers for “drop null elements” conversions. - Adjust MetalKit
MTKMesh.FromAssetnullability and add a new NUnit test for the API. - Resolve a MetalKit type name ambiguity in registrar tests and simplify
UIFontDescriptor.CascadeListusing the new NSArray helper.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/monotouch-test/ObjCRuntime/RegistrarTest.cs | Qualifies MetalKit types with global:: to avoid namespace/type ambiguity. |
| tests/monotouch-test/Metal/MTKMeshTest.cs | Adds a new test validating MTKMesh.FromAsset behavior. |
| src/UIKit/UIFontDescriptor.cs | Uses a new NSArray helper to return a non-null cascade list (empty when absent). |
| src/MetalKit/MTKMesh.cs | Updates FromAsset wrapper signature to reflect nullable sourceMeshes. |
| src/Foundation/NSArray.cs | Adds handle-based “drop null elements” helper + updates FromArray<T> docs/signature/implementation. |
| src/bgen/Generator.cs | Updates generated code for wrapped array properties to account for FromArray<T> now being annotated nullable. |
Comments suppressed due to low confidence (1)
src/MetalKit/MTKMesh.cs:25
FromAssetcan succeed witherror == null(and fail witherror != null), so theout NSError errorparameter should be annotated as nullable (NSError?) to reflect actual behavior under nullable reference types. Otherwise the signature implies callers can always dereferenceerrorsafely, which isn't true.
public static MTKMesh []? FromAsset (MDLAsset asset, IMTLDevice device, out MDLMesh []? sourceMeshes, out NSError error)
{
NSArray aret;
var ret = FromAsset (asset, device, out aret, out error);
sourceMeshes = NSArray.FromArray<MDLMesh> (aret);
return ret;
You can also share your feedback on Copilot code review. Take the survey.
✅ [CI Build #407ae51] Build passed (Build packages) ✅Pipeline on Agent |
✅ [CI Build #407ae51] Build passed (Detect API changes) ✅Pipeline on Agent |
✅ [CI Build #407ae51] Build passed (Build macOS tests) ✅Pipeline on Agent |
✅ API diff for current PR / commitNET (empty diffs)✅ API diff vs stableNET (empty diffs)ℹ️ Generator diffGenerator Diff: vsdrops (html) vsdrops (raw diff) gist (raw diff) - Please review changes) Pipeline on Agent |
🚀 [CI Build #407ae51] Test results 🚀Test results✅ All tests passed on VSTS: test results. 🎉 All 156 tests passed 🎉 Tests counts✅ cecil: All 1 tests passed. Html Report (VSDrops) Download macOS tests✅ Tests on macOS Monterey (12): All 5 tests passed. Html Report (VSDrops) Download Pipeline on Agent |
Contributes towards #17285.