33 using System ;
44 using System . Collections . Generic ;
55 using System . Linq ;
6+
67 using Gu . Roslyn . Asserts ;
8+
79 using Microsoft . CodeAnalysis ;
810 using Microsoft . CodeAnalysis . Diagnostics ;
911
1012 using NUnit . Framework ;
1113
14+ using PropertyChangedAnalyzers . Test . Helpers ;
15+
1216 public static class ValidWithAllAnalyzers
1317 {
1418 private static readonly IReadOnlyList < DiagnosticAnalyzer > AllAnalyzers =
@@ -57,9 +61,9 @@ namespace N.Core
5761
5862 public abstract class ViewModelBase : INotifyPropertyChanged
5963 {
60- public event PropertyChangedEventHandler PropertyChanged;
64+ public event PropertyChangedEventHandler? PropertyChanged;
6165
62- protected bool TrySet<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
66+ protected bool TrySet<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)
6367 {
6468 if (EqualityComparer<T>.Default.Equals(field, value))
6569 {
@@ -71,7 +75,7 @@ protected bool TrySet<T>(ref T field, T value, [CallerMemberName] string propert
7175 return true;
7276 }
7377
74- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
78+ protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
7579 {
7680 this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
7781 }
@@ -145,7 +149,7 @@ public class ViewModel2 : INotifyPropertyChanged
145149 private int p;
146150 private readonly WithMutableField withMutableField = new WithMutableField();
147151
148- public event PropertyChangedEventHandler PropertyChanged;
152+ public event PropertyChangedEventHandler? PropertyChanged;
149153
150154 public int Squared => this.P * this.P;
151155
@@ -185,7 +189,7 @@ public int P2
185189 }
186190 }
187191
188- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
192+ protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
189193 {
190194 this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
191195 }
@@ -202,7 +206,7 @@ public class OldStyleOnPropertyChanged : INotifyPropertyChanged
202206 {
203207 private int p;
204208
205- public event PropertyChangedEventHandler PropertyChanged;
209+ public event PropertyChangedEventHandler? PropertyChanged;
206210
207211 public int P
208212 {
@@ -220,7 +224,7 @@ public int P
220224 }
221225 }
222226
223- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
227+ protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
224228 {
225229 var handler = this.PropertyChanged;
226230 if (handler != null)
@@ -243,7 +247,7 @@ public class WrappingPoint : INotifyPropertyChanged
243247 {
244248 private Point point;
245249
246- public event PropertyChangedEventHandler PropertyChanged;
250+ public event PropertyChangedEventHandler? PropertyChanged;
247251
248252 public int X
249253 {
@@ -279,7 +283,7 @@ public int Y
279283 }
280284 }
281285
282- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
286+ protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
283287 {
284288 this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
285289 }
@@ -297,7 +301,7 @@ public class WrappingTimeSpan : INotifyPropertyChanged
297301 {
298302 private TimeSpan timeSpan;
299303
300- public event PropertyChangedEventHandler PropertyChanged;
304+ public event PropertyChangedEventHandler? PropertyChanged;
301305
302306 public long Ticks
303307 {
@@ -314,7 +318,7 @@ public long Ticks
314318 }
315319 }
316320
317- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
321+ protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
318322 {
319323 this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
320324 }
@@ -332,7 +336,7 @@ public class RadioButtonViewModel : INotifyPropertyChanged
332336 {
333337 private double speed;
334338
335- public event PropertyChangedEventHandler PropertyChanged;
339+ public event PropertyChangedEventHandler? PropertyChanged;
336340
337341 public bool IsSpeed1
338342 {
@@ -357,7 +361,7 @@ public double Speed
357361 }
358362 }
359363
360- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
364+ protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
361365 {
362366 this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
363367 }
@@ -372,11 +376,11 @@ namespace N
372376
373377 public abstract class AbstractWithAbstractProperty : INotifyPropertyChanged
374378 {
375- public event PropertyChangedEventHandler PropertyChanged;
379+ public event PropertyChangedEventHandler? PropertyChanged;
376380
377381 public abstract int P { get; }
378382
379- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
383+ protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
380384 {
381385 this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
382386 }
@@ -408,14 +412,14 @@ namespace N
408412
409413 public class ExceptionHandlingRelayCommand : ConditionRelayCommand
410414 {
411- private Exception _exception;
415+ private Exception? _exception;
412416
413417 public ExceptionHandlingRelayCommand(Action action, ICondition condition)
414418 : base(action, condition)
415419 {
416420 }
417421
418- public Exception Exception
422+ public Exception? Exception
419423 {
420424 get => _exception;
421425
@@ -436,17 +440,21 @@ private set
436440}" ;
437441 RoslynAssert . Valid (
438442 analyzer ,
439- viewModelBase ,
440- withMutableField ,
441- viewModel1 ,
442- viewModel2 ,
443- oldStyleOnPropertyChanged ,
444- wrappingPoint ,
445- wrappingTimeSpan ,
446- radioButtonViewModel ,
447- abstractWithAbstractProperty ,
448- subClassingAbstractWithAbstractProperty ,
449- exceptionHandlingRelayCommand ) ;
443+ new [ ]
444+ {
445+ viewModelBase ,
446+ withMutableField ,
447+ viewModel1 ,
448+ viewModel2 ,
449+ oldStyleOnPropertyChanged ,
450+ wrappingPoint ,
451+ wrappingTimeSpan ,
452+ radioButtonViewModel ,
453+ abstractWithAbstractProperty ,
454+ subClassingAbstractWithAbstractProperty ,
455+ exceptionHandlingRelayCommand ,
456+ } ,
457+ settings : LibrarySettings . Reactive ) ;
450458 }
451459
452460 [ TestCaseSource ( nameof ( AllAnalyzers ) ) ]
@@ -461,9 +469,9 @@ namespace N.Core
461469
462470 public abstract class ViewModelBase<T> : INotifyPropertyChanged
463471 {
464- public event PropertyChangedEventHandler PropertyChanged;
472+ public event PropertyChangedEventHandler? PropertyChanged;
465473
466- protected bool TrySet<U>(ref U field, U value, [CallerMemberName] string propertyName = null)
474+ protected bool TrySet<U>(ref U field, U value, [CallerMemberName] string? propertyName = null)
467475 {
468476 if (EqualityComparer<U>.Default.Equals(field, value))
469477 {
@@ -475,7 +483,7 @@ protected bool TrySet<U>(ref U field, U value, [CallerMemberName] string propert
475483 return true;
476484 }
477485
478- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
486+ protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
479487 {
480488 this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
481489 }
@@ -537,13 +545,13 @@ namespace N
537545
538546 public class GenericViewModel<T> : INotifyPropertyChanged
539547 {
540- private T p;
548+ private T? p;
541549
542- public event PropertyChangedEventHandler PropertyChanged;
550+ public event PropertyChangedEventHandler? PropertyChanged;
543551
544552 public string Text => $""{this.P} {this.P}"";
545553
546- public T P
554+ public T? P
547555 {
548556#pragma warning disable INPC020 // Prefer expression body accessor.
549557 get
@@ -565,7 +573,7 @@ public T P
565573 }
566574 }
567575
568- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
576+ protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
569577 {
570578 this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
571579 }
0 commit comments