From a10d3bedd44a3ef428d2f05d1d06fc4d3b7a55e0 Mon Sep 17 00:00:00 2001 From: Michael Grosse Huelsewiesche Date: Mon, 22 Apr 2024 17:21:11 -0400 Subject: [PATCH] Fixing a possible null pointer exception and removing unnecessary nullability for settings --- Analytics-CSharp/Segment/Analytics/Analytics.cs | 16 +++++----------- Analytics-CSharp/Segment/Analytics/Timeline.cs | 10 +++++++--- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/Analytics-CSharp/Segment/Analytics/Analytics.cs b/Analytics-CSharp/Segment/Analytics/Analytics.cs index 06325db..7c2cb68 100644 --- a/Analytics-CSharp/Segment/Analytics/Analytics.cs +++ b/Analytics-CSharp/Segment/Analytics/Analytics.cs @@ -176,9 +176,9 @@ public virtual void Reset() /// it's not recommended to be used in async method. /// /// Instance of - public virtual Settings? Settings() + public virtual Settings Settings() { - Task task = SettingsAsync(); + Task task = SettingsAsync(); task.Wait(); return task.Result; } @@ -187,16 +187,10 @@ public virtual void Reset() /// Retrieve the settings. /// /// Instance of - public virtual async Task SettingsAsync() + public virtual async Task SettingsAsync() { - Settings? returnSettings = null; - IState system = await Store.CurrentState(); - if (system is System convertedSystem) - { - returnSettings = convertedSystem._settings; - } - - return returnSettings; + System system = await Store.CurrentState(); + return system._settings; } #endregion diff --git a/Analytics-CSharp/Segment/Analytics/Timeline.cs b/Analytics-CSharp/Segment/Analytics/Timeline.cs index 9b002b3..c2d4dbf 100644 --- a/Analytics-CSharp/Segment/Analytics/Timeline.cs +++ b/Analytics-CSharp/Segment/Analytics/Timeline.cs @@ -160,18 +160,22 @@ internal void Add(Plugin plugin) Analytics analytics = plugin.Analytics; analytics.AnalyticsScope.Launch(analytics.AnalyticsDispatcher, async () => { - Settings? settings = await plugin.Analytics.SettingsAsync(); + Settings settings = await plugin.Analytics.SettingsAsync(); + // Fetch system afterwards for a minuscule but cool performance gain System system = await analytics.Store.CurrentState(); + // Don't initialize unless we have updated settings from the web. // CheckSettings will initialize everything added before then, so wait until other inits have happened. - if (settings.HasValue && system._initializedPlugins.Count > 0) + // Check for nullability because CurrentState returns default(IState) which could make the .Count throw a NullReferenceException + if (system._initializedPlugins != null && system._initializedPlugins.Count > 0) { await analytics.Store.Dispatch(new System.AddInitializedPluginAction(new HashSet{plugin.GetHashCode()})); - plugin.Update(settings.Value, UpdateType.Initial); + plugin.Update(settings, UpdateType.Initial); } }); } + internal void Remove(Plugin plugin) => _plugins.RemoveAll(tempPlugin => tempPlugin == plugin); internal RawEvent Execute(RawEvent incomingEvent)