Fixes build warnings recently introduced (#4506)

* Fixed warnings I recently introduced.

Replaced nullable App references with null-forgiving operator (!) in MessageBox and dialog calls to suppress nullable warnings. Updated XML docs to use Dim.Fill() and clarified method references. Made Application.Popover registration null-safe. Fixed test output helper usage in ShadowTests. No functional changes.

* Fixes Release build warnings
This commit is contained in:
Tig
2025-12-17 12:57:38 -07:00
committed by GitHub
parent 1a54ff0872
commit ff18ad4532
24 changed files with 79 additions and 79 deletions

View File

@@ -101,13 +101,13 @@ public class ExampleWindow : Window
{
if (userNameText.Text == "admin" && passwordText.Text == "password")
{
MessageBox.Query (App, "Logging In", "Login Successful", "Ok");
MessageBox.Query (App!, "Logging In", "Login Successful", "Ok");
UserName = userNameText.Text;
Application.RequestStop ();
}
else
{
MessageBox.ErrorQuery (App, "Logging In", "Incorrect username or password", "Ok");
MessageBox.ErrorQuery (App!, "Logging In", "Incorrect username or password", "Ok");
}
// Anytime Accepting is handled, make sure to set e.Handled to true.
e.Handled = true;

View File

@@ -100,13 +100,13 @@ public class ExampleWindow : Runnable<string>
{
if (userNameText.Text == "admin" && passwordText.Text == "password")
{
MessageBox.Query (App, "Logging In", "Login Successful", "Ok");
MessageBox.Query (App!, "Logging In", "Login Successful", "Ok");
Result = userNameText.Text;
App?.RequestStop ();
}
else
{
MessageBox.ErrorQuery (App, "Logging In", "Incorrect username or password", "Ok");
MessageBox.ErrorQuery (App!, "Logging In", "Incorrect username or password", "Ok");
}
// When Accepting is handled, set e.Handled to true to prevent further processing.
e.Handled = true;

View File

@@ -78,7 +78,7 @@ public class AnimationScenario : Scenario
if (!f.Exists)
{
Debug.WriteLine ($"Could not find {f.FullName}");
MessageBox.ErrorQuery (_imageView?.App, "Could not find gif", $"Could not find\n{f.FullName}", "Ok");
MessageBox.ErrorQuery (_imageView?.App!, "Could not find gif", $"Could not find\n{f.FullName}", "Ok");
return;
}

View File

@@ -153,7 +153,7 @@ public class ConfigurationEditor : Scenario
continue;
}
int? result = MessageBox.Query (editor?.App,
int? result = MessageBox.Query (editor?.App!,
"Save Changes",
$"Save changes to {editor?.FileInfo!.Name}",
"_Yes",

View File

@@ -129,7 +129,7 @@ public class ContextMenus : Scenario
{
Title = "_Configuration...",
HelpText = "Show configuration",
Action = () => MessageBox.Query (app,
Action = () => MessageBox.Query (app!,
50,
10,
"Configuration",
@@ -147,7 +147,7 @@ public class ContextMenus : Scenario
Title = "_Setup...",
HelpText = "Perform setup",
Action = () => MessageBox
.Query (app,
.Query (app!,
50,
10,
"Setup",
@@ -161,7 +161,7 @@ public class ContextMenus : Scenario
Title = "_Maintenance...",
HelpText = "Maintenance mode",
Action = () => MessageBox
.Query (app,
.Query (app!,
50,
10,
"Maintenance",

View File

@@ -160,7 +160,7 @@ public class DimEditor : EditorBase
}
catch (Exception e)
{
MessageBox.ErrorQuery (App, "Exception", e.Message, "Ok");
MessageBox.ErrorQuery (App!, "Exception", e.Message, "Ok");
}
}
}

View File

@@ -157,7 +157,7 @@ public class PosEditor : EditorBase
}
catch (Exception e)
{
MessageBox.ErrorQuery (App, "Exception", e.Message, "Ok");
MessageBox.ErrorQuery (App!, "Exception", e.Message, "Ok");
}
}
}

View File

@@ -347,7 +347,7 @@ public class Menus : Scenario
};
ContextMenu.EnableForDesign (ref host);
Application.Popover.Register (ContextMenu);
Application.Popover?.Register (ContextMenu);
ContextMenu.Visible = false;

View File

@@ -566,6 +566,6 @@ public class Shortcuts : Scenario
{
e.Handled = true;
var view = sender as View;
MessageBox.Query ((sender as View)?.App, "Hi", $"You clicked {view?.Text}", "_Ok");
MessageBox.Query ((sender as View)?.App!, "Hi", $"You clicked {view?.Text}", "_Ok");
}
}

View File

@@ -223,7 +223,7 @@ public class SingleBackgroundWorker : Scenario
bool Close ()
{
int? n = MessageBox.Query (App,
int? n = MessageBox.Query (App!,
50,
7,
"Close Window.",

View File

@@ -1032,7 +1032,7 @@ public class TableEditor : Scenario
}
catch (Exception ex)
{
MessageBox.ErrorQuery ((sender as View)?.App, 60, 20, "Failed to set text", ex.Message, "Ok");
MessageBox.ErrorQuery ((sender as View)?.App!, 60, 20, "Failed to set text", ex.Message, "Ok");
}
_tableView!.Update ();
@@ -1171,7 +1171,7 @@ public class TableEditor : Scenario
}
catch (Exception e)
{
MessageBox.ErrorQuery (_tableView?.App, "Could not find local drives", e.Message, "Ok");
MessageBox.ErrorQuery (_tableView?.App!, "Could not find local drives", e.Message, "Ok");
}
_tableView!.Table = source;
@@ -1235,7 +1235,7 @@ public class TableEditor : Scenario
}
catch (Exception ex)
{
MessageBox.ErrorQuery (_tableView.App, 60, 20, "Failed to set", ex.Message, "Ok");
MessageBox.ErrorQuery (_tableView.App!, 60, 20, "Failed to set", ex.Message, "Ok");
}
_tableView!.Update ();

View File

@@ -47,7 +47,7 @@ public sealed class Transparent : Scenario
};
appButton.Accepting += (sender, args) =>
{
MessageBox.Query ((sender as View)?.App, "AppButton", "Transparency is cool!", "_Ok");
MessageBox.Query ((sender as View)?.App!, "AppButton", "Transparency is cool!", "_Ok");
args.Handled = true;
};
appWindow.Add (appButton);
@@ -112,7 +112,7 @@ public sealed class Transparent : Scenario
};
button.Accepting += (sender, args) =>
{
MessageBox.Query (App, "Clicked!", "Button in Transparent View", "_Ok");
MessageBox.Query (App!, "Clicked!", "Button in Transparent View", "_Ok");
args.Handled = true;
};

View File

@@ -132,7 +132,7 @@ public sealed class WideGlyphs : Scenario
};
arrangeableViewAtOdd.Accepting += (sender, args) =>
{
MessageBox.Query ((sender as View)?.App, "Button Pressed", "You Pressed it!");
MessageBox.Query ((sender as View)?.App!, "Button Pressed", "You Pressed it!");
};
appWindow.Add (arrangeableViewAtOdd);

View File

@@ -83,13 +83,13 @@ public class WizardAsView : Scenario
wizard.Finished += (s, args) =>
{
//args.Cancel = true;
MessageBox.Query ((s as View)?.App, "Setup Wizard", "Finished", "Ok");
MessageBox.Query ((s as View)?.App!, "Setup Wizard", "Finished", "Ok");
Application.RequestStop ();
};
wizard.Cancelled += (s, args) =>
{
int? btn = MessageBox.Query ((s as View)?.App, "Setup Wizard", "Are you sure you want to cancel?", "Yes", "No");
int? btn = MessageBox.Query ((s as View)?.App!, "Setup Wizard", "Are you sure you want to cancel?", "Yes", "No");
args.Cancel = btn == 1;
if (btn == 0)
@@ -126,7 +126,7 @@ public class WizardAsView : Scenario
{
secondStep.Title = "2nd Step";
MessageBox.Query ((s as View)?.App,
MessageBox.Query ((s as View)?.App!,
"Wizard Scenario",
"This Wizard Step's title was changed to '2nd Step'",
"Ok"

View File

@@ -18,7 +18,6 @@ using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Reflection;
using System.Reflection.Metadata;
using System.Text;
using System.Text.Json;
using Microsoft.Extensions.Logging;
@@ -57,8 +56,9 @@ public class UICatalog
{
private static string? _forceDriver;
private static string? _uiCatalogDriver;
#if DEBUG_IDISPOSABLE
private static string? _scenarioDriver;
#endif
public static string LogFilePath { get; set; } = string.Empty;
public static LoggingLevelSwitch LogLevelSwitch { get; } = new ();
public const string LOGFILE_LOCATION = "logs";
@@ -90,13 +90,14 @@ public class UICatalog
// Add validator separately (not chained)
driverOption.AddValidator (result =>
{
var value = result.GetValueOrDefault<string> ();
if (result.Tokens.Count > 0 && !allowedDrivers.Contains (value))
{
result.ErrorMessage = $"Invalid driver name '{value}'. Allowed values: {string.Join (", ", allowedDrivers)}";
}
});
{
var value = result.GetValueOrDefault<string> ();
if (result.Tokens.Count > 0 && !allowedDrivers.Contains (value))
{
result.ErrorMessage = $"Invalid driver name '{value}'. Allowed values: {string.Join (", ", allowedDrivers)}";
}
});
// Configuration Management
Option<bool> disableConfigManagement = new (
@@ -137,8 +138,8 @@ public class UICatalog
getDefaultValue: () => "none"
).FromAmong (
UICatalogRunnable.CachedScenarios.Select (s => s.GetName ())
.Append ("none")
.ToArray ()
.Append ("none")
.ToArray ()
);
var rootCommand = new RootCommand ("A comprehensive sample library and test app for Terminal.Gui")
@@ -146,8 +147,7 @@ public class UICatalog
scenarioArgument, debugLogLevel, benchmarkFlag, benchmarkTimeout, resultsFile, driverOption, disableConfigManagement
};
rootCommand.SetHandler (
context =>
rootCommand.SetHandler (context =>
{
var options = new UICatalogCommandLineOptions
{
@@ -179,14 +179,15 @@ public class UICatalog
return 0;
}
var parseResult = parser.Parse (args);
ParseResult parseResult = parser.Parse (args);
if (parseResult.Errors.Count > 0)
{
foreach (var error in parseResult.Errors)
foreach (ParseError error in parseResult.Errors)
{
Console.Error.WriteLine (error.Message);
}
return 1; // Non-zero exit code for error
}
@@ -204,16 +205,16 @@ public class UICatalog
public static LogEventLevel LogLevelToLogEventLevel (LogLevel logLevel)
{
return logLevel switch
{
LogLevel.Trace => LogEventLevel.Verbose,
LogLevel.Debug => LogEventLevel.Debug,
LogLevel.Information => LogEventLevel.Information,
LogLevel.Warning => LogEventLevel.Warning,
LogLevel.Error => LogEventLevel.Error,
LogLevel.Critical => LogEventLevel.Fatal,
LogLevel.None => LogEventLevel.Fatal, // Default to Fatal if None is specified
_ => LogEventLevel.Fatal // Default to Information for any unspecified LogLevel
};
{
LogLevel.Trace => LogEventLevel.Verbose,
LogLevel.Debug => LogEventLevel.Debug,
LogLevel.Information => LogEventLevel.Information,
LogLevel.Warning => LogEventLevel.Warning,
LogLevel.Error => LogEventLevel.Error,
LogLevel.Critical => LogEventLevel.Fatal,
LogLevel.None => LogEventLevel.Fatal, // Default to Fatal if None is specified
_ => LogEventLevel.Fatal // Default to Information for any unspecified LogLevel
};
}
private static ILogger CreateLogger ()
@@ -232,8 +233,7 @@ public class UICatalog
.CreateLogger ();
// Create a logger factory compatible with Microsoft.Extensions.Logging
using ILoggerFactory loggerFactory = LoggerFactory.Create (
builder =>
using ILoggerFactory loggerFactory = LoggerFactory.Create (builder =>
{
builder
.AddSerilog (dispose: true) // Integrate Serilog with ILogger
@@ -246,7 +246,8 @@ public class UICatalog
/// <summary>
/// Shows the UI Catalog selection UI. When the user selects a Scenario to run, the UI Catalog main app UI is
/// killed and the Scenario is run as though it were Application.TopRunnable. When the Scenario exits, this function exits.
/// killed and the Scenario is run as though it were Application.TopRunnable. When the Scenario exits, this function
/// exits.
/// </summary>
/// <returns></returns>
private static Scenario RunUICatalogRunnable ()
@@ -257,7 +258,7 @@ public class UICatalog
// If the user specified a driver on the command line then use it,
// ignoring Config files.
Application.Init (driverName: _forceDriver);
Application.Init (_forceDriver);
_uiCatalogDriver = Application.Driver!.GetName ();
@@ -326,10 +327,7 @@ public class UICatalog
ThemeManager.ThemeChanged += ThemeManagerOnThemeChanged;
}
private static void ThemeManagerOnThemeChanged (object? sender, EventArgs<string> e)
{
CM.Apply ();
}
private static void ThemeManagerOnThemeChanged (object? sender, EventArgs<string> e) { CM.Apply (); }
private static void StopConfigWatcher ()
{
@@ -372,11 +370,10 @@ public class UICatalog
}
int item = UICatalogRunnable.CachedScenarios!.IndexOf (
UICatalogRunnable.CachedScenarios!.FirstOrDefault (
s =>
s.GetName ()
.Equals (options.Scenario, StringComparison.OrdinalIgnoreCase)
)!);
UICatalogRunnable.CachedScenarios!.FirstOrDefault (s =>
s.GetName ()
.Equals (options.Scenario, StringComparison.OrdinalIgnoreCase)
)!);
UICatalogRunnable.CachedSelectedScenario = (Scenario)Activator.CreateInstance (UICatalogRunnable.CachedScenarios [item].GetType ())!;
BenchmarkResults? results = RunScenario (UICatalogRunnable.CachedSelectedScenario, options.Benchmark);

View File

@@ -155,7 +155,7 @@ public class UICatalogRunnable : Runnable
"_About...",
"About UI Catalog",
() => MessageBox.Query (
App,
App!,
"",
GetAboutBoxMessage (),
wrapMessage: false,