From 715e67691e0b00de571044a47418f2945ff8af6f Mon Sep 17 00:00:00 2001 From: David Date: Thu, 20 Apr 2023 17:01:21 -0400 Subject: [PATCH] fix: Adjust nullability of ApiExtensibility --- .../Extensibility/ApiExtensibility.cs | 22 +++++++++++++++++-- .../DataTransfer/DataTransferManager.skia.cs | 2 +- .../Haptics/SimpleHapticsController.skia.cs | 5 +---- .../Media/Playback/MediaPlayer.others.cs | 2 ++ .../Connectivity/ConnectionProfile.skia.cs | 2 +- .../UI/ViewManagement/ApplicationView.skia.cs | 5 +---- 6 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/Uno.Foundation/Extensibility/ApiExtensibility.cs b/src/Uno.Foundation/Extensibility/ApiExtensibility.cs index 95205dda3e..5eb89516df 100644 --- a/src/Uno.Foundation/Extensibility/ApiExtensibility.cs +++ b/src/Uno.Foundation/Extensibility/ApiExtensibility.cs @@ -1,4 +1,8 @@ -namespace Uno.Foundation.Extensibility; +#nullable enable + +using System.Diagnostics.CodeAnalysis; + +namespace Uno.Foundation.Extensibility; /// /// Registry for API existensibility providers, used to provide optional @@ -61,7 +65,8 @@ public static class ApiExtensibility /// An optional owner to be passed to the extension constructor /// The instance if the creation was successful /// True if the creation suceeded, otherwise False. - public static bool CreateInstance(object owner, out T instance) where T : class + public static bool CreateInstance(object owner, [NotNullWhen(true)] out T? instance) + where T : class { lock (_gate) { @@ -76,4 +81,17 @@ public static class ApiExtensibility return false; } + + internal static T CreateInstance(object owner) + where T : class + { + if (CreateInstance(owner, out var instance)) + { + return instance; + } + else + { + throw new InvalidOperationException($"Unable to find {typeof(T)} extension"); + } + } } diff --git a/src/Uno.UWP/ApplicationModel/DataTransfer/DataTransferManager.skia.cs b/src/Uno.UWP/ApplicationModel/DataTransfer/DataTransferManager.skia.cs index c71c069b3f..8bb0dcf70b 100644 --- a/src/Uno.UWP/ApplicationModel/DataTransfer/DataTransferManager.skia.cs +++ b/src/Uno.UWP/ApplicationModel/DataTransfer/DataTransferManager.skia.cs @@ -11,7 +11,7 @@ namespace Windows.ApplicationModel.DataTransfer { private static readonly Lazy _dataTransferManagerExtension = new Lazy(() => { - if (ApiExtensibility.CreateInstance(typeof(DataTransferManager), out IDataTransferManagerExtension dataTransferManagerExtension)) + if (ApiExtensibility.CreateInstance(typeof(DataTransferManager), out IDataTransferManagerExtension? dataTransferManagerExtension)) { return dataTransferManagerExtension; } diff --git a/src/Uno.UWP/Devices/Haptics/SimpleHapticsController.skia.cs b/src/Uno.UWP/Devices/Haptics/SimpleHapticsController.skia.cs index c766f01719..1e4af8f74c 100644 --- a/src/Uno.UWP/Devices/Haptics/SimpleHapticsController.skia.cs +++ b/src/Uno.UWP/Devices/Haptics/SimpleHapticsController.skia.cs @@ -12,10 +12,7 @@ namespace Windows.Devices.Haptics partial void InitPlatform() { - if (!ApiExtensibility.CreateInstance(typeof(SimpleHapticsController), out _simpleHapticsControllerExtension)) - { - throw new InvalidOperationException($"Unable to find ISimpleHapticsControllerExtension extension"); - } + _simpleHapticsControllerExtension = ApiExtensibility.CreateInstance(typeof(SimpleHapticsController)); } public IReadOnlyList SupportedFeedback => diff --git a/src/Uno.UWP/Media/Playback/MediaPlayer.others.cs b/src/Uno.UWP/Media/Playback/MediaPlayer.others.cs index 47545448c5..dd08963557 100644 --- a/src/Uno.UWP/Media/Playback/MediaPlayer.others.cs +++ b/src/Uno.UWP/Media/Playback/MediaPlayer.others.cs @@ -24,6 +24,8 @@ namespace Windows.Media.Playback { this.Log().Error("Unable to create an instance of IMediaPlayerExtension. MediaPlayer will not work."); } + + return; } _extension.Events = new MediaPlayerEvents(this); diff --git a/src/Uno.UWP/Networking/Connectivity/ConnectionProfile.skia.cs b/src/Uno.UWP/Networking/Connectivity/ConnectionProfile.skia.cs index a740a7943b..9ff2052752 100644 --- a/src/Uno.UWP/Networking/Connectivity/ConnectionProfile.skia.cs +++ b/src/Uno.UWP/Networking/Connectivity/ConnectionProfile.skia.cs @@ -8,7 +8,7 @@ namespace Windows.Networking.Connectivity { public partial class ConnectionProfile { - private IConnectionProfileExtension _connectionProfileExtension; + private IConnectionProfileExtension? _connectionProfileExtension; internal static ConnectionProfile GetInternetConnectionProfile() => new ConnectionProfile(); diff --git a/src/Uno.UWP/UI/ViewManagement/ApplicationView.skia.cs b/src/Uno.UWP/UI/ViewManagement/ApplicationView.skia.cs index ee39f3d38c..903390b026 100644 --- a/src/Uno.UWP/UI/ViewManagement/ApplicationView.skia.cs +++ b/src/Uno.UWP/UI/ViewManagement/ApplicationView.skia.cs @@ -19,10 +19,7 @@ namespace Windows.UI.ViewManagement public ApplicationView() { - if (!ApiExtensibility.CreateInstance(this, out _applicationViewExtension)) - { - throw new InvalidOperationException($"Unable to find IApplicationViewExtension extension"); - } + _applicationViewExtension = ApiExtensibility.CreateInstance(this); } public string Title -- GitLab