CmdPal: Null pattern matching based on is expression rather than overridable operators (#40972)
Some checks failed
Spell checking / Check Spelling (push) Has been cancelled
Spell checking / Report (Push) (push) Has been cancelled
Spell checking / Report (PR) (push) Has been cancelled
Spell checking / Update PR (push) Has been cancelled

What the title says. 😄 

Rather than relying on the potentially overloaded `!=` or `==` operators
when checking for null, now we'll use the `is` expression (possibly
combined with the `not` operator) to ensure correct checking. Probably
overkill for many of these classes, but decided to err on the side of
consistency. Would matter more on classes that may be inherited or
extended.

Using `is` and `is not` will provide us a guarantee that no
user-overloaded equality operators (`==`/`!=`) is invoked when a
`expression is null` is evaluated.

In code form, changed all instances of:

```c#
something != null

something == null
```

to:

```c#
something is not null

something is null
```

The one exception was checking null on a `KeyChord`. `KeyChord` is a
struct which is never null so VS will raise an error when trying this
versus just providing a warning when using `keyChord != null`. In
reality, we shouldn't do this check because it can't ever be null. In
the case of a `KeyChord` it **would** be a `KeyChord` equivalent to:

```c#
KeyChord keyChord = new ()
{
    Modifiers = 0,
    Vkey = 0,
    ScanCode = 0
};
```
This commit is contained in:
Michael Jolley 2025-08-18 06:07:28 -05:00 committed by GitHub
parent efb48aa163
commit 6acb793184
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
138 changed files with 395 additions and 431 deletions

View File

@ -24,7 +24,7 @@ public partial class ExtensionHostInstance
/// <param name="message">The log message to send</param> /// <param name="message">The log message to send</param>
public void LogMessage(ILogMessage message) public void LogMessage(ILogMessage message)
{ {
if (Host != null) if (Host is not null)
{ {
_ = Task.Run(async () => _ = Task.Run(async () =>
{ {
@ -47,7 +47,7 @@ public partial class ExtensionHostInstance
public void ShowStatus(IStatusMessage message, StatusContext context) public void ShowStatus(IStatusMessage message, StatusContext context)
{ {
if (Host != null) if (Host is not null)
{ {
_ = Task.Run(async () => _ = Task.Run(async () =>
{ {
@ -64,7 +64,7 @@ public partial class ExtensionHostInstance
public void HideStatus(IStatusMessage message) public void HideStatus(IStatusMessage message)
{ {
if (Host != null) if (Host is not null)
{ {
_ = Task.Run(async () => _ = Task.Run(async () =>
{ {

View File

@ -36,7 +36,7 @@ public abstract partial class AppExtensionHost : IExtensionHost
public IAsyncAction HideStatus(IStatusMessage? message) public IAsyncAction HideStatus(IStatusMessage? message)
{ {
if (message == null) if (message is null)
{ {
return Task.CompletedTask.AsAsyncAction(); return Task.CompletedTask.AsAsyncAction();
} }
@ -55,7 +55,7 @@ public abstract partial class AppExtensionHost : IExtensionHost
public IAsyncAction LogMessage(ILogMessage? message) public IAsyncAction LogMessage(ILogMessage? message)
{ {
if (message == null) if (message is null)
{ {
return Task.CompletedTask.AsAsyncAction(); return Task.CompletedTask.AsAsyncAction();
} }
@ -80,7 +80,7 @@ public abstract partial class AppExtensionHost : IExtensionHost
try try
{ {
var vm = StatusMessages.Where(messageVM => messageVM.Model.Unsafe == message).FirstOrDefault(); var vm = StatusMessages.Where(messageVM => messageVM.Model.Unsafe == message).FirstOrDefault();
if (vm != null) if (vm is not null)
{ {
StatusMessages.Remove(vm); StatusMessages.Remove(vm);
} }
@ -113,7 +113,7 @@ public abstract partial class AppExtensionHost : IExtensionHost
{ {
// If this message is already in the list of messages, just bring it to the top // If this message is already in the list of messages, just bring it to the top
var oldVm = StatusMessages.Where(messageVM => messageVM.Model.Unsafe == message).FirstOrDefault(); var oldVm = StatusMessages.Where(messageVM => messageVM.Model.Unsafe == message).FirstOrDefault();
if (oldVm != null) if (oldVm is not null)
{ {
Task.Factory.StartNew( Task.Factory.StartNew(
() => () =>
@ -142,7 +142,7 @@ public abstract partial class AppExtensionHost : IExtensionHost
public IAsyncAction ShowStatus(IStatusMessage? message, StatusContext context) public IAsyncAction ShowStatus(IStatusMessage? message, StatusContext context)
{ {
if (message == null) if (message is null)
{ {
return Task.CompletedTask.AsAsyncAction(); return Task.CompletedTask.AsAsyncAction();
} }

View File

@ -2,7 +2,6 @@
// The Microsoft Corporation licenses this file to you under the MIT license. // The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information. // See the LICENSE file in the project root for more information.
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.Mvvm.Messaging;
using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CmdPal.Core.ViewModels.Messages;
@ -35,13 +34,13 @@ public partial class CommandBarViewModel : ObservableObject,
[NotifyPropertyChangedFor(nameof(HasPrimaryCommand))] [NotifyPropertyChangedFor(nameof(HasPrimaryCommand))]
public partial CommandItemViewModel? PrimaryCommand { get; set; } public partial CommandItemViewModel? PrimaryCommand { get; set; }
public bool HasPrimaryCommand => PrimaryCommand != null && PrimaryCommand.ShouldBeVisible; public bool HasPrimaryCommand => PrimaryCommand is not null && PrimaryCommand.ShouldBeVisible;
[ObservableProperty] [ObservableProperty]
[NotifyPropertyChangedFor(nameof(HasSecondaryCommand))] [NotifyPropertyChangedFor(nameof(HasSecondaryCommand))]
public partial CommandItemViewModel? SecondaryCommand { get; set; } public partial CommandItemViewModel? SecondaryCommand { get; set; }
public bool HasSecondaryCommand => SecondaryCommand != null; public bool HasSecondaryCommand => SecondaryCommand is not null;
[ObservableProperty] [ObservableProperty]
public partial bool ShouldShowContextMenu { get; set; } = false; public partial bool ShouldShowContextMenu { get; set; } = false;
@ -58,14 +57,14 @@ public partial class CommandBarViewModel : ObservableObject,
private void SetSelectedItem(ICommandBarContext? value) private void SetSelectedItem(ICommandBarContext? value)
{ {
if (value != null) if (value is not null)
{ {
PrimaryCommand = value.PrimaryCommand; PrimaryCommand = value.PrimaryCommand;
value.PropertyChanged += SelectedItemPropertyChanged; value.PropertyChanged += SelectedItemPropertyChanged;
} }
else else
{ {
if (SelectedItem != null) if (SelectedItem is not null)
{ {
SelectedItem.PropertyChanged -= SelectedItemPropertyChanged; SelectedItem.PropertyChanged -= SelectedItemPropertyChanged;
} }
@ -88,7 +87,7 @@ public partial class CommandBarViewModel : ObservableObject,
private void UpdateContextItems() private void UpdateContextItems()
{ {
if (SelectedItem == null) if (SelectedItem is null)
{ {
SecondaryCommand = null; SecondaryCommand = null;
ShouldShowContextMenu = false; ShouldShowContextMenu = false;
@ -127,13 +126,13 @@ public partial class CommandBarViewModel : ObservableObject,
public ContextKeybindingResult CheckKeybinding(bool ctrl, bool alt, bool shift, bool win, VirtualKey key) public ContextKeybindingResult CheckKeybinding(bool ctrl, bool alt, bool shift, bool win, VirtualKey key)
{ {
var keybindings = SelectedItem?.Keybindings(); var keybindings = SelectedItem?.Keybindings();
if (keybindings != null) if (keybindings is not null)
{ {
// Does the pressed key match any of the keybindings? // Does the pressed key match any of the keybindings?
var pressedKeyChord = KeyChordHelpers.FromModifiers(ctrl, alt, shift, win, key, 0); var pressedKeyChord = KeyChordHelpers.FromModifiers(ctrl, alt, shift, win, key, 0);
if (keybindings.TryGetValue(pressedKeyChord, out var matchedItem)) if (keybindings.TryGetValue(pressedKeyChord, out var matchedItem))
{ {
return matchedItem != null ? PerformCommand(matchedItem) : ContextKeybindingResult.Unhandled; return matchedItem is not null ? PerformCommand(matchedItem) : ContextKeybindingResult.Unhandled;
} }
} }
@ -142,7 +141,7 @@ public partial class CommandBarViewModel : ObservableObject,
private ContextKeybindingResult PerformCommand(CommandItemViewModel? command) private ContextKeybindingResult PerformCommand(CommandItemViewModel? command)
{ {
if (command == null) if (command is null)
{ {
return ContextKeybindingResult.Unhandled; return ContextKeybindingResult.Unhandled;
} }

View File

@ -20,7 +20,7 @@ public partial class CommandContextItemViewModel(ICommandContextItem contextItem
public KeyChord? RequestedShortcut { get; private set; } public KeyChord? RequestedShortcut { get; private set; }
public bool HasRequestedShortcut => RequestedShortcut != null && (RequestedShortcut.Value != nullKeyChord); public bool HasRequestedShortcut => RequestedShortcut is not null && (RequestedShortcut.Value != nullKeyChord);
public override void InitializeProperties() public override void InitializeProperties()
{ {
@ -32,7 +32,7 @@ public partial class CommandContextItemViewModel(ICommandContextItem contextItem
base.InitializeProperties(); base.InitializeProperties();
var contextItem = Model.Unsafe; var contextItem = Model.Unsafe;
if (contextItem == null) if (contextItem is null)
{ {
return; // throw? return; // throw?
} }

View File

@ -68,7 +68,7 @@ public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBa
{ {
get get
{ {
List<IContextItemViewModel> l = _defaultCommandContextItem == null ? List<IContextItemViewModel> l = _defaultCommandContextItem is null ?
new() : new() :
[_defaultCommandContextItem]; [_defaultCommandContextItem];
@ -100,7 +100,7 @@ public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBa
} }
var model = _commandItemModel.Unsafe; var model = _commandItemModel.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
@ -128,7 +128,7 @@ public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBa
} }
var model = _commandItemModel.Unsafe; var model = _commandItemModel.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
@ -136,7 +136,7 @@ public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBa
Command.InitializeProperties(); Command.InitializeProperties();
var listIcon = model.Icon; var listIcon = model.Icon;
if (listIcon != null) if (listIcon is not null)
{ {
_listItemIcon = new(listIcon); _listItemIcon = new(listIcon);
_listItemIcon.InitializeProperties(); _listItemIcon.InitializeProperties();
@ -172,13 +172,13 @@ public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBa
} }
var model = _commandItemModel.Unsafe; var model = _commandItemModel.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
var more = model.MoreCommands; var more = model.MoreCommands;
if (more != null) if (more is not null)
{ {
MoreCommands = more MoreCommands = more
.Select(item => .Select(item =>
@ -300,7 +300,7 @@ public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBa
protected virtual void FetchProperty(string propertyName) protected virtual void FetchProperty(string propertyName)
{ {
var model = this._commandItemModel.Unsafe; var model = this._commandItemModel.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -308,7 +308,7 @@ public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBa
switch (propertyName) switch (propertyName)
{ {
case nameof(Command): case nameof(Command):
if (Command != null) if (Command is not null)
{ {
Command.PropertyChanged -= Command_PropertyChanged; Command.PropertyChanged -= Command_PropertyChanged;
} }
@ -339,7 +339,7 @@ public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBa
case nameof(model.MoreCommands): case nameof(model.MoreCommands):
var more = model.MoreCommands; var more = model.MoreCommands;
if (more != null) if (more is not null)
{ {
var newContextMenu = more var newContextMenu = more
.Select(item => .Select(item =>
@ -394,7 +394,7 @@ public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBa
// Extensions based on Command Palette SDK < 0.3 CommandItem class won't notify when Title changes because Command // Extensions based on Command Palette SDK < 0.3 CommandItem class won't notify when Title changes because Command
// or Command.Name change. This is a workaround to ensure that the Title is always up-to-date for extensions with old SDK. // or Command.Name change. This is a workaround to ensure that the Title is always up-to-date for extensions with old SDK.
var model = _commandItemModel.Unsafe; var model = _commandItemModel.Unsafe;
if (model != null) if (model is not null)
{ {
_itemTitle = model.Title; _itemTitle = model.Title;
} }
@ -430,7 +430,7 @@ public partial class CommandItemViewModel : ExtensionObjectViewModel, ICommandBa
Command.SafeCleanup(); Command.SafeCleanup();
var model = _commandItemModel.Unsafe; var model = _commandItemModel.Unsafe;
if (model != null) if (model is not null)
{ {
model.PropChanged -= Model_PropChanged; model.PropChanged -= Model_PropChanged;
} }

View File

@ -44,7 +44,7 @@ public partial class CommandViewModel : ExtensionObjectViewModel
} }
var model = Model.Unsafe; var model = Model.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
@ -67,13 +67,13 @@ public partial class CommandViewModel : ExtensionObjectViewModel
} }
var model = Model.Unsafe; var model = Model.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
var ico = model.Icon; var ico = model.Icon;
if (ico != null) if (ico is not null)
{ {
Icon = new(ico); Icon = new(ico);
Icon.InitializeProperties(); Icon.InitializeProperties();
@ -98,7 +98,7 @@ public partial class CommandViewModel : ExtensionObjectViewModel
protected void FetchProperty(string propertyName) protected void FetchProperty(string propertyName)
{ {
var model = Model.Unsafe; var model = Model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -125,7 +125,7 @@ public partial class CommandViewModel : ExtensionObjectViewModel
Icon = new(null); // necessary? Icon = new(null); // necessary?
var model = Model.Unsafe; var model = Model.Unsafe;
if (model != null) if (model is not null)
{ {
model.PropChanged -= Model_PropChanged; model.PropChanged -= Model_PropChanged;
} }

View File

@ -25,7 +25,7 @@ public partial class ConfirmResultViewModel(IConfirmationArgs _args, WeakReferen
public override void InitializeProperties() public override void InitializeProperties()
{ {
var model = Model.Unsafe; var model = Model.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }

View File

@ -28,7 +28,7 @@ public abstract partial class ContentPageViewModel : PageViewModel, ICommandBarC
public DetailsViewModel? Details { get; private set; } public DetailsViewModel? Details { get; private set; }
[MemberNotNullWhen(true, nameof(Details))] [MemberNotNullWhen(true, nameof(Details))]
public bool HasDetails => Details != null; public bool HasDetails => Details is not null;
/////// ICommandBarContext /////// /////// ICommandBarContext ///////
public IEnumerable<IContextItemViewModel> MoreCommands => Commands.Skip(1); public IEnumerable<IContextItemViewModel> MoreCommands => Commands.Skip(1);
@ -67,7 +67,7 @@ public abstract partial class ContentPageViewModel : PageViewModel, ICommandBarC
foreach (var item in newItems) foreach (var item in newItems)
{ {
var viewModel = ViewModelFromContent(item, PageContext); var viewModel = ViewModelFromContent(item, PageContext);
if (viewModel != null) if (viewModel is not null)
{ {
viewModel.InitializeProperties(); viewModel.InitializeProperties();
newContent.Add(viewModel); newContent.Add(viewModel);
@ -104,7 +104,7 @@ public abstract partial class ContentPageViewModel : PageViewModel, ICommandBarC
base.InitializeProperties(); base.InitializeProperties();
var model = _model.Unsafe; var model = _model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -133,7 +133,7 @@ public abstract partial class ContentPageViewModel : PageViewModel, ICommandBarC
}); });
var extensionDetails = model.Details; var extensionDetails = model.Details;
if (extensionDetails != null) if (extensionDetails is not null)
{ {
Details = new(extensionDetails, PageContext); Details = new(extensionDetails, PageContext);
Details.InitializeProperties(); Details.InitializeProperties();
@ -156,7 +156,7 @@ public abstract partial class ContentPageViewModel : PageViewModel, ICommandBarC
base.FetchProperty(propertyName); base.FetchProperty(propertyName);
var model = this._model.Unsafe; var model = this._model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -166,7 +166,7 @@ public abstract partial class ContentPageViewModel : PageViewModel, ICommandBarC
case nameof(Commands): case nameof(Commands):
var more = model.Commands; var more = model.Commands;
if (more != null) if (more is not null)
{ {
var newContextMenu = more var newContextMenu = more
.ToList() .ToList()
@ -216,7 +216,7 @@ public abstract partial class ContentPageViewModel : PageViewModel, ICommandBarC
break; break;
case nameof(Details): case nameof(Details):
var extensionDetails = model.Details; var extensionDetails = model.Details;
Details = extensionDetails != null ? new(extensionDetails, PageContext) : null; Details = extensionDetails is not null ? new(extensionDetails, PageContext) : null;
UpdateDetails(); UpdateDetails();
break; break;
} }
@ -248,7 +248,7 @@ public abstract partial class ContentPageViewModel : PageViewModel, ICommandBarC
[RelayCommand] [RelayCommand]
private void InvokePrimaryCommand(ContentPageViewModel page) private void InvokePrimaryCommand(ContentPageViewModel page)
{ {
if (PrimaryCommand != null) if (PrimaryCommand is not null)
{ {
WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new(PrimaryCommand.Command.Model, PrimaryCommand.Model)); WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new(PrimaryCommand.Command.Model, PrimaryCommand.Model));
} }
@ -258,7 +258,7 @@ public abstract partial class ContentPageViewModel : PageViewModel, ICommandBarC
[RelayCommand] [RelayCommand]
private void InvokeSecondaryCommand(ContentPageViewModel page) private void InvokeSecondaryCommand(ContentPageViewModel page)
{ {
if (SecondaryCommand != null) if (SecondaryCommand is not null)
{ {
WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new(SecondaryCommand.Command.Model, SecondaryCommand.Model)); WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new(SecondaryCommand.Command.Model, SecondaryCommand.Model));
} }
@ -285,7 +285,7 @@ public abstract partial class ContentPageViewModel : PageViewModel, ICommandBarC
Content.Clear(); Content.Clear();
var model = _model.Unsafe; var model = _model.Unsafe;
if (model != null) if (model is not null)
{ {
model.ItemsChanged -= Model_ItemsChanged; model.ItemsChanged -= Model_ItemsChanged;
} }

View File

@ -8,7 +8,6 @@ using CommunityToolkit.Mvvm.Messaging;
using Microsoft.CmdPal.Core.ViewModels.Messages; using Microsoft.CmdPal.Core.ViewModels.Messages;
using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit; using Microsoft.CommandPalette.Extensions.Toolkit;
using Microsoft.Diagnostics.Utilities;
using Windows.System; using Windows.System;
namespace Microsoft.CmdPal.Core.ViewModels; namespace Microsoft.CmdPal.Core.ViewModels;
@ -51,7 +50,7 @@ public partial class ContextMenuViewModel : ObservableObject,
public void UpdateContextItems() public void UpdateContextItems()
{ {
if (SelectedItem != null) if (SelectedItem is not null)
{ {
if (SelectedItem.MoreCommands.Count() > 1) if (SelectedItem.MoreCommands.Count() > 1)
{ {
@ -68,14 +67,14 @@ public partial class ContextMenuViewModel : ObservableObject,
return; return;
} }
if (SelectedItem == null) if (SelectedItem is null)
{ {
return; return;
} }
_lastSearchText = searchText; _lastSearchText = searchText;
if (CurrentContextMenu == null) if (CurrentContextMenu is null)
{ {
ListHelpers.InPlaceUpdateList(FilteredItems, []); ListHelpers.InPlaceUpdateList(FilteredItems, []);
return; return;
@ -124,7 +123,7 @@ public partial class ContextMenuViewModel : ObservableObject,
/// that have a shortcut key set.</returns> /// that have a shortcut key set.</returns>
public Dictionary<KeyChord, CommandContextItemViewModel> Keybindings() public Dictionary<KeyChord, CommandContextItemViewModel> Keybindings()
{ {
if (CurrentContextMenu == null) if (CurrentContextMenu is null)
{ {
return []; return [];
} }
@ -140,7 +139,7 @@ public partial class ContextMenuViewModel : ObservableObject,
public ContextKeybindingResult? CheckKeybinding(bool ctrl, bool alt, bool shift, bool win, VirtualKey key) public ContextKeybindingResult? CheckKeybinding(bool ctrl, bool alt, bool shift, bool win, VirtualKey key)
{ {
var keybindings = Keybindings(); var keybindings = Keybindings();
if (keybindings != null) if (keybindings is not null)
{ {
// Does the pressed key match any of the keybindings? // Does the pressed key match any of the keybindings?
var pressedKeyChord = KeyChordHelpers.FromModifiers(ctrl, alt, shift, win, key, 0); var pressedKeyChord = KeyChordHelpers.FromModifiers(ctrl, alt, shift, win, key, 0);
@ -190,7 +189,7 @@ public partial class ContextMenuViewModel : ObservableObject,
OnPropertyChanging(nameof(CurrentContextMenu)); OnPropertyChanging(nameof(CurrentContextMenu));
OnPropertyChanged(nameof(CurrentContextMenu)); OnPropertyChanged(nameof(CurrentContextMenu));
if (CurrentContextMenu != null) if (CurrentContextMenu is not null)
{ {
ListHelpers.InPlaceUpdateList(FilteredItems, [.. CurrentContextMenu!]); ListHelpers.InPlaceUpdateList(FilteredItems, [.. CurrentContextMenu!]);
} }
@ -198,7 +197,7 @@ public partial class ContextMenuViewModel : ObservableObject,
public ContextKeybindingResult InvokeCommand(CommandItemViewModel? command) public ContextKeybindingResult InvokeCommand(CommandItemViewModel? command)
{ {
if (command == null) if (command is null)
{ {
return ContextKeybindingResult.Unhandled; return ContextKeybindingResult.Unhandled;
} }

View File

@ -22,7 +22,7 @@ public partial class DetailsCommandsViewModel(
{ {
base.InitializeProperties(); base.InitializeProperties();
var model = _dataModel.Unsafe; var model = _dataModel.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }

View File

@ -16,7 +16,7 @@ public abstract partial class DetailsElementViewModel(IDetailsElement _detailsEl
public override void InitializeProperties() public override void InitializeProperties()
{ {
var model = _model.Unsafe; var model = _model.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }

View File

@ -18,7 +18,7 @@ public partial class DetailsLinkViewModel(
public Uri? Link { get; private set; } public Uri? Link { get; private set; }
public bool IsLink => Link != null; public bool IsLink => Link is not null;
public bool IsText => !IsLink; public bool IsText => !IsLink;
@ -26,14 +26,14 @@ public partial class DetailsLinkViewModel(
{ {
base.InitializeProperties(); base.InitializeProperties();
var model = _dataModel.Unsafe; var model = _dataModel.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
Text = model.Text ?? string.Empty; Text = model.Text ?? string.Empty;
Link = model.Link; Link = model.Link;
if (string.IsNullOrEmpty(Text) && Link != null) if (string.IsNullOrEmpty(Text) && Link is not null)
{ {
Text = Link.ToString(); Text = Link.ToString();
} }

View File

@ -22,7 +22,7 @@ public partial class DetailsTagsViewModel(
{ {
base.InitializeProperties(); base.InitializeProperties();
var model = _dataModel.Unsafe; var model = _dataModel.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }

View File

@ -26,7 +26,7 @@ public partial class DetailsViewModel(IDetails _details, WeakReference<IPageCont
public override void InitializeProperties() public override void InitializeProperties()
{ {
var model = _detailsModel.Unsafe; var model = _detailsModel.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
@ -41,7 +41,7 @@ public partial class DetailsViewModel(IDetails _details, WeakReference<IPageCont
UpdateProperty(nameof(HeroImage)); UpdateProperty(nameof(HeroImage));
var meta = model.Metadata; var meta = model.Metadata;
if (meta != null) if (meta is not null)
{ {
foreach (var element in meta) foreach (var element in meta)
{ {
@ -53,7 +53,7 @@ public partial class DetailsViewModel(IDetails _details, WeakReference<IPageCont
IDetailsTags => new DetailsTagsViewModel(element, this.PageContext), IDetailsTags => new DetailsTagsViewModel(element, this.PageContext),
_ => null, _ => null,
}; };
if (vm != null) if (vm is not null)
{ {
vm.InitializeProperties(); vm.InitializeProperties();
Metadata.Add(vm); Metadata.Add(vm);

View File

@ -16,7 +16,7 @@ public partial class IconDataViewModel : ObservableObject, IIconData
// If the extension previously gave us a Data, then died, the data will // If the extension previously gave us a Data, then died, the data will
// throw if we actually try to read it, but the pointer itself won't be // throw if we actually try to read it, but the pointer itself won't be
// null, so this is relatively safe. // null, so this is relatively safe.
public bool HasIcon => !string.IsNullOrEmpty(Icon) || Data.Unsafe != null; public bool HasIcon => !string.IsNullOrEmpty(Icon) || Data.Unsafe is not null;
// Locally cached properties from IIconData. // Locally cached properties from IIconData.
public string Icon { get; private set; } = string.Empty; public string Icon { get; private set; } = string.Empty;
@ -36,7 +36,7 @@ public partial class IconDataViewModel : ObservableObject, IIconData
public void InitializeProperties() public void InitializeProperties()
{ {
var model = _model.Unsafe; var model = _model.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }

View File

@ -26,7 +26,7 @@ public partial class IconInfoViewModel : ObservableObject, IIconInfo
public bool HasIcon(bool light) => IconForTheme(light).HasIcon; public bool HasIcon(bool light) => IconForTheme(light).HasIcon;
public bool IsSet => _model.Unsafe != null; public bool IsSet => _model.Unsafe is not null;
IIconData? IIconInfo.Dark => Dark; IIconData? IIconInfo.Dark => Dark;
@ -43,7 +43,7 @@ public partial class IconInfoViewModel : ObservableObject, IIconInfo
public void InitializeProperties() public void InitializeProperties()
{ {
var model = _model.Unsafe; var model = _model.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }

View File

@ -27,7 +27,7 @@ public partial class ListItemViewModel(IListItem model, WeakReference<IPageConte
public DetailsViewModel? Details { get; private set; } public DetailsViewModel? Details { get; private set; }
[MemberNotNullWhen(true, nameof(Details))] [MemberNotNullWhen(true, nameof(Details))]
public bool HasDetails => Details != null; public bool HasDetails => Details is not null;
public override void InitializeProperties() public override void InitializeProperties()
{ {
@ -40,7 +40,7 @@ public partial class ListItemViewModel(IListItem model, WeakReference<IPageConte
base.InitializeProperties(); base.InitializeProperties();
var li = Model.Unsafe; var li = Model.Unsafe;
if (li == null) if (li is null)
{ {
return; // throw? return; // throw?
} }
@ -50,7 +50,7 @@ public partial class ListItemViewModel(IListItem model, WeakReference<IPageConte
TextToSuggest = li.TextToSuggest; TextToSuggest = li.TextToSuggest;
Section = li.Section ?? string.Empty; Section = li.Section ?? string.Empty;
var extensionDetails = li.Details; var extensionDetails = li.Details;
if (extensionDetails != null) if (extensionDetails is not null)
{ {
Details = new(extensionDetails, PageContext); Details = new(extensionDetails, PageContext);
Details.InitializeProperties(); Details.InitializeProperties();
@ -67,7 +67,7 @@ public partial class ListItemViewModel(IListItem model, WeakReference<IPageConte
base.FetchProperty(propertyName); base.FetchProperty(propertyName);
var model = this.Model.Unsafe; var model = this.Model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -85,7 +85,7 @@ public partial class ListItemViewModel(IListItem model, WeakReference<IPageConte
break; break;
case nameof(Details): case nameof(Details):
var extensionDetails = model.Details; var extensionDetails = model.Details;
Details = extensionDetails != null ? new(extensionDetails, PageContext) : null; Details = extensionDetails is not null ? new(extensionDetails, PageContext) : null;
Details?.InitializeProperties(); Details?.InitializeProperties();
UpdateProperty(nameof(Details)); UpdateProperty(nameof(Details));
UpdateProperty(nameof(HasDetails)); UpdateProperty(nameof(HasDetails));
@ -136,7 +136,7 @@ public partial class ListItemViewModel(IListItem model, WeakReference<IPageConte
Details?.SafeCleanup(); Details?.SafeCleanup();
var model = Model.Unsafe; var model = Model.Unsafe;
if (model != null) if (model is not null)
{ {
// We don't need to revoke the PropChanged event handler here, // We don't need to revoke the PropChanged event handler here,
// because we are just overriding CommandItem's FetchProperty and // because we are just overriding CommandItem's FetchProperty and

View File

@ -298,11 +298,11 @@ public partial class ListViewModel : PageViewModel, IDisposable
[RelayCommand] [RelayCommand]
private void InvokeItem(ListItemViewModel? item) private void InvokeItem(ListItemViewModel? item)
{ {
if (item != null) if (item is not null)
{ {
WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new(item.Command.Model, item.Model)); WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new(item.Command.Model, item.Model));
} }
else if (ShowEmptyContent && EmptyContent.PrimaryCommand?.Model.Unsafe != null) else if (ShowEmptyContent && EmptyContent.PrimaryCommand?.Model.Unsafe is not null)
{ {
WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new( WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new(
EmptyContent.PrimaryCommand.Command.Model, EmptyContent.PrimaryCommand.Command.Model,
@ -314,14 +314,14 @@ public partial class ListViewModel : PageViewModel, IDisposable
[RelayCommand] [RelayCommand]
private void InvokeSecondaryCommand(ListItemViewModel? item) private void InvokeSecondaryCommand(ListItemViewModel? item)
{ {
if (item != null) if (item is not null)
{ {
if (item.SecondaryCommand != null) if (item.SecondaryCommand is not null)
{ {
WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new(item.SecondaryCommand.Command.Model, item.Model)); WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new(item.SecondaryCommand.Command.Model, item.Model));
} }
} }
else if (ShowEmptyContent && EmptyContent.SecondaryCommand?.Model.Unsafe != null) else if (ShowEmptyContent && EmptyContent.SecondaryCommand?.Model.Unsafe is not null)
{ {
WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new( WeakReferenceMessenger.Default.Send<PerformCommandMessage>(new(
EmptyContent.SecondaryCommand.Command.Model, EmptyContent.SecondaryCommand.Command.Model,
@ -332,12 +332,12 @@ public partial class ListViewModel : PageViewModel, IDisposable
[RelayCommand] [RelayCommand]
private void UpdateSelectedItem(ListItemViewModel? item) private void UpdateSelectedItem(ListItemViewModel? item)
{ {
if (_lastSelectedItem != null) if (_lastSelectedItem is not null)
{ {
_lastSelectedItem.PropertyChanged -= SelectedItemPropertyChanged; _lastSelectedItem.PropertyChanged -= SelectedItemPropertyChanged;
} }
if (item != null) if (item is not null)
{ {
SetSelectedItem(item); SetSelectedItem(item);
} }
@ -383,7 +383,7 @@ public partial class ListViewModel : PageViewModel, IDisposable
private void SelectedItemPropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) private void SelectedItemPropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
{ {
var item = _lastSelectedItem; var item = _lastSelectedItem;
if (item == null) if (item is null)
{ {
return; return;
} }
@ -438,7 +438,7 @@ public partial class ListViewModel : PageViewModel, IDisposable
base.InitializeProperties(); base.InitializeProperties();
var model = _model.Unsafe; var model = _model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -465,7 +465,7 @@ public partial class ListViewModel : PageViewModel, IDisposable
public void LoadMoreIfNeeded() public void LoadMoreIfNeeded()
{ {
var model = this._model.Unsafe; var model = this._model.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
@ -509,7 +509,7 @@ public partial class ListViewModel : PageViewModel, IDisposable
base.FetchProperty(propertyName); base.FetchProperty(propertyName);
var model = this._model.Unsafe; var model = this._model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -540,7 +540,7 @@ public partial class ListViewModel : PageViewModel, IDisposable
private void UpdateEmptyContent() private void UpdateEmptyContent()
{ {
UpdateProperty(nameof(ShowEmptyContent)); UpdateProperty(nameof(ShowEmptyContent));
if (!ShowEmptyContent || EmptyContent.Model.Unsafe == null) if (!ShowEmptyContent || EmptyContent.Model.Unsafe is null)
{ {
return; return;
} }
@ -588,7 +588,7 @@ public partial class ListViewModel : PageViewModel, IDisposable
} }
var model = _model.Unsafe; var model = _model.Unsafe;
if (model != null) if (model is not null)
{ {
model.ItemsChanged -= Model_ItemsChanged; model.ItemsChanged -= Model_ItemsChanged;
} }

View File

@ -22,7 +22,7 @@ public partial class LogMessageViewModel : ExtensionObjectViewModel
public override void InitializeProperties() public override void InitializeProperties()
{ {
var model = _model.Unsafe; var model = _model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }

View File

@ -45,7 +45,7 @@ public partial class PageViewModel : ExtensionObjectViewModel, IPageContext
[ObservableProperty] [ObservableProperty]
public partial AppExtensionHost ExtensionHost { get; private set; } public partial AppExtensionHost ExtensionHost { get; private set; }
public bool HasStatusMessage => MostRecentStatusMessage != null; public bool HasStatusMessage => MostRecentStatusMessage is not null;
[ObservableProperty] [ObservableProperty]
[NotifyPropertyChangedFor(nameof(HasStatusMessage))] [NotifyPropertyChangedFor(nameof(HasStatusMessage))]
@ -132,7 +132,7 @@ public partial class PageViewModel : ExtensionObjectViewModel, IPageContext
public override void InitializeProperties() public override void InitializeProperties()
{ {
var page = _pageModel.Unsafe; var page = _pageModel.Unsafe;
if (page == null) if (page is null)
{ {
return; // throw? return; // throw?
} }
@ -177,7 +177,7 @@ public partial class PageViewModel : ExtensionObjectViewModel, IPageContext
protected virtual void FetchProperty(string propertyName) protected virtual void FetchProperty(string propertyName)
{ {
var model = this._pageModel.Unsafe; var model = this._pageModel.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -240,7 +240,7 @@ public partial class PageViewModel : ExtensionObjectViewModel, IPageContext
ExtensionHost.StatusMessages.CollectionChanged -= StatusMessages_CollectionChanged; ExtensionHost.StatusMessages.CollectionChanged -= StatusMessages_CollectionChanged;
var model = _pageModel.Unsafe; var model = _pageModel.Unsafe;
if (model != null) if (model is not null)
{ {
model.PropChanged -= Model_PropChanged; model.PropChanged -= Model_PropChanged;
} }

View File

@ -24,7 +24,7 @@ public partial class ProgressViewModel : ExtensionObjectViewModel
public override void InitializeProperties() public override void InitializeProperties()
{ {
var model = Model.Unsafe; var model = Model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -50,7 +50,7 @@ public partial class ProgressViewModel : ExtensionObjectViewModel
protected virtual void FetchProperty(string propertyName) protected virtual void FetchProperty(string propertyName)
{ {
var model = this.Model.Unsafe; var model = this.Model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }

View File

@ -120,7 +120,7 @@ public partial class ShellViewModel : ObservableObject,
////LoadedState = ViewModelLoadedState.Loading; ////LoadedState = ViewModelLoadedState.Loading;
if (!viewModel.IsInitialized if (!viewModel.IsInitialized
&& viewModel.InitializeCommand != null) && viewModel.InitializeCommand is not null)
{ {
_ = Task.Run(async () => _ = Task.Run(async () =>
{ {
@ -185,7 +185,7 @@ public partial class ShellViewModel : ObservableObject,
private void PerformCommand(PerformCommandMessage message) private void PerformCommand(PerformCommandMessage message)
{ {
var command = message.Command.Unsafe; var command = message.Command.Unsafe;
if (command == null) if (command is null)
{ {
return; return;
} }
@ -205,7 +205,7 @@ public partial class ShellViewModel : ObservableObject,
// Construct our ViewModel of the appropriate type and pass it the UI Thread context. // Construct our ViewModel of the appropriate type and pass it the UI Thread context.
var pageViewModel = _pageViewModelFactory.TryCreatePageViewModel(page, _isNested, host); var pageViewModel = _pageViewModelFactory.TryCreatePageViewModel(page, _isNested, host);
if (pageViewModel == null) if (pageViewModel is null)
{ {
Logger.LogError($"Failed to create ViewModel for page {page.GetType().Name}"); Logger.LogError($"Failed to create ViewModel for page {page.GetType().Name}");
throw new NotSupportedException(); throw new NotSupportedException();
@ -240,7 +240,7 @@ public partial class ShellViewModel : ObservableObject,
// TODO GH #525 This needs more better locking. // TODO GH #525 This needs more better locking.
lock (_invokeLock) lock (_invokeLock)
{ {
if (_handleInvokeTask != null) if (_handleInvokeTask is not null)
{ {
// do nothing - a command is already doing a thing // do nothing - a command is already doing a thing
} }
@ -280,7 +280,7 @@ public partial class ShellViewModel : ObservableObject,
private void UnsafeHandleCommandResult(ICommandResult? result) private void UnsafeHandleCommandResult(ICommandResult? result)
{ {
if (result == null) if (result is null)
{ {
// No result, nothing to do. // No result, nothing to do.
return; return;

View File

@ -17,7 +17,7 @@ public partial class StatusMessageViewModel : ExtensionObjectViewModel
public ProgressViewModel? Progress { get; private set; } public ProgressViewModel? Progress { get; private set; }
public bool HasProgress => Progress != null; public bool HasProgress => Progress is not null;
public StatusMessageViewModel(IStatusMessage message, WeakReference<IPageContext> context) public StatusMessageViewModel(IStatusMessage message, WeakReference<IPageContext> context)
: base(context) : base(context)
@ -28,7 +28,7 @@ public partial class StatusMessageViewModel : ExtensionObjectViewModel
public override void InitializeProperties() public override void InitializeProperties()
{ {
var model = Model.Unsafe; var model = Model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -36,7 +36,7 @@ public partial class StatusMessageViewModel : ExtensionObjectViewModel
Message = model.Message; Message = model.Message;
State = model.State; State = model.State;
var modelProgress = model.Progress; var modelProgress = model.Progress;
if (modelProgress != null) if (modelProgress is not null)
{ {
Progress = new(modelProgress, this.PageContext); Progress = new(modelProgress, this.PageContext);
Progress.InitializeProperties(); Progress.InitializeProperties();
@ -61,7 +61,7 @@ public partial class StatusMessageViewModel : ExtensionObjectViewModel
protected virtual void FetchProperty(string propertyName) protected virtual void FetchProperty(string propertyName)
{ {
var model = this.Model.Unsafe; var model = this.Model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -76,7 +76,7 @@ public partial class StatusMessageViewModel : ExtensionObjectViewModel
break; break;
case nameof(Progress): case nameof(Progress):
var modelProgress = model.Progress; var modelProgress = model.Progress;
if (modelProgress != null) if (modelProgress is not null)
{ {
Progress = new(modelProgress, this.PageContext); Progress = new(modelProgress, this.PageContext);
Progress.InitializeProperties(); Progress.InitializeProperties();

View File

@ -28,7 +28,7 @@ public partial class TagViewModel(ITag _tag, WeakReference<IPageContext> context
public override void InitializeProperties() public override void InitializeProperties()
{ {
var model = _tagModel.Unsafe; var model = _tagModel.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }

View File

@ -35,7 +35,7 @@ public partial class AliasManager : ObservableObject
try try
{ {
var topLevelCommand = _topLevelCommandManager.LookupCommand(alias.CommandId); var topLevelCommand = _topLevelCommandManager.LookupCommand(alias.CommandId);
if (topLevelCommand != null) if (topLevelCommand is not null)
{ {
WeakReferenceMessenger.Default.Send<ClearSearchMessage>(); WeakReferenceMessenger.Default.Send<ClearSearchMessage>();
@ -88,7 +88,7 @@ public partial class AliasManager : ObservableObject
} }
// If we already have _this exact alias_, do nothing // If we already have _this exact alias_, do nothing
if (newAlias != null && if (newAlias is not null &&
_aliases.TryGetValue(newAlias.SearchPrefix, out var existingAlias)) _aliases.TryGetValue(newAlias.SearchPrefix, out var existingAlias))
{ {
if (existingAlias.CommandId == commandId) if (existingAlias.CommandId == commandId)
@ -113,7 +113,7 @@ public partial class AliasManager : ObservableObject
_aliases.Remove(alias.SearchPrefix); _aliases.Remove(alias.SearchPrefix);
} }
if (newAlias != null) if (newAlias is not null)
{ {
AddAlias(newAlias); AddAlias(newAlias);
} }

View File

@ -55,7 +55,7 @@ public partial class AppStateModel : ObservableObject
var loaded = JsonSerializer.Deserialize<AppStateModel>(jsonContent, JsonSerializationContext.Default.AppStateModel); var loaded = JsonSerializer.Deserialize<AppStateModel>(jsonContent, JsonSerializationContext.Default.AppStateModel);
Debug.WriteLine(loaded != null ? "Loaded settings file" : "Failed to parse"); Debug.WriteLine(loaded is not null ? "Loaded settings file" : "Failed to parse");
return loaded ?? new(); return loaded ?? new();
} }

View File

@ -15,7 +15,7 @@ namespace Microsoft.CmdPal.UI.ViewModels;
public sealed class CommandProviderWrapper public sealed class CommandProviderWrapper
{ {
public bool IsExtension => Extension != null; public bool IsExtension => Extension is not null;
private readonly bool isValid; private readonly bool isValid;
@ -188,14 +188,14 @@ public sealed class CommandProviderWrapper
return topLevelViewModel; return topLevelViewModel;
}; };
if (commands != null) if (commands is not null)
{ {
TopLevelItems = commands TopLevelItems = commands
.Select(c => makeAndAdd(c, false)) .Select(c => makeAndAdd(c, false))
.ToArray(); .ToArray();
} }
if (fallbacks != null) if (fallbacks is not null)
{ {
FallbackItems = fallbacks FallbackItems = fallbacks
.Select(c => makeAndAdd(c, true)) .Select(c => makeAndAdd(c, true))

View File

@ -18,18 +18,18 @@ public partial class CommandSettingsViewModel(ICommandSettings? _unsafeSettings,
public bool Initialized { get; private set; } public bool Initialized { get; private set; }
public bool HasSettings => public bool HasSettings =>
_model.Unsafe != null && // We have a settings model AND _model.Unsafe is not null && // We have a settings model AND
(!Initialized || SettingsPage != null); // we weren't initialized, OR we were, and we do have a settings page (!Initialized || SettingsPage is not null); // we weren't initialized, OR we were, and we do have a settings page
private void UnsafeInitializeProperties() private void UnsafeInitializeProperties()
{ {
var model = _model.Unsafe; var model = _model.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
if (model.SettingsPage != null) if (model.SettingsPage is not null)
{ {
SettingsPage = new CommandPaletteContentPageViewModel(model.SettingsPage, mainThread, provider.ExtensionHost); SettingsPage = new CommandPaletteContentPageViewModel(model.SettingsPage, mainThread, provider.ExtensionHost);
SettingsPage.InitializeProperties(); SettingsPage.InitializeProperties();

View File

@ -30,7 +30,7 @@ internal sealed partial class CreatedExtensionForm : NewExtensionFormBase
public override ICommandResult SubmitForm(string inputs, string data) public override ICommandResult SubmitForm(string inputs, string data)
{ {
var dataInput = JsonNode.Parse(data)?.AsObject(); var dataInput = JsonNode.Parse(data)?.AsObject();
if (dataInput == null) if (dataInput is null)
{ {
return CommandResult.KeepOpen(); return CommandResult.KeepOpen();
} }

View File

@ -23,7 +23,7 @@ public partial class LogMessagesPage : ListPage
private void LogMessages_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) private void LogMessages_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{ {
if (e.Action == NotifyCollectionChangedAction.Add && e.NewItems != null) if (e.Action == NotifyCollectionChangedAction.Add && e.NewItems is not null)
{ {
foreach (var item in e.NewItems) foreach (var item in e.NewItems)
{ {

View File

@ -203,7 +203,7 @@ public partial class MainListPage : DynamicListPage,
// If we don't have any previous filter results to work with, start // If we don't have any previous filter results to work with, start
// with a list of all our commands & apps. // with a list of all our commands & apps.
if (_filteredItems == null) if (_filteredItems is null)
{ {
_filteredItems = commands; _filteredItems = commands;
_filteredItemsIncludesApps = _includeApps; _filteredItemsIncludesApps = _includeApps;

View File

@ -98,7 +98,7 @@ internal sealed partial class NewExtensionForm : NewExtensionFormBase
public override CommandResult SubmitForm(string payload) public override CommandResult SubmitForm(string payload)
{ {
var formInput = JsonNode.Parse(payload)?.AsObject(); var formInput = JsonNode.Parse(payload)?.AsObject();
if (formInput == null) if (formInput is null)
{ {
return CommandResult.KeepOpen(); return CommandResult.KeepOpen();
} }

View File

@ -14,7 +14,7 @@ public partial class NewExtensionPage : ContentPage
public override IContent[] GetContent() public override IContent[] GetContent()
{ {
return _resultForm != null ? [_resultForm] : [_inputForm]; return _resultForm is not null ? [_resultForm] : [_inputForm];
} }
public NewExtensionPage() public NewExtensionPage()
@ -28,13 +28,13 @@ public partial class NewExtensionPage : ContentPage
private void FormSubmitted(NewExtensionFormBase sender, NewExtensionFormBase? args) private void FormSubmitted(NewExtensionFormBase sender, NewExtensionFormBase? args)
{ {
if (_resultForm != null) if (_resultForm is not null)
{ {
_resultForm.FormSubmitted -= FormSubmitted; _resultForm.FormSubmitted -= FormSubmitted;
} }
_resultForm = args; _resultForm = args;
if (_resultForm != null) if (_resultForm is not null)
{ {
_resultForm.FormSubmitted += FormSubmitted; _resultForm.FormSubmitted += FormSubmitted;
} }

View File

@ -20,7 +20,7 @@ public partial class ContentMarkdownViewModel(IMarkdownContent _markdown, WeakRe
public override void InitializeProperties() public override void InitializeProperties()
{ {
var model = Model.Unsafe; var model = Model.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
@ -47,7 +47,7 @@ public partial class ContentMarkdownViewModel(IMarkdownContent _markdown, WeakRe
protected void FetchProperty(string propertyName) protected void FetchProperty(string propertyName)
{ {
var model = Model.Unsafe; var model = Model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -66,7 +66,7 @@ public partial class ContentMarkdownViewModel(IMarkdownContent _markdown, WeakRe
{ {
base.UnsafeCleanup(); base.UnsafeCleanup();
var model = Model.Unsafe; var model = Model.Unsafe;
if (model != null) if (model is not null)
{ {
model.PropChanged -= Model_PropChanged; model.PropChanged -= Model_PropChanged;
} }

View File

@ -30,13 +30,13 @@ public partial class ContentTreeViewModel(ITreeContent _tree, WeakReference<IPag
public override void InitializeProperties() public override void InitializeProperties()
{ {
var model = Model.Unsafe; var model = Model.Unsafe;
if (model == null) if (model is null)
{ {
return; return;
} }
var root = model.RootContent; var root = model.RootContent;
if (root != null) if (root is not null)
{ {
RootContent = ViewModelFromContent(root, PageContext); RootContent = ViewModelFromContent(root, PageContext);
RootContent?.InitializeProperties(); RootContent?.InitializeProperties();
@ -82,7 +82,7 @@ public partial class ContentTreeViewModel(ITreeContent _tree, WeakReference<IPag
protected void FetchProperty(string propertyName) protected void FetchProperty(string propertyName)
{ {
var model = Model.Unsafe; var model = Model.Unsafe;
if (model == null) if (model is null)
{ {
return; // throw? return; // throw?
} }
@ -91,7 +91,7 @@ public partial class ContentTreeViewModel(ITreeContent _tree, WeakReference<IPag
{ {
case nameof(RootContent): case nameof(RootContent):
var root = model.RootContent; var root = model.RootContent;
if (root != null) if (root is not null)
{ {
RootContent = ViewModelFromContent(root, PageContext); RootContent = ViewModelFromContent(root, PageContext);
} }
@ -119,7 +119,7 @@ public partial class ContentTreeViewModel(ITreeContent _tree, WeakReference<IPag
foreach (var item in newItems) foreach (var item in newItems)
{ {
var viewModel = ViewModelFromContent(item, PageContext); var viewModel = ViewModelFromContent(item, PageContext);
if (viewModel != null) if (viewModel is not null)
{ {
viewModel.InitializeProperties(); viewModel.InitializeProperties();
newContent.Add(viewModel); newContent.Add(viewModel);
@ -153,7 +153,7 @@ public partial class ContentTreeViewModel(ITreeContent _tree, WeakReference<IPag
Children.Clear(); Children.Clear();
var model = Model.Unsafe; var model = Model.Unsafe;
if (model != null) if (model is not null)
{ {
model.PropChanged -= Model_PropChanged; model.PropChanged -= Model_PropChanged;
model.ItemsChanged -= Model_ItemsChanged; model.ItemsChanged -= Model_ItemsChanged;

View File

@ -29,7 +29,7 @@ public partial class HotkeyManager : ObservableObject
} }
} }
_commandHotkeys.RemoveAll(item => item.Hotkey == null); _commandHotkeys.RemoveAll(item => item.Hotkey is null);
foreach (var item in _commandHotkeys) foreach (var item in _commandHotkeys)
{ {

View File

@ -90,7 +90,7 @@ public partial class ExtensionService : IExtensionService, IDisposable
}).Result; }).Result;
var isExtension = isCmdPalExtensionResult.IsExtension; var isExtension = isCmdPalExtensionResult.IsExtension;
var extension = isCmdPalExtensionResult.Extension; var extension = isCmdPalExtensionResult.Extension;
if (isExtension && extension != null) if (isExtension && extension is not null)
{ {
CommandPaletteHost.Instance.DebugLog($"Installed new extension app {extension.DisplayName}"); CommandPaletteHost.Instance.DebugLog($"Installed new extension app {extension.DisplayName}");
@ -152,7 +152,7 @@ public partial class ExtensionService : IExtensionService, IDisposable
{ {
var (cmdPalProvider, classId) = await GetCmdPalExtensionPropertiesAsync(extension); var (cmdPalProvider, classId) = await GetCmdPalExtensionPropertiesAsync(extension);
return new(cmdPalProvider != null && classId.Count != 0, extension); return new(cmdPalProvider is not null && classId.Count != 0, extension);
} }
} }
@ -237,7 +237,7 @@ public partial class ExtensionService : IExtensionService, IDisposable
{ {
var (cmdPalProvider, classIds) = await GetCmdPalExtensionPropertiesAsync(extension); var (cmdPalProvider, classIds) = await GetCmdPalExtensionPropertiesAsync(extension);
if (cmdPalProvider == null || classIds.Count == 0) if (cmdPalProvider is null || classIds.Count == 0)
{ {
return []; return [];
} }
@ -352,12 +352,12 @@ public partial class ExtensionService : IExtensionService, IDisposable
{ {
var propSetList = new List<string>(); var propSetList = new List<string>();
var singlePropertySet = GetSubPropertySet(activationPropSet, CreateInstanceProperty); var singlePropertySet = GetSubPropertySet(activationPropSet, CreateInstanceProperty);
if (singlePropertySet != null) if (singlePropertySet is not null)
{ {
var classId = GetProperty(singlePropertySet, ClassIdProperty); var classId = GetProperty(singlePropertySet, ClassIdProperty);
// If the instance has a classId as a single string, then it's only supporting a single instance. // If the instance has a classId as a single string, then it's only supporting a single instance.
if (classId != null) if (classId is not null)
{ {
propSetList.Add(classId); propSetList.Add(classId);
} }
@ -365,7 +365,7 @@ public partial class ExtensionService : IExtensionService, IDisposable
else else
{ {
var propertySetArray = GetSubPropertySetArray(activationPropSet, CreateInstanceProperty); var propertySetArray = GetSubPropertySetArray(activationPropSet, CreateInstanceProperty);
if (propertySetArray != null) if (propertySetArray is not null)
{ {
foreach (var prop in propertySetArray) foreach (var prop in propertySetArray)
{ {
@ -375,7 +375,7 @@ public partial class ExtensionService : IExtensionService, IDisposable
} }
var classId = GetProperty(propertySet, ClassIdProperty); var classId = GetProperty(propertySet, ClassIdProperty);
if (classId != null) if (classId is not null)
{ {
propSetList.Add(classId); propSetList.Add(classId);
} }

View File

@ -35,7 +35,7 @@ public class ProviderSettings
public void Connect(CommandProviderWrapper wrapper) public void Connect(CommandProviderWrapper wrapper)
{ {
ProviderId = wrapper.ProviderId; ProviderId = wrapper.ProviderId;
IsBuiltin = wrapper.Extension == null; IsBuiltin = wrapper.Extension is null;
ProviderDisplayName = wrapper.DisplayName; ProviderDisplayName = wrapper.DisplayName;

View File

@ -33,7 +33,7 @@ public partial class ProviderSettingsViewModel(
Resources.builtin_disabled_extension; Resources.builtin_disabled_extension;
[MemberNotNullWhen(true, nameof(Extension))] [MemberNotNullWhen(true, nameof(Extension))]
public bool IsFromExtension => _provider.Extension != null; public bool IsFromExtension => _provider.Extension is not null;
public IExtensionWrapper? Extension => _provider.Extension; public IExtensionWrapper? Extension => _provider.Extension;
@ -76,7 +76,7 @@ public partial class ProviderSettingsViewModel(
{ {
get get
{ {
if (_provider.Settings == null) if (_provider.Settings is null)
{ {
return false; return false;
} }
@ -100,7 +100,7 @@ public partial class ProviderSettingsViewModel(
{ {
get get
{ {
if (_provider.Settings == null) if (_provider.Settings is null)
{ {
return null; return null;
} }
@ -126,7 +126,7 @@ public partial class ProviderSettingsViewModel(
{ {
get get
{ {
if (field == null) if (field is null)
{ {
field = BuildTopLevelViewModels(); field = BuildTopLevelViewModels();
} }
@ -149,7 +149,7 @@ public partial class ProviderSettingsViewModel(
{ {
get get
{ {
if (field == null) if (field is null)
{ {
field = BuildFallbackViewModels(); field = BuildFallbackViewModels();
} }
@ -173,7 +173,7 @@ public partial class ProviderSettingsViewModel(
private void InitializeSettingsPage() private void InitializeSettingsPage()
{ {
if (_provider.Settings == null) if (_provider.Settings is null)
{ {
return; return;
} }

View File

@ -30,7 +30,7 @@ public partial class RecentCommandsManager : ObservableObject
// These numbers are vaguely scaled so that "VS" will make "Visual Studio" the // These numbers are vaguely scaled so that "VS" will make "Visual Studio" the
// match after one use. // match after one use.
// Usually it has a weight of 84, compared to 109 for the VS cmd prompt // Usually it has a weight of 84, compared to 109 for the VS cmd prompt
if (entry.Item != null) if (entry.Item is not null)
{ {
var index = entry.Index; var index = entry.Index;
@ -61,7 +61,7 @@ public partial class RecentCommandsManager : ObservableObject
var entry = History var entry = History
.Where(item => item.CommandId == commandId) .Where(item => item.CommandId == commandId)
.FirstOrDefault(); .FirstOrDefault();
if (entry == null) if (entry is null)
{ {
var newitem = new HistoryItem() { CommandId = commandId, Uses = 1 }; var newitem = new HistoryItem() { CommandId = commandId, Uses = 1 };
History.Insert(0, newitem); History.Insert(0, newitem);

View File

@ -95,7 +95,7 @@ public partial class SettingsModel : ObservableObject
var loaded = JsonSerializer.Deserialize<SettingsModel>(jsonContent, JsonSerializationContext.Default.SettingsModel); var loaded = JsonSerializer.Deserialize<SettingsModel>(jsonContent, JsonSerializationContext.Default.SettingsModel);
Debug.WriteLine(loaded != null ? "Loaded settings file" : "Failed to parse"); Debug.WriteLine(loaded is not null ? "Loaded settings file" : "Failed to parse");
return loaded ?? new(); return loaded ?? new();
} }

View File

@ -249,7 +249,7 @@ public partial class TopLevelCommandManager : ObservableObject,
_extensionCommandProviders.Clear(); _extensionCommandProviders.Clear();
} }
if (extensions != null) if (extensions is not null)
{ {
await StartExtensionsAndGetCommands(extensions); await StartExtensionsAndGetCommands(extensions);
} }
@ -283,7 +283,7 @@ public partial class TopLevelCommandManager : ObservableObject,
var startTasks = extensions.Select(StartExtensionWithTimeoutAsync); var startTasks = extensions.Select(StartExtensionWithTimeoutAsync);
// Wait for all extensions to start // Wait for all extensions to start
var wrappers = (await Task.WhenAll(startTasks)).Where(wrapper => wrapper != null).Select(w => w!).ToList(); var wrappers = (await Task.WhenAll(startTasks)).Where(wrapper => wrapper is not null).Select(w => w!).ToList();
lock (_commandProvidersLock) lock (_commandProvidersLock)
{ {
@ -293,7 +293,7 @@ public partial class TopLevelCommandManager : ObservableObject,
// Load the commands from the providers in parallel // Load the commands from the providers in parallel
var loadTasks = wrappers.Select(LoadCommandsWithTimeoutAsync); var loadTasks = wrappers.Select(LoadCommandsWithTimeoutAsync);
var commandSets = (await Task.WhenAll(loadTasks)).Where(results => results != null).Select(r => r!).ToList(); var commandSets = (await Task.WhenAll(loadTasks)).Where(results => results is not null).Select(r => r!).ToList();
lock (TopLevelCommands) lock (TopLevelCommands)
{ {

View File

@ -240,7 +240,7 @@ public sealed partial class TopLevelViewModel : ObservableObject, IListItem
private void FetchAliasFromAliasManager() private void FetchAliasFromAliasManager()
{ {
var am = _serviceProvider.GetService<AliasManager>(); var am = _serviceProvider.GetService<AliasManager>();
if (am != null) if (am is not null)
{ {
var commandAlias = am.AliasFromId(Id); var commandAlias = am.AliasFromId(Id);
if (commandAlias is not null) if (commandAlias is not null)
@ -254,7 +254,7 @@ public sealed partial class TopLevelViewModel : ObservableObject, IListItem
private void UpdateHotkey() private void UpdateHotkey()
{ {
var hotkey = _settings.CommandHotkeys.Where(hk => hk.CommandId == Id).FirstOrDefault(); var hotkey = _settings.CommandHotkeys.Where(hk => hk.CommandId == Id).FirstOrDefault();
if (hotkey != null) if (hotkey is not null)
{ {
_hotkey = hotkey.Hotkey; _hotkey = hotkey.Hotkey;
} }
@ -264,12 +264,12 @@ public sealed partial class TopLevelViewModel : ObservableObject, IListItem
{ {
List<Tag> tags = []; List<Tag> tags = [];
if (Hotkey != null) if (Hotkey is not null)
{ {
tags.Add(new Tag() { Text = Hotkey.ToString() }); tags.Add(new Tag() { Text = Hotkey.ToString() });
} }
if (Alias != null) if (Alias is not null)
{ {
tags.Add(new Tag() { Text = Alias.SearchPrefix }); tags.Add(new Tag() { Text = Alias.SearchPrefix });
} }

View File

@ -10,7 +10,6 @@ using Microsoft.CmdPal.UI.Views;
using Microsoft.UI.Xaml; using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives; using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Input;
using Windows.System; using Windows.System;
namespace Microsoft.CmdPal.UI.Controls; namespace Microsoft.CmdPal.UI.Controls;
@ -50,7 +49,7 @@ public sealed partial class CommandBar : UserControl,
return; return;
} }
if (message.Element == null) if (message.Element is null)
{ {
_ = DispatcherQueue.TryEnqueue( _ = DispatcherQueue.TryEnqueue(
() => () =>

View File

@ -44,7 +44,7 @@ public sealed partial class ContentFormControl : UserControl
// 5% BODGY: if we set this multiple times over the lifetime of the app, // 5% BODGY: if we set this multiple times over the lifetime of the app,
// then the second call will explode, because "CardOverrideStyles is already the child of another element". // then the second call will explode, because "CardOverrideStyles is already the child of another element".
// SO only set this once. // SO only set this once.
if (_renderer.OverrideStyles == null) if (_renderer.OverrideStyles is null)
{ {
_renderer.OverrideStyles = CardOverrideStyles; _renderer.OverrideStyles = CardOverrideStyles;
} }
@ -55,19 +55,19 @@ public sealed partial class ContentFormControl : UserControl
private void AttachViewModel(ContentFormViewModel? vm) private void AttachViewModel(ContentFormViewModel? vm)
{ {
if (_viewModel != null) if (_viewModel is not null)
{ {
_viewModel.PropertyChanged -= ViewModel_PropertyChanged; _viewModel.PropertyChanged -= ViewModel_PropertyChanged;
} }
_viewModel = vm; _viewModel = vm;
if (_viewModel != null) if (_viewModel is not null)
{ {
_viewModel.PropertyChanged += ViewModel_PropertyChanged; _viewModel.PropertyChanged += ViewModel_PropertyChanged;
var c = _viewModel.Card; var c = _viewModel.Card;
if (c != null) if (c is not null)
{ {
DisplayCard(c); DisplayCard(c);
} }
@ -76,7 +76,7 @@ public sealed partial class ContentFormControl : UserControl
private void ViewModel_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) private void ViewModel_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
{ {
if (ViewModel == null) if (ViewModel is null)
{ {
return; return;
} }
@ -84,7 +84,7 @@ public sealed partial class ContentFormControl : UserControl
if (e.PropertyName == nameof(ViewModel.Card)) if (e.PropertyName == nameof(ViewModel.Card))
{ {
var c = ViewModel.Card; var c = ViewModel.Card;
if (c != null) if (c is not null)
{ {
DisplayCard(c); DisplayCard(c);
} }
@ -95,7 +95,7 @@ public sealed partial class ContentFormControl : UserControl
{ {
_renderedCard = _renderer.RenderAdaptiveCard(result.AdaptiveCard); _renderedCard = _renderer.RenderAdaptiveCard(result.AdaptiveCard);
ContentGrid.Children.Clear(); ContentGrid.Children.Clear();
if (_renderedCard.FrameworkElement != null) if (_renderedCard.FrameworkElement is not null)
{ {
ContentGrid.Children.Add(_renderedCard.FrameworkElement); ContentGrid.Children.Add(_renderedCard.FrameworkElement);
@ -148,7 +148,7 @@ public sealed partial class ContentFormControl : UserControl
// Recursively check children // Recursively check children
var result = FindFirstFocusableElement(child); var result = FindFirstFocusableElement(child);
if (result != null) if (result is not null)
{ {
return result; return result;
} }

View File

@ -31,7 +31,7 @@ public sealed partial class ContextMenu : UserControl,
WeakReferenceMessenger.Default.Register<UpdateCommandBarMessage>(this); WeakReferenceMessenger.Default.Register<UpdateCommandBarMessage>(this);
WeakReferenceMessenger.Default.Register<TryCommandKeybindingMessage>(this); WeakReferenceMessenger.Default.Register<TryCommandKeybindingMessage>(this);
if (ViewModel != null) if (ViewModel is not null)
{ {
ViewModel.PropertyChanged += ViewModel_PropertyChanged; ViewModel.PropertyChanged += ViewModel_PropertyChanged;
} }

View File

@ -91,7 +91,7 @@ public partial class IconBox : ContentControl
{ {
if (d is IconBox @this) if (d is IconBox @this)
{ {
if (e.NewValue == null) if (e.NewValue is null)
{ {
@this.Source = null; @this.Source = null;
} }
@ -104,7 +104,7 @@ public partial class IconBox : ContentControl
var requestedTheme = @this.ActualTheme; var requestedTheme = @this.ActualTheme;
var eventArgs = new SourceRequestedEventArgs(e.NewValue, requestedTheme); var eventArgs = new SourceRequestedEventArgs(e.NewValue, requestedTheme);
if (@this.SourceRequested != null) if (@this.SourceRequested is not null)
{ {
await @this.SourceRequested.InvokeAsync(@this, eventArgs); await @this.SourceRequested.InvokeAsync(@this, eventArgs);
@ -142,7 +142,7 @@ public partial class IconBox : ContentControl
iconData = requestedTheme == ElementTheme.Light ? info.Light : info.Dark; iconData = requestedTheme == ElementTheme.Light ? info.Light : info.Dark;
} }
if (iconData != null && if (iconData is not null &&
@this.Source is FontIconSource) @this.Source is FontIconSource)
{ {
if (!string.IsNullOrEmpty(iconData.Icon) && iconData.Icon.Length <= 2) if (!string.IsNullOrEmpty(iconData.Icon) && iconData.Icon.Length <= 2)

View File

@ -2,7 +2,6 @@
// The Microsoft Corporation licenses this file to you under the MIT license. // The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information. // See the LICENSE file in the project root for more information.
using Microsoft.CmdPal.UI;
using Microsoft.UI.Xaml; using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Markup; using Microsoft.UI.Xaml.Markup;
@ -80,12 +79,12 @@ public sealed partial class KeyVisual : Control
private void Update() private void Update()
{ {
if (_keyVisual == null) if (_keyVisual is null)
{ {
return; return;
} }
if (_keyVisual.Content != null) if (_keyVisual.Content is not null)
{ {
if (_keyVisual.Content.GetType() == typeof(string)) if (_keyVisual.Content.GetType() == typeof(string))
{ {

View File

@ -51,13 +51,13 @@ public sealed partial class SearchBar : UserControl,
//// TODO: If the Debounce timer hasn't fired, we may want to store the current Filter in the OldValue/prior VM, but we don't want that to go actually do work... //// TODO: If the Debounce timer hasn't fired, we may want to store the current Filter in the OldValue/prior VM, but we don't want that to go actually do work...
var @this = (SearchBar)d; var @this = (SearchBar)d;
if (@this != null if (@this is not null
&& e.OldValue is PageViewModel old) && e.OldValue is PageViewModel old)
{ {
old.PropertyChanged -= @this.Page_PropertyChanged; old.PropertyChanged -= @this.Page_PropertyChanged;
} }
if (@this != null if (@this is not null
&& e.NewValue is PageViewModel page) && e.NewValue is PageViewModel page)
{ {
// TODO: In some cases we probably want commands to clear a filter // TODO: In some cases we probably want commands to clear a filter
@ -85,7 +85,7 @@ public sealed partial class SearchBar : UserControl,
{ {
this.FilterBox.Text = string.Empty; this.FilterBox.Text = string.Empty;
if (CurrentPageViewModel != null) if (CurrentPageViewModel is not null)
{ {
CurrentPageViewModel.Filter = string.Empty; CurrentPageViewModel.Filter = string.Empty;
} }
@ -143,7 +143,7 @@ public sealed partial class SearchBar : UserControl,
FilterBox.Text = string.Empty; FilterBox.Text = string.Empty;
// hack TODO GH #245 // hack TODO GH #245
if (CurrentPageViewModel != null) if (CurrentPageViewModel is not null)
{ {
CurrentPageViewModel.Filter = FilterBox.Text; CurrentPageViewModel.Filter = FilterBox.Text;
} }
@ -154,7 +154,7 @@ public sealed partial class SearchBar : UserControl,
else if (e.Key == VirtualKey.Back) else if (e.Key == VirtualKey.Back)
{ {
// hack TODO GH #245 // hack TODO GH #245
if (CurrentPageViewModel != null) if (CurrentPageViewModel is not null)
{ {
CurrentPageViewModel.Filter = FilterBox.Text; CurrentPageViewModel.Filter = FilterBox.Text;
} }
@ -318,7 +318,7 @@ public sealed partial class SearchBar : UserControl,
} }
// Actually plumb Filtering to the view model // Actually plumb Filtering to the view model
if (CurrentPageViewModel != null) if (CurrentPageViewModel is not null)
{ {
CurrentPageViewModel.Filter = FilterBox.Text; CurrentPageViewModel.Filter = FilterBox.Text;
} }

View File

@ -39,13 +39,13 @@ public sealed partial class ShortcutControl : UserControl, IDisposable, IRecipie
private static void OnAllowDisableChanged(DependencyObject d, DependencyPropertyChangedEventArgs? e) private static void OnAllowDisableChanged(DependencyObject d, DependencyPropertyChangedEventArgs? e)
{ {
var me = d as ShortcutControl; var me = d as ShortcutControl;
if (me == null) if (me is null)
{ {
return; return;
} }
var description = me.c?.FindDescendant<TextBlock>(); var description = me.c?.FindDescendant<TextBlock>();
if (description == null) if (description is null)
{ {
return; return;
} }
@ -431,7 +431,7 @@ public sealed partial class ShortcutControl : UserControl, IDisposable, IRecipie
private void ShortcutDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) private void ShortcutDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{ {
if (lastValidSettings != null && ComboIsValid(lastValidSettings)) if (lastValidSettings is not null && ComboIsValid(lastValidSettings))
{ {
HotkeySettings = lastValidSettings with { }; HotkeySettings = lastValidSettings with { };
} }
@ -458,7 +458,7 @@ public sealed partial class ShortcutControl : UserControl, IDisposable, IRecipie
private static bool ComboIsValid(HotkeySettings? settings) private static bool ComboIsValid(HotkeySettings? settings)
{ {
return settings != null && (settings.IsValid() || settings.IsEmpty()); return settings is not null && (settings.IsValid() || settings.IsEmpty());
} }
public void Receive(WindowActivatedEventArgs message) => DoWindowActivated(message); public void Receive(WindowActivatedEventArgs message) => DoWindowActivated(message);
@ -466,12 +466,12 @@ public sealed partial class ShortcutControl : UserControl, IDisposable, IRecipie
private void DoWindowActivated(WindowActivatedEventArgs args) private void DoWindowActivated(WindowActivatedEventArgs args)
{ {
args.Handled = true; args.Handled = true;
if (args.WindowActivationState != WindowActivationState.Deactivated && (hook == null || hook.GetDisposedState() == true)) if (args.WindowActivationState != WindowActivationState.Deactivated && (hook is null || hook.GetDisposedState() == true))
{ {
// If the PT settings window gets focussed/activated again, we enable the keyboard hook to catch the keyboard input. // If the PT settings window gets focussed/activated again, we enable the keyboard hook to catch the keyboard input.
hook = new HotkeySettingsControlHook(Hotkey_KeyDown, Hotkey_KeyUp, Hotkey_IsActive, FilterAccessibleKeyboardEvents); hook = new HotkeySettingsControlHook(Hotkey_KeyDown, Hotkey_KeyUp, Hotkey_IsActive, FilterAccessibleKeyboardEvents);
} }
else if (args.WindowActivationState == WindowActivationState.Deactivated && hook != null && hook.GetDisposedState() == false) else if (args.WindowActivationState == WindowActivationState.Deactivated && hook is not null && hook.GetDisposedState() == false)
{ {
// If the PT settings window lost focus/activation, we disable the keyboard hook to allow keyboard input on other windows. // If the PT settings window lost focus/activation, we disable the keyboard hook to allow keyboard input on other windows.
hook.Dispose(); hook.Dispose();
@ -490,7 +490,7 @@ public sealed partial class ShortcutControl : UserControl, IDisposable, IRecipie
{ {
if (disposing) if (disposing)
{ {
if (hook != null) if (hook is not null)
{ {
hook.Dispose(); hook.Dispose();
} }

View File

@ -84,7 +84,7 @@ public partial class Tag : Control
return; return;
} }
if (tag.ForegroundColor != null && if (tag.ForegroundColor is not null &&
OptionalColorBrushCacheProvider.Convert(tag.ForegroundColor.Value) is SolidColorBrush brush) OptionalColorBrushCacheProvider.Convert(tag.ForegroundColor.Value) is SolidColorBrush brush)
{ {
tag.Foreground = brush; tag.Foreground = brush;
@ -114,7 +114,7 @@ public partial class Tag : Control
return; return;
} }
if (tag.BackgroundColor != null && if (tag.BackgroundColor is not null &&
OptionalColorBrushCacheProvider.Convert(tag.BackgroundColor.Value) is SolidColorBrush brush) OptionalColorBrushCacheProvider.Convert(tag.BackgroundColor.Value) is SolidColorBrush brush)
{ {
tag.Background = brush; tag.Background = brush;

View File

@ -74,7 +74,7 @@ public sealed partial class ListPage : Page,
WeakReferenceMessenger.Default.Unregister<ActivateSelectedListItemMessage>(this); WeakReferenceMessenger.Default.Unregister<ActivateSelectedListItemMessage>(this);
WeakReferenceMessenger.Default.Unregister<ActivateSecondaryCommandMessage>(this); WeakReferenceMessenger.Default.Unregister<ActivateSecondaryCommandMessage>(this);
if (ViewModel != null) if (ViewModel is not null)
{ {
ViewModel.PropertyChanged -= ViewModel_PropertyChanged; ViewModel.PropertyChanged -= ViewModel_PropertyChanged;
ViewModel.ItemsUpdated -= Page_ItemsUpdated; ViewModel.ItemsUpdated -= Page_ItemsUpdated;
@ -142,13 +142,13 @@ public sealed partial class ListPage : Page,
// here, then in Page_ItemsUpdated trying to select that cached item if // here, then in Page_ItemsUpdated trying to select that cached item if
// it's in the list (otherwise, clear the cache), but that seems // it's in the list (otherwise, clear the cache), but that seems
// aggressively BODGY for something that mostly just works today. // aggressively BODGY for something that mostly just works today.
if (ItemsList.SelectedItem != null) if (ItemsList.SelectedItem is not null)
{ {
ItemsList.ScrollIntoView(ItemsList.SelectedItem); ItemsList.ScrollIntoView(ItemsList.SelectedItem);
// Automation notification for screen readers // Automation notification for screen readers
var listViewPeer = Microsoft.UI.Xaml.Automation.Peers.ListViewAutomationPeer.CreatePeerForElement(ItemsList); var listViewPeer = Microsoft.UI.Xaml.Automation.Peers.ListViewAutomationPeer.CreatePeerForElement(ItemsList);
if (listViewPeer != null && li != null) if (listViewPeer is not null && li is not null)
{ {
var notificationText = li.Title; var notificationText = li.Title;
listViewPeer.RaiseNotificationEvent( listViewPeer.RaiseNotificationEvent(
@ -165,7 +165,7 @@ public sealed partial class ListPage : Page,
// Find the ScrollViewer in the ListView // Find the ScrollViewer in the ListView
var listViewScrollViewer = FindScrollViewer(this.ItemsList); var listViewScrollViewer = FindScrollViewer(this.ItemsList);
if (listViewScrollViewer != null) if (listViewScrollViewer is not null)
{ {
listViewScrollViewer.ViewChanged += ListViewScrollViewer_ViewChanged; listViewScrollViewer.ViewChanged += ListViewScrollViewer_ViewChanged;
} }
@ -174,7 +174,7 @@ public sealed partial class ListPage : Page,
private void ListViewScrollViewer_ViewChanged(object? sender, ScrollViewerViewChangedEventArgs e) private void ListViewScrollViewer_ViewChanged(object? sender, ScrollViewerViewChangedEventArgs e)
{ {
var scrollView = sender as ScrollViewer; var scrollView = sender as ScrollViewer;
if (scrollView == null) if (scrollView is null)
{ {
return; return;
} }
@ -256,7 +256,7 @@ public sealed partial class ListPage : Page,
page.PropertyChanged += @this.ViewModel_PropertyChanged; page.PropertyChanged += @this.ViewModel_PropertyChanged;
page.ItemsUpdated += @this.Page_ItemsUpdated; page.ItemsUpdated += @this.Page_ItemsUpdated;
} }
else if (e.NewValue == null) else if (e.NewValue is null)
{ {
Logger.LogDebug("cleared view model"); Logger.LogDebug("cleared view model");
} }
@ -274,7 +274,7 @@ public sealed partial class ListPage : Page,
// ItemsList_SelectionChanged again to give us another chance to change // ItemsList_SelectionChanged again to give us another chance to change
// the selection from null -> something. Better to just update the // the selection from null -> something. Better to just update the
// selection once, at the end of all the updating. // selection once, at the end of all the updating.
if (ItemsList.SelectedItem == null) if (ItemsList.SelectedItem is null)
{ {
ItemsList.SelectedIndex = 0; ItemsList.SelectedIndex = 0;
} }
@ -307,7 +307,7 @@ public sealed partial class ListPage : Page,
{ {
var child = VisualTreeHelper.GetChild(parent, i); var child = VisualTreeHelper.GetChild(parent, i);
var result = FindScrollViewer(child); var result = FindScrollViewer(child);
if (result != null) if (result is not null)
{ {
return result; return result;
} }
@ -329,7 +329,7 @@ public sealed partial class ListPage : Page,
_ => (null, null), _ => (null, null),
}; };
if (item == null || element == null) if (item is null || element is null)
{ {
return; return;
} }

View File

@ -2,13 +2,6 @@
// The Microsoft Corporation licenses this file to you under the MIT license. // The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information. // See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.CmdPal.Ext.Bookmarks;
using Microsoft.UI.Xaml.Documents;
using Microsoft.Win32; using Microsoft.Win32;
namespace Microsoft.CmdPal.UI.Helpers; namespace Microsoft.CmdPal.UI.Helpers;
@ -63,7 +56,7 @@ internal static class GpoValueChecker
{ {
using (RegistryKey? key = rootKey.OpenSubKey(subKeyPath, false)) using (RegistryKey? key = rootKey.OpenSubKey(subKeyPath, false))
{ {
if (key == null) if (key is null)
{ {
return null; return null;
} }

View File

@ -4,7 +4,6 @@
using Microsoft.CmdPal.Core.ViewModels; using Microsoft.CmdPal.Core.ViewModels;
using Microsoft.CmdPal.UI.Controls; using Microsoft.CmdPal.UI.Controls;
using Microsoft.CmdPal.UI.Helpers;
namespace Microsoft.CmdPal.UI.Helpers; namespace Microsoft.CmdPal.UI.Helpers;
@ -19,7 +18,7 @@ public static partial class IconCacheProvider
public static async void SourceRequested(IconBox sender, SourceRequestedEventArgs args) public static async void SourceRequested(IconBox sender, SourceRequestedEventArgs args)
#pragma warning restore IDE0060 // Remove unused parameter #pragma warning restore IDE0060 // Remove unused parameter
{ {
if (args.Key == null) if (args.Key is null)
{ {
return; return;
} }

View File

@ -28,7 +28,7 @@ public sealed class IconCacheService(DispatcherQueue dispatcherQueue)
var source = IconPathConverter.IconSourceMUX(icon.Icon, false); var source = IconPathConverter.IconSourceMUX(icon.Icon, false);
return source; return source;
} }
else if (icon.Data != null) else if (icon.Data is not null)
{ {
try try
{ {
@ -49,7 +49,7 @@ public sealed class IconCacheService(DispatcherQueue dispatcherQueue)
private async Task<IconSource?> StreamToIconSource(IRandomAccessStreamReference iconStreamRef) private async Task<IconSource?> StreamToIconSource(IRandomAccessStreamReference iconStreamRef)
{ {
if (iconStreamRef == null) if (iconStreamRef is null)
{ {
return null; return null;
} }

View File

@ -50,7 +50,7 @@ internal sealed partial class TrayIconService
{ {
if (showSystemTrayIcon ?? _settingsModel.ShowSystemTrayIcon) if (showSystemTrayIcon ?? _settingsModel.ShowSystemTrayIcon)
{ {
if (_window == null) if (_window is null)
{ {
_window = new Window(); _window = new Window();
_hwnd = new HWND(WindowNative.GetWindowHandle(_window)); _hwnd = new HWND(WindowNative.GetWindowHandle(_window));
@ -64,7 +64,7 @@ internal sealed partial class TrayIconService
_originalWndProc = Marshal.GetDelegateForFunctionPointer<WNDPROC>(PInvoke.SetWindowLongPtr(_hwnd, WINDOW_LONG_PTR_INDEX.GWL_WNDPROC, hotKeyPrcPointer)); _originalWndProc = Marshal.GetDelegateForFunctionPointer<WNDPROC>(PInvoke.SetWindowLongPtr(_hwnd, WINDOW_LONG_PTR_INDEX.GWL_WNDPROC, hotKeyPrcPointer));
} }
if (_trayIconData == null) if (_trayIconData is null)
{ {
// We need to stash this handle, so it doesn't clean itself up. If // We need to stash this handle, so it doesn't clean itself up. If
// explorer restarts, we'll come back through here, and we don't // explorer restarts, we'll come back through here, and we don't
@ -88,7 +88,7 @@ internal sealed partial class TrayIconService
// Add the notification icon // Add the notification icon
PInvoke.Shell_NotifyIcon(NOTIFY_ICON_MESSAGE.NIM_ADD, in d); PInvoke.Shell_NotifyIcon(NOTIFY_ICON_MESSAGE.NIM_ADD, in d);
if (_popupMenu == null) if (_popupMenu is null)
{ {
_popupMenu = PInvoke.CreatePopupMenu_SafeHandle(); _popupMenu = PInvoke.CreatePopupMenu_SafeHandle();
PInvoke.InsertMenu(_popupMenu, 0, MENU_ITEM_FLAGS.MF_BYPOSITION | MENU_ITEM_FLAGS.MF_STRING, PInvoke.WM_USER + 1, RS_.GetString("TrayMenu_Settings")); PInvoke.InsertMenu(_popupMenu, 0, MENU_ITEM_FLAGS.MF_BYPOSITION | MENU_ITEM_FLAGS.MF_STRING, PInvoke.WM_USER + 1, RS_.GetString("TrayMenu_Settings"));
@ -103,7 +103,7 @@ internal sealed partial class TrayIconService
public void Destroy() public void Destroy()
{ {
if (_trayIconData != null) if (_trayIconData is not null)
{ {
var d = (NOTIFYICONDATAW)_trayIconData; var d = (NOTIFYICONDATAW)_trayIconData;
if (PInvoke.Shell_NotifyIcon(NOTIFY_ICON_MESSAGE.NIM_DELETE, in d)) if (PInvoke.Shell_NotifyIcon(NOTIFY_ICON_MESSAGE.NIM_DELETE, in d))
@ -112,19 +112,19 @@ internal sealed partial class TrayIconService
} }
} }
if (_popupMenu != null) if (_popupMenu is not null)
{ {
_popupMenu.Close(); _popupMenu.Close();
_popupMenu = null; _popupMenu = null;
} }
if (_largeIcon != null) if (_largeIcon is not null)
{ {
_largeIcon.Close(); _largeIcon.Close();
_largeIcon = null; _largeIcon = null;
} }
if (_window != null) if (_window is not null)
{ {
_window.Close(); _window.Close();
_window = null; _window = null;
@ -167,7 +167,7 @@ internal sealed partial class TrayIconService
// WM_WINDOWPOSCHANGING which is always received on explorer startup sequence. // WM_WINDOWPOSCHANGING which is always received on explorer startup sequence.
case PInvoke.WM_WINDOWPOSCHANGING: case PInvoke.WM_WINDOWPOSCHANGING:
{ {
if (_trayIconData == null) if (_trayIconData is null)
{ {
SetupTrayIcon(); SetupTrayIcon();
} }
@ -189,7 +189,7 @@ internal sealed partial class TrayIconService
{ {
case PInvoke.WM_RBUTTONUP: case PInvoke.WM_RBUTTONUP:
{ {
if (_popupMenu != null) if (_popupMenu is not null)
{ {
PInvoke.GetCursorPos(out var cursorPos); PInvoke.GetCursorPos(out var cursorPos);
PInvoke.SetForegroundWindow(_hwnd); PInvoke.SetForegroundWindow(_hwnd);

View File

@ -46,7 +46,7 @@ public static class TypedEventHandlerExtensions
#pragma warning restore CA1715 // Identifiers should have correct prefix #pragma warning restore CA1715 // Identifiers should have correct prefix
where R : DeferredEventArgs where R : DeferredEventArgs
{ {
if (eventHandler == null) if (eventHandler is null)
{ {
return Task.CompletedTask; return Task.CompletedTask;
} }

View File

@ -13,7 +13,7 @@ internal sealed partial class WindowHelper
UserNotificationState state; UserNotificationState state;
// https://learn.microsoft.com/en-us/windows/win32/api/shellapi/ne-shellapi-query_user_notification_state // https://learn.microsoft.com/en-us/windows/win32/api/shellapi/ne-shellapi-query_user_notification_state
if (Marshal.GetExceptionForHR(NativeMethods.SHQueryUserNotificationState(out state)) == null) if (Marshal.GetExceptionForHR(NativeMethods.SHQueryUserNotificationState(out state)) is null)
{ {
if (state == UserNotificationState.QUNS_RUNNING_D3D_FULL_SCREEN || if (state == UserNotificationState.QUNS_RUNNING_D3D_FULL_SCREEN ||
state == UserNotificationState.QUNS_BUSY || state == UserNotificationState.QUNS_BUSY ||

View File

@ -384,7 +384,7 @@ public sealed partial class MainWindow : WindowEx,
private void DisposeAcrylic() private void DisposeAcrylic()
{ {
if (_acrylicController != null) if (_acrylicController is not null)
{ {
_acrylicController.Dispose(); _acrylicController.Dispose();
_acrylicController = null!; _acrylicController = null!;
@ -459,7 +459,7 @@ public sealed partial class MainWindow : WindowEx,
PowerToysTelemetry.Log.WriteEvent(new CmdPalDismissedOnLostFocus()); PowerToysTelemetry.Log.WriteEvent(new CmdPalDismissedOnLostFocus());
} }
if (_configurationSource != null) if (_configurationSource is not null)
{ {
_configurationSource.IsInputActive = args.WindowActivationState != WindowActivationState.Deactivated; _configurationSource.IsInputActive = args.WindowActivationState != WindowActivationState.Deactivated;
} }
@ -467,7 +467,7 @@ public sealed partial class MainWindow : WindowEx,
public void HandleLaunch(AppActivationArguments? activatedEventArgs) public void HandleLaunch(AppActivationArguments? activatedEventArgs)
{ {
if (activatedEventArgs == null) if (activatedEventArgs is null)
{ {
Summon(string.Empty); Summon(string.Empty);
return; return;
@ -535,7 +535,7 @@ public sealed partial class MainWindow : WindowEx,
UnregisterHotkeys(); UnregisterHotkeys();
var globalHotkey = settings.Hotkey; var globalHotkey = settings.Hotkey;
if (globalHotkey != null) if (globalHotkey is not null)
{ {
if (settings.UseLowLevelGlobalHotkey) if (settings.UseLowLevelGlobalHotkey)
{ {
@ -565,7 +565,7 @@ public sealed partial class MainWindow : WindowEx,
{ {
var key = commandHotkey.Hotkey; var key = commandHotkey.Hotkey;
if (key != null) if (key is not null)
{ {
if (settings.UseLowLevelGlobalHotkey) if (settings.UseLowLevelGlobalHotkey)
{ {

View File

@ -24,7 +24,7 @@ public sealed partial class LoadingPage : Page
protected override void OnNavigatedTo(NavigationEventArgs e) protected override void OnNavigatedTo(NavigationEventArgs e)
{ {
if (e.Parameter is ShellViewModel shellVM if (e.Parameter is ShellViewModel shellVM
&& shellVM.LoadCommand != null) && shellVM.LoadCommand is not null)
{ {
// This will load the built-in commands, then navigate to the main page. // This will load the built-in commands, then navigate to the main page.
// Once the mainpage loads, we'll start loading extensions. // Once the mainpage loads, we'll start loading extensions.

View File

@ -171,7 +171,7 @@ public sealed partial class ShellPage : Microsoft.UI.Xaml.Controls.Page,
// This gets called from the UI thread // This gets called from the UI thread
private async Task HandleConfirmArgsOnUiThread(IConfirmationArgs? args) private async Task HandleConfirmArgsOnUiThread(IConfirmationArgs? args)
{ {
if (args == null) if (args is null)
{ {
return; return;
} }
@ -236,7 +236,7 @@ public sealed partial class ShellPage : Microsoft.UI.Xaml.Controls.Page,
public void OpenSettings() public void OpenSettings()
{ {
if (_settingsWindow == null) if (_settingsWindow is null)
{ {
_settingsWindow = new SettingsWindow(); _settingsWindow = new SettingsWindow();
} }
@ -324,7 +324,7 @@ public sealed partial class ShellPage : Microsoft.UI.Xaml.Controls.Page,
// command from our list of toplevel commands. // command from our list of toplevel commands.
var tlcManager = App.Current.Services.GetService<TopLevelCommandManager>()!; var tlcManager = App.Current.Services.GetService<TopLevelCommandManager>()!;
var topLevelCommand = tlcManager.LookupCommand(commandId); var topLevelCommand = tlcManager.LookupCommand(commandId);
if (topLevelCommand != null) if (topLevelCommand is not null)
{ {
var command = topLevelCommand.CommandViewModel.Model.Unsafe; var command = topLevelCommand.CommandViewModel.Model.Unsafe;
var isPage = command is not IInvokableCommand; var isPage = command is not IInvokableCommand;

View File

@ -100,7 +100,7 @@ internal sealed class PowerToysRootPageService : IRootPageService
_activeExtension = extension; _activeExtension = extension;
var extensionWinRtObject = _activeExtension?.GetExtensionObject(); var extensionWinRtObject = _activeExtension?.GetExtensionObject();
if (extensionWinRtObject != null) if (extensionWinRtObject is not null)
{ {
try try
{ {

View File

@ -18,8 +18,8 @@ public class NumberTranslatorTests
public void Create_ThrowError_WhenCalledNullOrEmpty(string sourceCultureName, string targetCultureName) public void Create_ThrowError_WhenCalledNullOrEmpty(string sourceCultureName, string targetCultureName)
{ {
// Arrange // Arrange
CultureInfo sourceCulture = sourceCultureName != null ? new CultureInfo(sourceCultureName) : null; CultureInfo sourceCulture = sourceCultureName is not null ? new CultureInfo(sourceCultureName) : null;
CultureInfo targetCulture = targetCultureName != null ? new CultureInfo(targetCultureName) : null; CultureInfo targetCulture = targetCultureName is not null ? new CultureInfo(targetCultureName) : null;
// Act // Act
Assert.ThrowsException<ArgumentNullException>(() => NumberTranslator.Create(sourceCulture, targetCulture)); Assert.ThrowsException<ArgumentNullException>(() => NumberTranslator.Create(sourceCulture, targetCulture));

View File

@ -45,7 +45,7 @@ public class TimeAndDateHelperTests
var result = TimeAndDateHelper.GetCalendarWeekRule(setting); var result = TimeAndDateHelper.GetCalendarWeekRule(setting);
// Assert // Assert
if (valueExpected == null) if (valueExpected is null)
{ {
// falls back to system setting. // falls back to system setting.
Assert.AreEqual(DateTimeFormatInfo.CurrentInfo.CalendarWeekRule, result); Assert.AreEqual(DateTimeFormatInfo.CurrentInfo.CalendarWeekRule, result);
@ -72,7 +72,7 @@ public class TimeAndDateHelperTests
var result = TimeAndDateHelper.GetFirstDayOfWeek(setting); var result = TimeAndDateHelper.GetFirstDayOfWeek(setting);
// Assert // Assert
if (valueExpected == null) if (valueExpected is null)
{ {
// falls back to system setting. // falls back to system setting.
Assert.AreEqual(DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek, result); Assert.AreEqual(DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek, result);

View File

@ -2,16 +2,12 @@
// The Microsoft Corporation licenses this file to you under the MIT license. // The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information. // See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using ManagedCommon; using ManagedCommon;
using Microsoft.CmdPal.Ext.Apps.Commands;
using Microsoft.CmdPal.Ext.Apps.Programs; using Microsoft.CmdPal.Ext.Apps.Programs;
using Microsoft.CmdPal.Ext.Apps.Properties; using Microsoft.CmdPal.Ext.Apps.Properties;
using Microsoft.CmdPal.Ext.Apps.State; using Microsoft.CmdPal.Ext.Apps.State;
@ -145,7 +141,7 @@ public sealed partial class AllAppsPage : ListPage
*/ */
var existingAppItem = allApps.FirstOrDefault(f => f.AppIdentifier == e.AppIdentifier); var existingAppItem = allApps.FirstOrDefault(f => f.AppIdentifier == e.AppIdentifier);
if (existingAppItem != null) if (existingAppItem is not null)
{ {
var appListItem = new AppListItem(existingAppItem, true, e.IsPinned); var appListItem = new AppListItem(existingAppItem, true, e.IsPinned);

View File

@ -4,7 +4,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.CmdPal.Ext.Apps.Programs; using Microsoft.CmdPal.Ext.Apps.Programs;
@ -66,7 +65,7 @@ public sealed partial class AppCache : IDisposable
private void UpdateUWPIconPath(Theme theme) private void UpdateUWPIconPath(Theme theme)
{ {
if (_packageRepository != null) if (_packageRepository is not null)
{ {
foreach (UWPApplication app in _packageRepository) foreach (UWPApplication app in _packageRepository)
{ {

View File

@ -72,7 +72,7 @@ internal sealed partial class AppListItem : ListItem
try try
{ {
var stream = await ThumbnailHelper.GetThumbnail(_app.ExePath, true); var stream = await ThumbnailHelper.GetThumbnail(_app.ExePath, true);
if (stream != null) if (stream is not null)
{ {
heroImage = IconInfo.FromStream(stream); heroImage = IconInfo.FromStream(stream);
} }
@ -106,7 +106,7 @@ internal sealed partial class AppListItem : ListItem
try try
{ {
var stream = await ThumbnailHelper.GetThumbnail(_app.ExePath); var stream = await ThumbnailHelper.GetThumbnail(_app.ExePath);
if (stream != null) if (stream is not null)
{ {
var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream)); var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream));
icon = new IconInfo(data, data); icon = new IconInfo(data, data);

View File

@ -6,9 +6,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using ManagedCommon; using ManagedCommon;
using Microsoft.CmdPal.Ext.Apps.Utils; using Microsoft.CmdPal.Ext.Apps.Utils;
using Microsoft.UI.Xaml.Controls;
using Windows.Win32; using Windows.Win32;
using Windows.Win32.Foundation;
using Windows.Win32.Storage.Packaging.Appx; using Windows.Win32.Storage.Packaging.Appx;
using Windows.Win32.System.Com; using Windows.Win32.System.Com;
@ -51,14 +49,14 @@ public static class AppxPackageHelper
{ {
result.Add((IntPtr)manifestApp); result.Add((IntPtr)manifestApp);
} }
else if (manifestApp != null) else if (manifestApp is not null)
{ {
manifestApp->Release(); manifestApp->Release();
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
if (manifestApp != null) if (manifestApp is not null)
{ {
manifestApp->Release(); manifestApp->Release();
} }

View File

@ -22,11 +22,11 @@ public class PackageManagerWrapper : IPackageManager
{ {
var user = WindowsIdentity.GetCurrent().User; var user = WindowsIdentity.GetCurrent().User;
if (user != null) if (user is not null)
{ {
var pkgs = _packageManager.FindPackagesForUser(user.Value); var pkgs = _packageManager.FindPackagesForUser(user.Value);
return pkgs.Select(PackageWrapper.GetWrapperFromPackage).Where(package => package != null); return pkgs.Select(PackageWrapper.GetWrapperFromPackage).Where(package => package is not null);
} }
return Enumerable.Empty<IPackage>(); return Enumerable.Empty<IPackage>();

View File

@ -11,9 +11,7 @@ using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
using ManagedCommon; using ManagedCommon;
using Microsoft.CmdPal.Ext.Apps.Utils; using Microsoft.CmdPal.Ext.Apps.Utils;
using Microsoft.CommandPalette.Extensions.Toolkit;
using Windows.Win32; using Windows.Win32;
using Windows.Win32.Foundation;
using Windows.Win32.Storage.Packaging.Appx; using Windows.Win32.Storage.Packaging.Appx;
using Windows.Win32.System.Com; using Windows.Win32.System.Com;
@ -99,7 +97,7 @@ public partial class UWP
private static string[] XmlNamespaces(string path) private static string[] XmlNamespaces(string path)
{ {
var z = XDocument.Load(path); var z = XDocument.Load(path);
if (z.Root != null) if (z.Root is not null)
{ {
var namespaces = z.Root.Attributes(). var namespaces = z.Root.Attributes().
Where(a => a.IsNamespaceDeclaration). Where(a => a.IsNamespaceDeclaration).

View File

@ -308,7 +308,7 @@ public class UWPApplication : IProgram
private bool SetScaleIcons(string path, string colorscheme, bool highContrast = false) private bool SetScaleIcons(string path, string colorscheme, bool highContrast = false)
{ {
var extension = Path.GetExtension(path); var extension = Path.GetExtension(path);
if (extension != null) if (extension is not null)
{ {
var end = path.Length - extension.Length; var end = path.Length - extension.Length;
var prefix = path.Substring(0, end); var prefix = path.Substring(0, end);
@ -363,7 +363,7 @@ public class UWPApplication : IProgram
private bool SetTargetSizeIcon(string path, string colorscheme, bool highContrast = false) private bool SetTargetSizeIcon(string path, string colorscheme, bool highContrast = false)
{ {
var extension = Path.GetExtension(path); var extension = Path.GetExtension(path);
if (extension != null) if (extension is not null)
{ {
var end = path.Length - extension.Length; var end = path.Length - extension.Length;
var prefix = path.Substring(0, end); var prefix = path.Substring(0, end);
@ -576,7 +576,7 @@ public class UWPApplication : IProgram
var group = new DrawingGroup(); var group = new DrawingGroup();
var converted = ColorConverter.ConvertFromString(currentBackgroundColor); var converted = ColorConverter.ConvertFromString(currentBackgroundColor);
if (converted != null) if (converted is not null)
{ {
var color = (Color)converted; var color = (Color)converted;
var brush = new SolidColorBrush(color); var brush = new SolidColorBrush(color);

View File

@ -170,7 +170,7 @@ public class Win32Program : IProgram
public bool QueryEqualsNameForRunCommands(string query) public bool QueryEqualsNameForRunCommands(string query)
{ {
if (query != null && AppType == ApplicationType.RunCommand) if (query is not null && AppType == ApplicationType.RunCommand)
{ {
// Using OrdinalIgnoreCase since this is used internally // Using OrdinalIgnoreCase since this is used internally
if (!query.Equals(Name, StringComparison.OrdinalIgnoreCase) && !query.Equals(ExecutableName, StringComparison.OrdinalIgnoreCase)) if (!query.Equals(Name, StringComparison.OrdinalIgnoreCase) && !query.Equals(ExecutableName, StringComparison.OrdinalIgnoreCase))
@ -667,7 +667,7 @@ public class Win32Program : IProgram
var paths = new List<string>(); var paths = new List<string>();
using (var root = Registry.LocalMachine.OpenSubKey(appPaths)) using (var root = Registry.LocalMachine.OpenSubKey(appPaths))
{ {
if (root != null) if (root is not null)
{ {
paths.AddRange(GetPathsFromRegistry(root)); paths.AddRange(GetPathsFromRegistry(root));
} }
@ -675,7 +675,7 @@ public class Win32Program : IProgram
using (var root = Registry.CurrentUser.OpenSubKey(appPaths)) using (var root = Registry.CurrentUser.OpenSubKey(appPaths))
{ {
if (root != null) if (root is not null)
{ {
paths.AddRange(GetPathsFromRegistry(root)); paths.AddRange(GetPathsFromRegistry(root));
} }
@ -700,7 +700,7 @@ public class Win32Program : IProgram
{ {
using (var key = root.OpenSubKey(subkey)) using (var key = root.OpenSubKey(subkey))
{ {
if (key == null) if (key is null)
{ {
return string.Empty; return string.Empty;
} }
@ -742,13 +742,13 @@ public class Win32Program : IProgram
public bool Equals(Win32Program? app1, Win32Program? app2) public bool Equals(Win32Program? app1, Win32Program? app2)
{ {
if (app1 == null && app2 == null) if (app1 is null && app2 is null)
{ {
return true; return true;
} }
return app1 != null return app1 is not null
&& app2 != null && app2 is not null
&& (app1.Name?.ToUpperInvariant(), app1.ExecutableName?.ToUpperInvariant(), app1.FullPath?.ToUpperInvariant()) && (app1.Name?.ToUpperInvariant(), app1.ExecutableName?.ToUpperInvariant(), app1.FullPath?.ToUpperInvariant())
.Equals((app2.Name?.ToUpperInvariant(), app2.ExecutableName?.ToUpperInvariant(), app2.FullPath?.ToUpperInvariant())); .Equals((app2.Name?.ToUpperInvariant(), app2.ExecutableName?.ToUpperInvariant(), app2.FullPath?.ToUpperInvariant()));
} }
@ -908,7 +908,7 @@ public class Win32Program : IProgram
Parallel.ForEach(paths, source => Parallel.ForEach(paths, source =>
{ {
var program = GetProgramFromPath(source); var program = GetProgramFromPath(source);
if (program != null) if (program is not null)
{ {
programsList.Add(program); programsList.Add(program);
} }
@ -918,7 +918,7 @@ public class Win32Program : IProgram
Parallel.ForEach(runCommandPaths, source => Parallel.ForEach(runCommandPaths, source =>
{ {
var program = GetRunCommandProgramFromPath(source); var program = GetRunCommandProgramFromPath(source);
if (program != null) if (program is not null)
{ {
runCommandProgramsList.Add(program); runCommandProgramsList.Add(program);
} }

View File

@ -19,7 +19,7 @@ public sealed partial class FileSystemWatcherWrapper : FileSystemWatcher, IFileS
get => this.Filters; get => this.Filters;
set set
{ {
if (value != null) if (value is not null)
{ {
foreach (var filter in value) foreach (var filter in value)
{ {

View File

@ -10,7 +10,6 @@ using System.Diagnostics.CodeAnalysis;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using ManagedCommon; using ManagedCommon;
using Microsoft.CmdPal.Ext.Apps.Programs;
using Win32Program = Microsoft.CmdPal.Ext.Apps.Programs.Win32Program; using Win32Program = Microsoft.CmdPal.Ext.Apps.Programs.Win32Program;
namespace Microsoft.CmdPal.Ext.Apps.Storage; namespace Microsoft.CmdPal.Ext.Apps.Storage;
@ -53,7 +52,7 @@ internal sealed partial class Win32ProgramRepository : ListRepository<Programs.W
if (!string.IsNullOrEmpty(appPath)) if (!string.IsNullOrEmpty(appPath))
{ {
Win32Program? app = Win32Program.GetAppFromPath(appPath); Win32Program? app = Win32Program.GetAppFromPath(appPath);
if (app != null) if (app is not null)
{ {
Add(app); Add(app);
_isDirty = true; _isDirty = true;
@ -137,7 +136,7 @@ internal sealed partial class Win32ProgramRepository : ListRepository<Programs.W
} }
// To remove the old app which has been renamed and to add the new application. // To remove the old app which has been renamed and to add the new application.
if (oldApp != null) if (oldApp is not null)
{ {
if (string.IsNullOrWhiteSpace(oldApp.Name) || string.IsNullOrWhiteSpace(oldApp.ExecutableName) || string.IsNullOrWhiteSpace(oldApp.FullPath)) if (string.IsNullOrWhiteSpace(oldApp.Name) || string.IsNullOrWhiteSpace(oldApp.ExecutableName) || string.IsNullOrWhiteSpace(oldApp.FullPath))
{ {
@ -149,7 +148,7 @@ internal sealed partial class Win32ProgramRepository : ListRepository<Programs.W
} }
} }
if (newApp != null) if (newApp is not null)
{ {
Add(newApp); Add(newApp);
_isDirty = true; _isDirty = true;
@ -177,7 +176,7 @@ internal sealed partial class Win32ProgramRepository : ListRepository<Programs.W
if (extension.Equals(LnkExtension, StringComparison.OrdinalIgnoreCase)) if (extension.Equals(LnkExtension, StringComparison.OrdinalIgnoreCase))
{ {
app = GetAppWithSameLnkFilePath(path); app = GetAppWithSameLnkFilePath(path);
if (app == null) if (app is null)
{ {
// Cancelled links won't have a resolved path. // Cancelled links won't have a resolved path.
app = GetAppWithSameNameAndExecutable(Path.GetFileNameWithoutExtension(path), Path.GetFileName(path)); app = GetAppWithSameNameAndExecutable(Path.GetFileNameWithoutExtension(path), Path.GetFileName(path));
@ -197,7 +196,7 @@ internal sealed partial class Win32ProgramRepository : ListRepository<Programs.W
Logger.LogError(ex.Message); Logger.LogError(ex.Message);
} }
if (app != null) if (app is not null)
{ {
Remove(app); Remove(app);
_isDirty = true; _isDirty = true;
@ -244,7 +243,7 @@ internal sealed partial class Win32ProgramRepository : ListRepository<Programs.W
if (!Path.GetExtension(path).Equals(UrlExtension, StringComparison.OrdinalIgnoreCase) && !Path.GetExtension(path).Equals(LnkExtension, StringComparison.OrdinalIgnoreCase)) if (!Path.GetExtension(path).Equals(UrlExtension, StringComparison.OrdinalIgnoreCase) && !Path.GetExtension(path).Equals(LnkExtension, StringComparison.OrdinalIgnoreCase))
{ {
Programs.Win32Program? app = Programs.Win32Program.GetAppFromPath(path); Programs.Win32Program? app = Programs.Win32Program.GetAppFromPath(path);
if (app != null) if (app is not null)
{ {
Add(app); Add(app);
_isDirty = true; _isDirty = true;

View File

@ -2,7 +2,6 @@
// The Microsoft Corporation licenses this file to you under the MIT license. // The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information. // See the LICENSE file in the project root for more information.
using System;
using Windows.Win32; using Windows.Win32;
using Windows.Win32.Foundation; using Windows.Win32.Foundation;
using Windows.Win32.System.Com; using Windows.Win32.System.Com;
@ -27,7 +26,7 @@ public static class ComFreeHelper
public static unsafe void ComObjectRelease<T>(T* comPtr) public static unsafe void ComObjectRelease<T>(T* comPtr)
where T : unmanaged where T : unmanaged
{ {
if (comPtr != null) if (comPtr is not null)
{ {
((IUnknown*)comPtr)->Release(); ((IUnknown*)comPtr)->Release();
} }

View File

@ -3,8 +3,6 @@
// See the LICENSE file in the project root for more information. // See the LICENSE file in the project root for more information.
using System; using System;
using System.Text;
using ManagedCommon;
using Windows.Win32; using Windows.Win32;
using Windows.Win32.Foundation; using Windows.Win32.Foundation;
using Windows.Win32.System.Com; using Windows.Win32.System.Com;
@ -37,7 +35,7 @@ public class ShellLinkHelper : IShellLinkHelper
IPersistFile* persistFile = null; IPersistFile* persistFile = null;
Guid iid = typeof(IPersistFile).GUID; Guid iid = typeof(IPersistFile).GUID;
((IUnknown*)link)->QueryInterface(&iid, (void**)&persistFile); ((IUnknown*)link)->QueryInterface(&iid, (void**)&persistFile);
if (persistFile != null) if (persistFile is not null)
{ {
using var persistFileHandle = new SafeComHandle((IntPtr)persistFile); using var persistFileHandle = new SafeComHandle((IntPtr)persistFile);
try try

View File

@ -45,7 +45,7 @@ public class ShellLocalization
var filename = ComFreeHelper.GetStringAndFree(hr, filenamePtr); var filename = ComFreeHelper.GetStringAndFree(hr, filenamePtr);
if (filename == null) if (filename is null)
{ {
return string.Empty; return string.Empty;
} }

View File

@ -32,7 +32,7 @@ public static class ThemeHelper
// Retrieve the registry value, which is a DWORD (0 or 1) // Retrieve the registry value, which is a DWORD (0 or 1)
var registryValueObj = Registry.GetValue(registryKey, registryValue, null); var registryValueObj = Registry.GetValue(registryKey, registryValue, null);
if (registryValueObj != null) if (registryValueObj is not null)
{ {
// 0 = Dark mode, 1 = Light mode // 0 = Dark mode, 1 = Light mode
var isLightMode = Convert.ToBoolean((int)registryValueObj, CultureInfo.InvariantCulture); var isLightMode = Convert.ToBoolean((int)registryValueObj, CultureInfo.InvariantCulture);

View File

@ -63,7 +63,7 @@ internal sealed partial class AddBookmarkForm : FormContent
public override CommandResult SubmitForm(string payload) public override CommandResult SubmitForm(string payload)
{ {
var formInput = JsonNode.Parse(payload); var formInput = JsonNode.Parse(payload);
if (formInput == null) if (formInput is null)
{ {
return CommandResult.GoHome(); return CommandResult.GoHome();
} }

View File

@ -73,7 +73,7 @@ internal sealed partial class BookmarkPlaceholderForm : FormContent
// parse the submitted JSON and then open the link // parse the submitted JSON and then open the link
var formInput = JsonNode.Parse(payload); var formInput = JsonNode.Parse(payload);
var formObject = formInput?.AsObject(); var formObject = formInput?.AsObject();
if (formObject == null) if (formObject is null)
{ {
return CommandResult.GoHome(); return CommandResult.GoHome();
} }

View File

@ -49,7 +49,7 @@ public partial class BookmarksCommandProvider : CommandProvider
private void SaveAndUpdateCommands() private void SaveAndUpdateCommands()
{ {
if (_bookmarks != null) if (_bookmarks is not null)
{ {
var jsonPath = BookmarksCommandProvider.StateJsonPath(); var jsonPath = BookmarksCommandProvider.StateJsonPath();
Bookmarks.WriteToFile(jsonPath, _bookmarks); Bookmarks.WriteToFile(jsonPath, _bookmarks);
@ -64,12 +64,12 @@ public partial class BookmarksCommandProvider : CommandProvider
List<CommandItem> collected = []; List<CommandItem> collected = [];
collected.Add(new CommandItem(_addNewCommand)); collected.Add(new CommandItem(_addNewCommand));
if (_bookmarks == null) if (_bookmarks is null)
{ {
LoadBookmarksFromFile(); LoadBookmarksFromFile();
} }
if (_bookmarks != null) if (_bookmarks is not null)
{ {
collected.AddRange(_bookmarks.Data.Select(BookmarkToCommandItem)); collected.AddRange(_bookmarks.Data.Select(BookmarkToCommandItem));
} }
@ -93,7 +93,7 @@ public partial class BookmarksCommandProvider : CommandProvider
Logger.LogError(ex.Message); Logger.LogError(ex.Message);
} }
if (_bookmarks == null) if (_bookmarks is null)
{ {
_bookmarks = new(); _bookmarks = new();
} }
@ -134,7 +134,7 @@ public partial class BookmarksCommandProvider : CommandProvider
name: Resources.bookmarks_delete_name, name: Resources.bookmarks_delete_name,
action: () => action: () =>
{ {
if (_bookmarks != null) if (_bookmarks is not null)
{ {
ExtensionHost.LogMessage($"Deleting bookmark ({bookmark.Name},{bookmark.Bookmark})"); ExtensionHost.LogMessage($"Deleting bookmark ({bookmark.Name},{bookmark.Bookmark})");

View File

@ -73,7 +73,7 @@ public partial class UrlCommand : InvokableCommand
if (string.IsNullOrEmpty(args)) if (string.IsNullOrEmpty(args))
{ {
var uri = GetUri(exe); var uri = GetUri(exe);
if (uri != null) if (uri is not null)
{ {
_ = Launcher.LaunchUriAsync(uri); _ = Launcher.LaunchUriAsync(uri);
} }
@ -109,7 +109,7 @@ public partial class UrlCommand : InvokableCommand
// First, try to get the icon from the thumbnail helper // First, try to get the icon from the thumbnail helper
// This works for local files and folders // This works for local files and folders
icon = await MaybeGetIconForPath(target); icon = await MaybeGetIconForPath(target);
if (icon != null) if (icon is not null)
{ {
return icon; return icon;
} }
@ -142,7 +142,7 @@ public partial class UrlCommand : InvokableCommand
{ {
// If the executable exists, try to get the icon from the file // If the executable exists, try to get the icon from the file
icon = await MaybeGetIconForPath(fullExePath); icon = await MaybeGetIconForPath(fullExePath);
if (icon != null) if (icon is not null)
{ {
return icon; return icon;
} }
@ -154,7 +154,7 @@ public partial class UrlCommand : InvokableCommand
try try
{ {
var uri = GetUri(baseString); var uri = GetUri(baseString);
if (uri != null) if (uri is not null)
{ {
var hostname = uri.Host; var hostname = uri.Host;
var faviconUrl = $"{uri.Scheme}://{hostname}/favicon.ico"; var faviconUrl = $"{uri.Scheme}://{hostname}/favicon.ico";
@ -176,7 +176,7 @@ public partial class UrlCommand : InvokableCommand
try try
{ {
var stream = await ThumbnailHelper.GetThumbnail(target); var stream = await ThumbnailHelper.GetThumbnail(target);
if (stream != null) if (stream is not null)
{ {
var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream)); var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream));
return new IconInfo(data, data); return new IconInfo(data, data);

View File

@ -107,7 +107,7 @@ public class NumberTranslator
// Currently, we only convert base literals (hexadecimal, binary, octal) to decimal. // Currently, we only convert base literals (hexadecimal, binary, octal) to decimal.
var converted = ConvertBaseLiteral(token, cultureTo); var converted = ConvertBaseLiteral(token, cultureTo);
if (converted != null) if (converted is not null)
{ {
outputBuilder.Append(converted); outputBuilder.Append(converted);
continue; continue;

View File

@ -16,7 +16,7 @@ public static class ResultHelper
public static ListItem CreateResult(decimal? roundedResult, CultureInfo inputCulture, CultureInfo outputCulture, string query, ISettingsInterface settings, TypedEventHandler<object, object> handleSave) public static ListItem CreateResult(decimal? roundedResult, CultureInfo inputCulture, CultureInfo outputCulture, string query, ISettingsInterface settings, TypedEventHandler<object, object> handleSave)
{ {
// Return null when the expression is not a valid calculator query. // Return null when the expression is not a valid calculator query.
if (roundedResult == null) if (roundedResult is null)
{ {
return null; return null;
} }
@ -48,7 +48,7 @@ public static class ResultHelper
public static ListItem CreateResult(decimal? roundedResult, CultureInfo inputCulture, CultureInfo outputCulture, string query) public static ListItem CreateResult(decimal? roundedResult, CultureInfo inputCulture, CultureInfo outputCulture, string query)
{ {
// Return null when the expression is not a valid calculator query. // Return null when the expression is not a valid calculator query.
if (roundedResult == null) if (roundedResult is null)
{ {
return null; return null;
} }

View File

@ -82,7 +82,7 @@ public sealed partial class CalculatorListPage : DynamicListPage
{ {
this._items.Clear(); this._items.Clear();
if (result != null) if (result is not null)
{ {
this._items.Add(result); this._items.Add(result);
} }

View File

@ -28,7 +28,7 @@ public sealed partial class FallbackCalculatorItem : FallbackCommandItem
{ {
var result = QueryHelper.Query(query, _settings, true, null); var result = QueryHelper.Query(query, _settings, true, null);
if (result == null) if (result is null)
{ {
_copyCommand.Text = string.Empty; _copyCommand.Text = string.Empty;
_copyCommand.Name = string.Empty; _copyCommand.Name = string.Empty;

View File

@ -139,7 +139,7 @@ internal static class ClipboardHelper
switch (clipboardFormat) switch (clipboardFormat)
{ {
case ClipboardFormat.Text: case ClipboardFormat.Text:
if (clipboardItem.Content == null) if (clipboardItem.Content is null)
{ {
ExtensionHost.LogMessage(new LogMessage() { Message = "No valid clipboard content" }); ExtensionHost.LogMessage(new LogMessage() { Message = "No valid clipboard content" });
return; return;
@ -152,7 +152,7 @@ internal static class ClipboardHelper
break; break;
case ClipboardFormat.Image: case ClipboardFormat.Image:
if (clipboardItem.ImageData == null) if (clipboardItem.ImageData is null)
{ {
ExtensionHost.LogMessage(new LogMessage() { Message = "No valid clipboard content" }); ExtensionHost.LogMessage(new LogMessage() { Message = "No valid clipboard content" });
return; return;
@ -240,7 +240,7 @@ internal static class ClipboardHelper
internal static async Task<SoftwareBitmap?> GetClipboardImageContentAsync(DataPackageView clipboardData) internal static async Task<SoftwareBitmap?> GetClipboardImageContentAsync(DataPackageView clipboardData)
{ {
using var stream = await GetClipboardImageStreamAsync(clipboardData); using var stream = await GetClipboardImageStreamAsync(clipboardData);
if (stream != null) if (stream is not null)
{ {
var decoder = await BitmapDecoder.CreateAsync(stream); var decoder = await BitmapDecoder.CreateAsync(stream);
return await decoder.GetSoftwareBitmapAsync(); return await decoder.GetSoftwareBitmapAsync();
@ -255,7 +255,7 @@ internal static class ClipboardHelper
{ {
var storageItems = await clipboardData.GetStorageItemsAsync(); var storageItems = await clipboardData.GetStorageItemsAsync();
var file = storageItems.Count == 1 ? storageItems[0] as StorageFile : null; var file = storageItems.Count == 1 ? storageItems[0] as StorageFile : null;
if (file != null) if (file is not null)
{ {
return await file.OpenReadAsync(); return await file.OpenReadAsync();
} }

View File

@ -37,7 +37,7 @@ public class ClipboardItem
} }
[MemberNotNullWhen(true, nameof(ImageData))] [MemberNotNullWhen(true, nameof(ImageData))]
private bool IsImage => ImageData != null; private bool IsImage => ImageData is not null;
[MemberNotNullWhen(true, nameof(Content))] [MemberNotNullWhen(true, nameof(Content))]
private bool IsText => !string.IsNullOrEmpty(Content); private bool IsText => !string.IsNullOrEmpty(Content);

View File

@ -54,7 +54,7 @@ internal sealed partial class ClipboardHistoryListPage : ListPage
try try
{ {
var allowClipboardHistory = Registry.GetValue(registryKey, "AllowClipboardHistory", null); var allowClipboardHistory = Registry.GetValue(registryKey, "AllowClipboardHistory", null);
return allowClipboardHistory != null ? (int)allowClipboardHistory == 0 : false; return allowClipboardHistory is not null ? (int)allowClipboardHistory == 0 : false;
} }
catch (Exception) catch (Exception)
{ {
@ -100,7 +100,7 @@ internal sealed partial class ClipboardHistoryListPage : ListPage
{ {
var imageReceived = await item.Item.Content.GetBitmapAsync(); var imageReceived = await item.Item.Content.GetBitmapAsync();
if (imageReceived != null) if (imageReceived is not null)
{ {
item.ImageData = imageReceived; item.ImageData = imageReceived;
} }
@ -141,7 +141,7 @@ internal sealed partial class ClipboardHistoryListPage : ListPage
for (var i = 0; i < clipboardHistory.Count; i++) for (var i = 0; i < clipboardHistory.Count; i++)
{ {
var item = clipboardHistory[i]; var item = clipboardHistory[i];
if (item != null) if (item is not null)
{ {
listItems.Add(item.ToListItem()); listItems.Add(item.ToListItem());
} }

View File

@ -46,7 +46,7 @@ internal sealed partial class FallbackOpenFileItem : FallbackCommandItem, System
return; return;
} }
if (_suppressCallback != null && _suppressCallback(query)) if (_suppressCallback is not null && _suppressCallback(query))
{ {
Command = new NoOpCommand(); Command = new NoOpCommand();
Title = string.Empty; Title = string.Empty;
@ -71,7 +71,7 @@ internal sealed partial class FallbackOpenFileItem : FallbackCommandItem, System
try try
{ {
var stream = ThumbnailHelper.GetThumbnail(item.FullPath).Result; var stream = ThumbnailHelper.GetThumbnail(item.FullPath).Result;
if (stream != null) if (stream is not null)
{ {
var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream)); var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream));
Icon = new IconInfo(data, data); Icon = new IconInfo(data, data);
@ -92,7 +92,7 @@ internal sealed partial class FallbackOpenFileItem : FallbackCommandItem, System
_searchEngine.Query(query, _queryCookie); _searchEngine.Query(query, _queryCookie);
var results = _searchEngine.FetchItems(0, 20, _queryCookie, out var _); var results = _searchEngine.FetchItems(0, 20, _queryCookie, out var _);
if (results.Count == 0 || ((results[0] as IndexerListItem) == null)) if (results.Count == 0 || ((results[0] as IndexerListItem) is null))
{ {
// Exit 2: We searched for the file, and found nothing. Oh well. // Exit 2: We searched for the file, and found nothing. Oh well.
// Hide ourselves. // Hide ourselves.

View File

@ -16,7 +16,7 @@ internal static class DataSourceManager
public static IDBInitialize GetDataSource() public static IDBInitialize GetDataSource()
{ {
if (_dataSource == null) if (_dataSource is null)
{ {
InitializeDataSource(); InitializeDataSource();
} }

View File

@ -12,7 +12,6 @@ using ManagedCsWin32;
using Microsoft.CmdPal.Ext.Indexer.Indexer.OleDB; using Microsoft.CmdPal.Ext.Indexer.Indexer.OleDB;
using Microsoft.CmdPal.Ext.Indexer.Indexer.SystemSearch; using Microsoft.CmdPal.Ext.Indexer.Indexer.SystemSearch;
using Microsoft.CmdPal.Ext.Indexer.Indexer.Utils; using Microsoft.CmdPal.Ext.Indexer.Indexer.Utils;
using static Microsoft.CmdPal.Ext.Indexer.Indexer.Utils.NativeHelpers;
namespace Microsoft.CmdPal.Ext.Indexer.Indexer; namespace Microsoft.CmdPal.Ext.Indexer.Indexer;
@ -54,14 +53,14 @@ internal sealed partial class SearchQuery : IDisposable
try try
{ {
queryTpTimer = new Timer(QueryTimerCallback, this, Timeout.Infinite, Timeout.Infinite); queryTpTimer = new Timer(QueryTimerCallback, this, Timeout.Infinite, Timeout.Infinite);
if (queryTpTimer == null) if (queryTpTimer is null)
{ {
Logger.LogError("Failed to create query timer"); Logger.LogError("Failed to create query timer");
return; return;
} }
queryCompletedEvent = new EventWaitHandle(false, EventResetMode.ManualReset); queryCompletedEvent = new EventWaitHandle(false, EventResetMode.ManualReset);
if (queryCompletedEvent == null) if (queryCompletedEvent is null)
{ {
Logger.LogError("Failed to create query completed event"); Logger.LogError("Failed to create query completed event");
return; return;
@ -85,7 +84,7 @@ internal sealed partial class SearchQuery : IDisposable
// Are we currently doing work? If so, let's cancel // Are we currently doing work? If so, let's cancel
lock (_lockObject) lock (_lockObject)
{ {
if (queryTpTimer != null) if (queryTpTimer is not null)
{ {
queryTpTimer.Change(Timeout.Infinite, Timeout.Infinite); queryTpTimer.Change(Timeout.Infinite, Timeout.Infinite);
queryTpTimer.Dispose(); queryTpTimer.Dispose();
@ -117,7 +116,7 @@ internal sealed partial class SearchQuery : IDisposable
try try
{ {
// We need to generate a search query string with the search text the user entered above // We need to generate a search query string with the search text the user entered above
if (currentRowset != null) if (currentRowset is not null)
{ {
// We have a previous rowset, this means the user is typing and we should store this // We have a previous rowset, this means the user is typing and we should store this
// recapture the where ID from this so the next ExecuteSync call will be faster // recapture the where ID from this so the next ExecuteSync call will be faster
@ -146,14 +145,14 @@ internal sealed partial class SearchQuery : IDisposable
{ {
getRow.GetRowFromHROW(null, rowHandle, ref Unsafe.AsRef(in IID.IPropertyStore), out var propertyStore); getRow.GetRowFromHROW(null, rowHandle, ref Unsafe.AsRef(in IID.IPropertyStore), out var propertyStore);
if (propertyStore == null) if (propertyStore is null)
{ {
Logger.LogError("Failed to get IPropertyStore interface"); Logger.LogError("Failed to get IPropertyStore interface");
return false; return false;
} }
var searchResult = SearchResult.Create(propertyStore); var searchResult = SearchResult.Create(propertyStore);
if (searchResult == null) if (searchResult is null)
{ {
Logger.LogError("Failed to create search result"); Logger.LogError("Failed to create search result");
return false; return false;
@ -171,7 +170,7 @@ internal sealed partial class SearchQuery : IDisposable
public bool FetchRows(int offset, int limit) public bool FetchRows(int offset, int limit)
{ {
if (currentRowset == null) if (currentRowset is null)
{ {
Logger.LogError("No rowset to fetch rows from"); Logger.LogError("No rowset to fetch rows from");
return false; return false;
@ -241,7 +240,7 @@ internal sealed partial class SearchQuery : IDisposable
{ {
var queryStr = QueryStringBuilder.GeneratePrimingQuery(); var queryStr = QueryStringBuilder.GeneratePrimingQuery();
var rowset = ExecuteCommand(queryStr); var rowset = ExecuteCommand(queryStr);
if (rowset != null) if (rowset is not null)
{ {
reuseRowset = rowset; reuseRowset = rowset;
reuseWhereID = GetReuseWhereId(reuseRowset); reuseWhereID = GetReuseWhereId(reuseRowset);
@ -261,7 +260,7 @@ internal sealed partial class SearchQuery : IDisposable
var guid = typeof(IDBCreateCommand).GUID; var guid = typeof(IDBCreateCommand).GUID;
session.CreateSession(IntPtr.Zero, ref guid, out var ppDBSession); session.CreateSession(IntPtr.Zero, ref guid, out var ppDBSession);
if (ppDBSession == null) if (ppDBSession is null)
{ {
Logger.LogError("CreateSession failed"); Logger.LogError("CreateSession failed");
return null; return null;
@ -271,7 +270,7 @@ internal sealed partial class SearchQuery : IDisposable
guid = typeof(ICommandText).GUID; guid = typeof(ICommandText).GUID;
createCommand.CreateCommand(IntPtr.Zero, ref guid, out ICommandText commandText); createCommand.CreateCommand(IntPtr.Zero, ref guid, out ICommandText commandText);
if (commandText == null) if (commandText is null)
{ {
Logger.LogError("Failed to get ICommandText interface"); Logger.LogError("Failed to get ICommandText interface");
return null; return null;
@ -342,13 +341,13 @@ internal sealed partial class SearchQuery : IDisposable
{ {
var rowsetInfo = (IRowsetInfo)rowset; var rowsetInfo = (IRowsetInfo)rowset;
if (rowsetInfo == null) if (rowsetInfo is null)
{ {
return 0; return 0;
} }
var prop = GetPropset(rowsetInfo); var prop = GetPropset(rowsetInfo);
if (prop == null) if (prop is null)
{ {
return 0; return 0;
} }

View File

@ -26,7 +26,7 @@ internal sealed class SearchResult
ItemUrl = url; ItemUrl = url;
IsFolder = isFolder; IsFolder = isFolder;
if (LaunchUri == null || LaunchUri.Length == 0) if (LaunchUri is null || LaunchUri.Length == 0)
{ {
// Launch the file with the default app, so use the file path // Launch the file with the default app, so use the file path
LaunchUri = filePath; LaunchUri = filePath;

View File

@ -5,8 +5,6 @@
using System; using System;
using System.Globalization; using System.Globalization;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.Marshalling;
using ManagedCommon; using ManagedCommon;
using ManagedCsWin32; using ManagedCsWin32;
using Microsoft.CmdPal.Ext.Indexer.Indexer.SystemSearch; using Microsoft.CmdPal.Ext.Indexer.Indexer.SystemSearch;
@ -28,7 +26,7 @@ internal sealed partial class QueryStringBuilder
public static string GenerateQuery(string searchText, uint whereId) public static string GenerateQuery(string searchText, uint whereId)
{ {
if (queryHelper == null) if (queryHelper is null)
{ {
ISearchManager searchManager; ISearchManager searchManager;
@ -43,13 +41,13 @@ internal sealed partial class QueryStringBuilder
} }
ISearchCatalogManager catalogManager = searchManager.GetCatalog(SystemIndex); ISearchCatalogManager catalogManager = searchManager.GetCatalog(SystemIndex);
if (catalogManager == null) if (catalogManager is null)
{ {
throw new ArgumentException($"Failed to get catalog manager for {SystemIndex}"); throw new ArgumentException($"Failed to get catalog manager for {SystemIndex}");
} }
queryHelper = catalogManager.GetQueryHelper(); queryHelper = catalogManager.GetQueryHelper();
if (queryHelper == null) if (queryHelper is null)
{ {
throw new ArgumentException("Failed to get query helper from catalog manager"); throw new ArgumentException("Failed to get query helper from catalog manager");
} }

View File

@ -44,12 +44,12 @@ internal sealed partial class ActionsListContextItem : CommandContextItem, IDisp
{ {
lock (UpdateMoreCommandsLock) lock (UpdateMoreCommandsLock)
{ {
if (actionRuntime == null) if (actionRuntime is null)
{ {
actionRuntime = ActionRuntimeManager.InstanceAsync.GetAwaiter().GetResult(); actionRuntime = ActionRuntimeManager.InstanceAsync.GetAwaiter().GetResult();
} }
if (actionRuntime == null) if (actionRuntime is null)
{ {
return; return;
} }
@ -62,7 +62,7 @@ internal sealed partial class ActionsListContextItem : CommandContextItem, IDisp
{ {
var extension = System.IO.Path.GetExtension(fullPath).ToLower(CultureInfo.InvariantCulture); var extension = System.IO.Path.GetExtension(fullPath).ToLower(CultureInfo.InvariantCulture);
ActionEntity entity = null; ActionEntity entity = null;
if (extension != null) if (extension is not null)
{ {
if (extension == ".jpg" || extension == ".jpeg" || extension == ".png") if (extension == ".jpg" || extension == ".jpeg" || extension == ".png")
{ {
@ -74,7 +74,7 @@ internal sealed partial class ActionsListContextItem : CommandContextItem, IDisp
} }
} }
if (entity == null) if (entity is null)
{ {
entity = actionRuntime.EntityFactory.CreateFileEntity(fullPath); entity = actionRuntime.EntityFactory.CreateFileEntity(fullPath);
} }
@ -100,7 +100,7 @@ internal sealed partial class ActionsListContextItem : CommandContextItem, IDisp
{ {
lock (UpdateMoreCommandsLock) lock (UpdateMoreCommandsLock)
{ {
if (actionRuntime != null) if (actionRuntime is not null)
{ {
actionRuntime.ActionCatalog.Changed -= ActionCatalog_Changed; actionRuntime.ActionCatalog.Changed -= ActionCatalog_Changed;
} }

View File

@ -35,14 +35,14 @@ public sealed partial class DirectoryExplorePage : DynamicListPage
public override void UpdateSearchText(string oldSearch, string newSearch) public override void UpdateSearchText(string oldSearch, string newSearch)
{ {
if (_directoryContents == null) if (_directoryContents is null)
{ {
return; return;
} }
if (string.IsNullOrEmpty(newSearch)) if (string.IsNullOrEmpty(newSearch))
{ {
if (_filteredContents != null) if (_filteredContents is not null)
{ {
_filteredContents = null; _filteredContents = null;
RaiseItemsChanged(-1); RaiseItemsChanged(-1);
@ -58,7 +58,7 @@ public sealed partial class DirectoryExplorePage : DynamicListPage
newSearch, newSearch,
(s, i) => ListHelpers.ScoreListItem(s, i)); (s, i) => ListHelpers.ScoreListItem(s, i));
if (_filteredContents != null) if (_filteredContents is not null)
{ {
lock (_filteredContents) lock (_filteredContents)
{ {
@ -75,12 +75,12 @@ public sealed partial class DirectoryExplorePage : DynamicListPage
public override IListItem[] GetItems() public override IListItem[] GetItems()
{ {
if (_filteredContents != null) if (_filteredContents is not null)
{ {
return _filteredContents.ToArray(); return _filteredContents.ToArray();
} }
if (_directoryContents != null) if (_directoryContents is not null)
{ {
return _directoryContents.ToArray(); return _directoryContents.ToArray();
} }
@ -120,7 +120,7 @@ public sealed partial class DirectoryExplorePage : DynamicListPage
try try
{ {
var stream = ThumbnailHelper.GetThumbnail(item.FilePath).Result; var stream = ThumbnailHelper.GetThumbnail(item.FilePath).Result;
if (stream != null) if (stream is not null)
{ {
var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream)); var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream));
icon = new IconInfo(data, data); icon = new IconInfo(data, data);

View File

@ -31,7 +31,7 @@ public sealed partial class DirectoryPage : ListPage
public override IListItem[] GetItems() public override IListItem[] GetItems()
{ {
if (_directoryContents != null) if (_directoryContents is not null)
{ {
return _directoryContents.ToArray(); return _directoryContents.ToArray();
} }
@ -86,7 +86,7 @@ public sealed partial class DirectoryPage : ListPage
try try
{ {
var stream = ThumbnailHelper.GetThumbnail(item.FilePath).Result; var stream = ThumbnailHelper.GetThumbnail(item.FilePath).Result;
if (stream != null) if (stream is not null)
{ {
var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream)); var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream));
icon = new IconInfo(data, data); icon = new IconInfo(data, data);

View File

@ -42,7 +42,7 @@ public sealed partial class SearchEngine : IDisposable
{ {
hasMore = false; hasMore = false;
var results = new List<IListItem>(); var results = new List<IListItem>();
if (_searchQuery != null) if (_searchQuery is not null)
{ {
var cookie = _searchQuery.Cookie; var cookie = _searchQuery.Cookie;
if (cookie == queryCookie) if (cookie == queryCookie)
@ -59,7 +59,7 @@ public sealed partial class SearchEngine : IDisposable
try try
{ {
var stream = ThumbnailHelper.GetThumbnail(result.LaunchUri).Result; var stream = ThumbnailHelper.GetThumbnail(result.LaunchUri).Result;
if (stream != null) if (stream is not null)
{ {
var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream)); var data = new IconData(RandomAccessStreamReference.CreateFromStream(stream));
icon = new IconInfo(data, data); icon = new IconInfo(data, data);

View File

@ -7,7 +7,6 @@ using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using ManagedCommon;
using Microsoft.CmdPal.Ext.Registry.Classes; using Microsoft.CmdPal.Ext.Registry.Classes;
using Microsoft.CmdPal.Ext.Registry.Constants; using Microsoft.CmdPal.Ext.Registry.Constants;
using Microsoft.CmdPal.Ext.Registry.Properties; using Microsoft.CmdPal.Ext.Registry.Properties;
@ -118,7 +117,7 @@ internal static class RegistryHelper
subKey = result.First().Key; subKey = result.First().Key;
} }
if (result.Count > 1 || subKey == null) if (result.Count > 1 || subKey is null)
{ {
break; break;
} }
@ -183,7 +182,7 @@ internal static class RegistryHelper
if (string.Equals(subKey, searchSubKey, StringComparison.OrdinalIgnoreCase)) if (string.Equals(subKey, searchSubKey, StringComparison.OrdinalIgnoreCase))
{ {
var key = parentKey.OpenSubKey(subKey, RegistryKeyPermissionCheck.ReadSubTree); var key = parentKey.OpenSubKey(subKey, RegistryKeyPermissionCheck.ReadSubTree);
if (key != null) if (key is not null)
{ {
list.Add(new RegistryEntry(key)); list.Add(new RegistryEntry(key));
} }
@ -194,7 +193,7 @@ internal static class RegistryHelper
try try
{ {
var key = parentKey.OpenSubKey(subKey, RegistryKeyPermissionCheck.ReadSubTree); var key = parentKey.OpenSubKey(subKey, RegistryKeyPermissionCheck.ReadSubTree);
if (key != null) if (key is not null)
{ {
list.Add(new RegistryEntry(key)); list.Add(new RegistryEntry(key));
} }

View File

@ -88,7 +88,7 @@ internal static class ResultHelper
foreach (var valueName in valueNames) foreach (var valueName in valueNames)
{ {
var value = key.GetValue(valueName); var value = key.GetValue(valueName);
if (value != null) if (value is not null)
{ {
valueList.Add(KeyValuePair.Create(valueName, value)); valueList.Add(KeyValuePair.Create(valueName, value));
} }

Some files were not shown because too many files have changed in this diff Show More