瀏覽代碼

Fix the inspection errors. Also clean up some Calendar code in the meantime since most of the warnings were there.

Jeremy Koritzinsky 7 年之前
父節點
當前提交
1f0e173e95

+ 2 - 2
samples/ControlCatalog/DecoratedWindow.xaml.cs

@@ -20,7 +20,7 @@ namespace ControlCatalog
             ctl.Cursor = new Cursor(cursor);
             ctl.PointerPressed += delegate
             {
-                PlatformImpl.BeginResizeDrag(edge);
+                PlatformImpl?.BeginResizeDrag(edge);
             };
         }
 
@@ -29,7 +29,7 @@ namespace ControlCatalog
             AvaloniaXamlLoader.Load(this);
             this.FindControl<Control>("TitleBar").PointerPressed += delegate
             {
-                PlatformImpl.BeginMoveDrag();
+                PlatformImpl?.BeginMoveDrag();
             };
             SetupSide("Left", StandardCursorType.LeftSide, WindowEdge.West);
             SetupSide("Right", StandardCursorType.RightSide, WindowEdge.East);

+ 1 - 1
src/Avalonia.Controls/AutoCompleteBox.cs

@@ -2150,7 +2150,7 @@ namespace Avalonia.Controls
             }
 
             // Update the view
-            if (e.Action == NotifyCollectionChangedAction.Remove || e.Action == NotifyCollectionChangedAction.Replace)
+            if ((e.Action == NotifyCollectionChangedAction.Remove || e.Action == NotifyCollectionChangedAction.Replace) && e.OldItems != null)
             {
                 for (int index = 0; index < e.OldItems.Count; index++)
                 {

+ 39 - 56
src/Avalonia.Controls/Calendar/Calendar.cs

@@ -769,7 +769,7 @@ namespace Avalonia.Controls
         }
         private static void UpdateDisplayDate(Calendar c, DateTime addedDate, DateTime removedDate)
         {
-            Debug.Assert(c != null, "c should not be null!");
+            Contract.Requires<ArgumentNullException>(c != null);
 
             // If DisplayDate < DisplayDateStart, DisplayDate = DisplayDateStart
             if (DateTime.Compare(addedDate, c.DisplayDateRangeStart) < 0)
@@ -1016,8 +1016,6 @@ namespace Avalonia.Controls
 
         internal CalendarDayButton FindDayButtonFromDay(DateTime day)
         {
-            CalendarDayButton b;
-            DateTime? d;
             CalendarItem monthControl = MonthControl;
 
             // REMOVE_RTM: should be updated if we support MultiCalendar
@@ -1028,14 +1026,16 @@ namespace Avalonia.Controls
                 {
                     for (int childIndex = ColumnsPerMonth; childIndex < count; childIndex++)
                     {
-                        b = monthControl.MonthView.Children[childIndex] as CalendarDayButton;
-                        d = b.DataContext as DateTime?;
-
-                        if (d.HasValue)
+                        if (monthControl.MonthView.Children[childIndex] is CalendarDayButton b)
                         {
-                            if (DateTimeHelper.CompareDays(d.Value, day) == 0)
+                            var d = b.DataContext as DateTime?;
+
+                            if (d.HasValue)
                             {
-                                return b;
+                                if (DateTimeHelper.CompareDays(d.Value, day) == 0)
+                                {
+                                    return b;
+                                }
                             }
                         }
                     }
@@ -1044,20 +1044,6 @@ namespace Avalonia.Controls
             return null;
         }
 
-        private void Calendar_SizeChanged(object sender, EventArgs e)
-        {
-            Debug.Assert(sender is Calendar, "The sender should be a Calendar!");
-
-            var size = Bounds.Size;
-            RectangleGeometry rg = new RectangleGeometry();
-            rg.Rect = new Rect(0, 0, size.Width, size.Height);
-
-            if (Root != null)
-            {
-                Root.Clip = rg;
-            }
-        }
-
         private void OnSelectedMonthChanged(DateTime? selectedMonth)
         {
             if (selectedMonth.HasValue)
@@ -1090,7 +1076,6 @@ namespace Avalonia.Controls
 
         internal void ResetStates()
         {
-            CalendarDayButton d;
             CalendarItem monthControl = MonthControl;
             int count = RowsPerMonth * ColumnsPerMonth;
             if (monthControl != null)
@@ -1099,7 +1084,7 @@ namespace Avalonia.Controls
                 {
                     for (int childIndex = ColumnsPerMonth; childIndex < count; childIndex++)
                     {
-                        d = monthControl.MonthView.Children[childIndex] as CalendarDayButton;
+                        var d = (CalendarDayButton)monthControl.MonthView.Children[childIndex];
                         d.IgnoreMouseOverState();
                     }
                 }
@@ -1190,8 +1175,6 @@ namespace Avalonia.Controls
             if (HoverEnd != null && HoverStart != null)
             {
                 int startIndex, endIndex, i;
-                CalendarDayButton b;
-                DateTime? d;
                 CalendarItem monthControl = MonthControl;
 
                 // This assumes a contiguous set of dates:
@@ -1201,18 +1184,20 @@ namespace Avalonia.Controls
 
                     for (i = startIndex; i <= endIndex; i++)
                     {
-                        b = monthControl.MonthView.Children[i] as CalendarDayButton;
-                        b.IsSelected = true;
-                        d = b.DataContext as DateTime?;
-
-                        if (d.HasValue && DateTimeHelper.CompareDays(HoverEnd.Value, d.Value) == 0)
+                        if (monthControl.MonthView.Children[i] is CalendarDayButton b)
                         {
-                            if (FocusButton != null)
+                            b.IsSelected = true;
+                            var d = b.DataContext as DateTime?;
+
+                            if (d.HasValue && DateTimeHelper.CompareDays(HoverEnd.Value, d.Value) == 0)
                             {
-                                FocusButton.IsCurrent = false;
+                                if (FocusButton != null)
+                                {
+                                    FocusButton.IsCurrent = false;
+                                }
+                                b.IsCurrent = HasFocusInternal;
+                                FocusButton = b;
                             }
-                            b.IsCurrent = HasFocusInternal;
-                            FocusButton = b;
                         }
                     }
                 }
@@ -1228,8 +1213,6 @@ namespace Avalonia.Controls
             if (HoverEnd != null && HoverStart != null)
             {
                 CalendarItem monthControl = MonthControl;
-                CalendarDayButton b;
-                DateTime? d;
 
                 if (HoverEndIndex != null && HoverStartIndex != null)
                 {
@@ -1240,15 +1223,17 @@ namespace Avalonia.Controls
                     {
                         for (i = startIndex; i <= endIndex; i++)
                         {
-                            b = monthControl.MonthView.Children[i] as CalendarDayButton;
-                            d = b.DataContext as DateTime?;
-
-                            if (d.HasValue)
+                            if (monthControl.MonthView.Children[i] is CalendarDayButton b)
                             {
-                                if (!SelectedDates.Contains(d.Value))
+                                var d = b.DataContext as DateTime?;
+
+                                if (d.HasValue)
                                 {
-                                    b.IsSelected = false;
-                                }
+                                    if (!SelectedDates.Contains(d.Value))
+                                    {
+                                        b.IsSelected = false;
+                                    }
+                                } 
                             }
                         }
                     }
@@ -1257,7 +1242,7 @@ namespace Avalonia.Controls
                         // It is SingleRange
                         for (i = startIndex; i <= endIndex; i++)
                         {
-                            (monthControl.MonthView.Children[i] as CalendarDayButton).IsSelected = false;
+                            ((CalendarDayButton)monthControl.MonthView.Children[i]).IsSelected = false;
                         }
                     }
                 }
@@ -1628,16 +1613,15 @@ namespace Avalonia.Controls
                 e.Handled = true;
             }
         }
-        internal void Calendar_KeyDown(object sender, KeyEventArgs e)
-        {
-            Calendar c = sender as Calendar;
-            Debug.Assert(c != null, "c should not be null!");
 
-            if (!e.Handled && c.IsEnabled)
+        internal void Calendar_KeyDown(KeyEventArgs e)
+        {
+            if (!e.Handled && IsEnabled)
             {
                 e.Handled = ProcessCalendarKey(e);
             }
         }
+
         internal bool ProcessCalendarKey(KeyEventArgs e)
         {
             if (DisplayMode == CalendarMode.Month)
@@ -1976,7 +1960,7 @@ namespace Avalonia.Controls
                     }
             }
         }
-        private void Calendar_KeyUp(object sender, KeyEventArgs e)
+        private void Calendar_KeyUp(KeyEventArgs e)
         {
             if (!e.Handled && (e.Key == Key.LeftShift || e.Key == Key.RightShift))
             {
@@ -2083,6 +2067,9 @@ namespace Avalonia.Controls
             DisplayDateProperty.Changed.AddClassHandler<Calendar>(x => x.OnDisplayDateChanged);
             DisplayDateStartProperty.Changed.AddClassHandler<Calendar>(x => x.OnDisplayDateStartChanged);
             DisplayDateEndProperty.Changed.AddClassHandler<Calendar>(x => x.OnDisplayDateEndChanged);
+            KeyDownEvent.AddClassHandler<Calendar>(x => x.Calendar_KeyDown);
+            KeyUpEvent.AddClassHandler<Calendar>(x => x.Calendar_KeyUp);
+            
         }
 
         /// <summary>
@@ -2122,10 +2109,6 @@ namespace Avalonia.Controls
                     month.Owner = this;
                 }
             }
-
-            LayoutUpdated += Calendar_SizeChanged;
-            KeyDown += Calendar_KeyDown;
-            KeyUp += Calendar_KeyUp;
         }
 
     }

+ 1 - 1
src/Avalonia.Controls/Calendar/CalendarDateRange.cs

@@ -66,7 +66,7 @@ namespace Avalonia.Controls
         /// <returns>Inherited code: Requires comment 2.</returns>
         internal bool ContainsAny(CalendarDateRange range)
         {
-            Debug.Assert(range != null, "range should not be null!");
+            Contract.Requires<ArgumentNullException>(range != null);
 
             int start = DateTime.Compare(Start, range.Start);
 

+ 15 - 16
src/Avalonia.Controls/Calendar/CalendarItem.cs

@@ -517,7 +517,7 @@ namespace Avalonia.Controls.Primitives
             for (int childIndex = Calendar.ColumnsPerMonth; childIndex < count; childIndex++)
             {
                 CalendarDayButton childButton = MonthView.Children[childIndex] as CalendarDayButton;
-                Debug.Assert(childButton != null, "childButton should not be null!");
+                Contract.Requires<ArgumentNullException>(childButton != null);
 
                 childButton.Index = childIndex;
                 SetButtonState(childButton, dateToAdd);
@@ -554,7 +554,7 @@ namespace Avalonia.Controls.Primitives
                     for (int i = childIndex; i < count; i++)
                     {
                         childButton = MonthView.Children[i] as CalendarDayButton;
-                        Debug.Assert(childButton != null, "childButton should not be null!");
+                        Contract.Requires<ArgumentNullException>(childButton != null);
                         // button needs a content to occupy the necessary space
                         // for the content presenter
                         childButton.Content = i.ToString(DateTimeHelper.GetCurrentDateFormat());
@@ -650,7 +650,7 @@ namespace Avalonia.Controls.Primitives
             foreach (object child in YearView.Children)
             {
                 CalendarButton childButton = child as CalendarButton;
-                Debug.Assert(childButton != null, "childButton should not be null!");
+                Contract.Requires<ArgumentNullException>(childButton != null);
                 // There should be no time component. Time is 12:00 AM
                 DateTime day = new DateTime(_currentMonth.Year, count + 1, 1);
                 childButton.DataContext = day;
@@ -746,7 +746,7 @@ namespace Avalonia.Controls.Primitives
             foreach (object child in YearView.Children)
             {
                 CalendarButton childButton = child as CalendarButton;
-                Debug.Assert(childButton != null, "childButton should not be null!");
+                Contract.Requires<ArgumentNullException>(childButton != null);
                 year = decade + count;
 
                 if (year <= DateTime.MaxValue.Year && year >= DateTime.MinValue.Year)
@@ -826,7 +826,7 @@ namespace Avalonia.Controls.Primitives
                 {
                     Owner.Focus();
                 }
-                Button b = sender as Button;
+                Button b = (Button)sender;
                 DateTime d;
 
                 if (b.IsEnabled)
@@ -863,7 +863,7 @@ namespace Avalonia.Controls.Primitives
                     Owner.Focus();
                 }
 
-                Button b = sender as Button;
+                Button b = (Button)sender;
                 if (b.IsEnabled)
                 {
                     Owner.OnPreviousClick();
@@ -878,7 +878,7 @@ namespace Avalonia.Controls.Primitives
                 {
                     Owner.Focus();
                 }
-                Button b = sender as Button;
+                Button b = (Button)sender;
 
                 if (b.IsEnabled)
                 {
@@ -891,8 +891,7 @@ namespace Avalonia.Controls.Primitives
         {
             if (Owner != null)
             {
-                CalendarDayButton b = sender as CalendarDayButton;
-                if (_isMouseLeftButtonDown && b != null && b.IsEnabled && !b.IsBlackout)
+                if (_isMouseLeftButtonDown && sender is CalendarDayButton b && b.IsEnabled && !b.IsBlackout)
                 {
                     // Update the states of all buttons to be selected starting
                     // from HoverStart to b
@@ -918,7 +917,7 @@ namespace Avalonia.Controls.Primitives
                                 Debug.Assert(b.DataContext != null, "The DataContext should not be null!");
                                 Owner.UnHighlightDays();
                                 Owner.HoverEndIndex = b.Index;
-                                Owner.HoverEnd = (DateTime)b.DataContext;
+                                Owner.HoverEnd = (DateTime?)b.DataContext;
                                 // Update the States of the buttons
                                 Owner.HighlightDays();
                                 return;
@@ -931,7 +930,7 @@ namespace Avalonia.Controls.Primitives
         {
             if (_isMouseLeftButtonDown)
             {
-                CalendarDayButton b = sender as CalendarDayButton;
+                CalendarDayButton b = (CalendarDayButton)sender;
                 // The button is in Pressed state. Change the state to normal.
                 if (e.Device.Captured == b)
                     e.Device.Capture(null);
@@ -973,7 +972,7 @@ namespace Avalonia.Controls.Primitives
                     if (b.IsEnabled && !b.IsBlackout)
                     {
                         DateTime selectedDate = (DateTime)b.DataContext;
-                        Debug.Assert(selectedDate != null, "selectedDate should not be null!");
+                        Contract.Requires<ArgumentNullException>(selectedDate != null);
                         _isMouseLeftButtonDown = true;
                         // null check is added for unit tests
                         if (e != null)
@@ -1149,7 +1148,7 @@ namespace Avalonia.Controls.Primitives
                 if (_isControlPressed && Owner.SelectionMode == CalendarSelectionMode.MultipleRange)
                 {
                     CalendarDayButton b = sender as CalendarDayButton;
-                    Debug.Assert(b != null, "The sender should be a non-null CalendarDayButton!");
+                    Contract.Requires<ArgumentNullException>(b != null);
 
                     if (b.IsSelected)
                     {
@@ -1169,7 +1168,7 @@ namespace Avalonia.Controls.Primitives
         private void Month_CalendarButtonMouseDown(object sender, PointerPressedEventArgs e)
         {
             CalendarButton b = sender as CalendarButton;
-            Debug.Assert(b != null, "The sender should be a non-null CalendarDayButton!");
+            Contract.Requires<ArgumentNullException>(b != null);
 
             _isMouseLeftButtonDownYearView = true;
 
@@ -1208,7 +1207,7 @@ namespace Avalonia.Controls.Primitives
             if (_isMouseLeftButtonDownYearView)
             {
                 CalendarButton b = sender as CalendarButton;
-                Debug.Assert(b != null, "The sender should be a non-null CalendarDayButton!");
+                Contract.Requires<ArgumentNullException>(b != null);
                 UpdateYearViewSelection(b);
             }
         }
@@ -1217,7 +1216,7 @@ namespace Avalonia.Controls.Primitives
         {
             if (_isMouseLeftButtonDownYearView)
             {
-                CalendarButton b = sender as CalendarButton;
+                CalendarButton b = (CalendarButton)sender;
                 // The button is in Pressed state. Change the state to normal.
                 if (e.Device.Captured == b)
                     e.Device.Capture(null);

+ 1 - 1
src/Avalonia.Controls/Calendar/DatePicker.cs

@@ -842,7 +842,7 @@ namespace Avalonia.Controls
         private void Calendar_KeyDown(object sender, KeyEventArgs e)
         {
             Calendar c = sender as Calendar;
-            Debug.Assert(c != null, "The Calendar should not be null!");
+            Contract.Requires<ArgumentNullException>(c != null);
 
             if (!e.Handled && (e.Key == Key.Enter || e.Key == Key.Space || e.Key == Key.Escape) && c.DisplayMode == CalendarMode.Month)
             {

+ 1 - 1
src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevel.cs

@@ -57,7 +57,7 @@ namespace Avalonia.Controls.Embedding.Offscreen
         Type IStyleable.StyleKey => typeof(EmbeddableControlRoot);
         public void Dispose()
         {
-            PlatformImpl.Dispose();
+            PlatformImpl?.Dispose();
         }
     }
 }

+ 1 - 1
src/Avalonia.Controls/Platform/InProcessDragSource.cs

@@ -62,7 +62,7 @@ namespace Avalonia.Platform
 
             RawDragEvent rawEvent = new RawDragEvent(_dragDrop, type, root, pt, _draggedData, _allowedEffects);
             var tl = root.GetSelfAndVisualAncestors().OfType<TopLevel>().FirstOrDefault();
-            tl.PlatformImpl.Input(rawEvent);
+            tl.PlatformImpl?.Input(rawEvent);
 
             var effect = GetPreferredEffect(rawEvent.Effects & _allowedEffects, modifiers);
             UpdateCursor(root, effect);

+ 3 - 2
src/Avalonia.Themes.Default/Calendar.xaml

@@ -15,9 +15,10 @@
     <Setter Property="Template">
       <ControlTemplate>
         <StackPanel Name="Root"
-                    HorizontalAlignment="Center">
+                    HorizontalAlignment="Center"
+                    ClipToBounds="True">
 
-          <CalendarItem Name="CalendarItem"
+                    <CalendarItem Name="CalendarItem"
                         Background="{TemplateBinding Background}"
                         BorderBrush="{TemplateBinding BorderBrush}"
                         BorderThickness="{TemplateBinding BorderThickness}"

+ 2 - 1
src/Markup/Avalonia.Markup/Data/MultiBinding.cs

@@ -10,6 +10,7 @@ using System.Reactive.Subjects;
 using Avalonia.Controls;
 using Avalonia.Data.Converters;
 using Avalonia.Metadata;
+using JetBrains.Annotations;
 
 namespace Avalonia.Data
 {
@@ -65,7 +66,7 @@ namespace Avalonia.Data
             var children = Bindings.Select(x => x.Initiate(target, null));
             var input = children.Select(x => x.Subject).CombineLatest().Select(x => ConvertValue(x, targetType));
             var mode = Mode == BindingMode.Default ?
-                targetProperty.GetMetadata(target.GetType()).DefaultBindingMode : Mode;
+                targetProperty?.GetMetadata(target.GetType()).DefaultBindingMode : Mode;
 
             switch (mode)
             {

+ 1 - 1
src/Windows/Avalonia.Win32/SystemDialogImpl.cs

@@ -54,7 +54,7 @@ namespace Avalonia.Win32
                 var fileBuffer = new char[256];
                 dialog.InitialFileName?.CopyTo(0, fileBuffer, 0, dialog.InitialFileName.Length);
 
-                string userSelectedExt = null;
+                string userSelectedExt = string.Empty;
 
 
                 var title = ToChars(dialog.Title);