From 94ba3408bc2a7dba91f9eb77b43ac04116e7f1ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Pedro?= <jpedrolmail@gmail.com>
Date: Sun, 25 Aug 2019 23:51:34 +0100
Subject: [PATCH] Code cleanup.

---
 src/Movere/Common/MaybeNullWhenFalseAttribute.cs   | 7 +++++++
 src/Movere/Common/StackExtensions.cs               | 8 ++++----
 src/Movere/ViewModels/FileExplorerTreeViewModel.cs | 6 +++---
 3 files changed, 14 insertions(+), 7 deletions(-)
 create mode 100644 src/Movere/Common/MaybeNullWhenFalseAttribute.cs

diff --git a/src/Movere/Common/MaybeNullWhenFalseAttribute.cs b/src/Movere/Common/MaybeNullWhenFalseAttribute.cs
new file mode 100644
index 0000000..4f2dcf3
--- /dev/null
+++ b/src/Movere/Common/MaybeNullWhenFalseAttribute.cs
@@ -0,0 +1,7 @@
+namespace System.Runtime.CompilerServices
+{
+    [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]
+    internal sealed class MaybeNullWhenFalseAttribute : Attribute
+    {
+    }
+}
diff --git a/src/Movere/Common/StackExtensions.cs b/src/Movere/Common/StackExtensions.cs
index 8fca103..215aaff 100644
--- a/src/Movere/Common/StackExtensions.cs
+++ b/src/Movere/Common/StackExtensions.cs
@@ -1,10 +1,12 @@
 #if NETSTANDARD2_0
 
+using System.Runtime.CompilerServices;
+
 namespace System.Collections.Generic
 {
     internal static class StackExtensions
     {
-        public static bool TryPop<T>(this Stack<T> stack, out T result)
+        public static bool TryPop<T>(this Stack<T> stack, [MaybeNullWhenFalse] out T result)
         {
             if (stack.Count > 0)
             {
@@ -12,9 +14,7 @@ public static bool TryPop<T>(this Stack<T> stack, out T result)
                 return true;
             }
 
-#pragma warning disable CS8653 // A default expression introduces a null value for a type parameter.
-            result = default;
-#pragma warning restore CS8653 // A default expression introduces a null value for a type parameter.
+            result = default!;
             return false;
         }
     }
diff --git a/src/Movere/ViewModels/FileExplorerTreeViewModel.cs b/src/Movere/ViewModels/FileExplorerTreeViewModel.cs
index 3b36908..d8937c8 100644
--- a/src/Movere/ViewModels/FileExplorerTreeViewModel.cs
+++ b/src/Movere/ViewModels/FileExplorerTreeViewModel.cs
@@ -21,9 +21,9 @@ public FileExplorerTreeViewModel()
 
             FolderHierarchy = _drives.Select(d => new Folder(d.RootDirectory));
 
-#pragma warning disable CS8619 // Nullability of reference types in value doesn't match target type.
-            SelectedFolderChanged = this.WhenAnyValue(vm => vm.SelectedFolder).Where(folder => folder != null);
-#pragma warning restore CS8619 // Nullability of reference types in value doesn't match target type.
+            SelectedFolderChanged = from folder in this.WhenAnyValue(vm => vm.SelectedFolder)
+                                    where folder != null
+                                    select folder;
         }
 
         public IEnumerable<Folder> FolderHierarchy { get; }