DotNetAnalyzers / PropertyChangedAnalyzers

Roslyn analyzers for INotifyPropertyChanged
MIT License
44 stars 4 forks source link

Fixes for INPC002 when static #169

Open JohanLarsson opened 4 years ago

JohanLarsson commented 4 years ago

Not extremely useful as binding to static properties is rare.

JohanLarsson commented 4 years ago

        [Test]
        public static void StaticEventHandlerOfPropertyChangedEventArgsInvoke()
        {
            var before = @"
namespace N
{
    using System;
    using System.ComponentModel;

    public static class C
    {
        public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

        public static string ↓P { get; set; }
    }
}";

            var after = @"
namespace N
{
    using System;
    using System.ComponentModel;

    public static class C
    {
        private static string p;

        public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

        public static string P
        {
            get => p;
            set
            {
                if (value == p)
                {
                    return;
                }

                p = value;
                StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(nameof(P)));
            }
        }
    }
}";
            RoslynAssert.CodeFix(Analyzer, Fix, ExpectedDiagnostic, before, after);
        }
JohanLarsson commented 4 years ago
        [Test]
        public static void StaticEventHandlerOfPropertyChangedEventArgsInvoker()
        {
            var before = @"
namespace N
{
    using System;
    using System.ComponentModel;

    public static class C
    {
        public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

        public static string ↓P { get; set; }

        private static void OnStaticPropertyChanged(string propertyName)
        {
            StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
        }
    }
}";

            var after = @"
namespace N
{
    using System;
    using System.ComponentModel;

    public static class C
    {
        private static string p;

        public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

        public static string P
        {
            get => p;
            set
            {
                if (value == p)
                {
                    return;
                }

                p = value;
                OnStaticPropertyChanged(nameof(P));
            }
        }

        private static void OnStaticPropertyChanged(string propertyName)
        {
            StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
        }
    }
}";
            RoslynAssert.CodeFix(Analyzer, Fix, ExpectedDiagnostic, before, after);
        }
JohanLarsson commented 4 years ago
        [Test]
        public static void StaticPropertyChangedEventHandlerInvoke()
        {
            var before = @"
namespace N
{
    using System.ComponentModel;

    public class C
    {
        public static event PropertyChangedEventHandler PropertyChanged;

        public static string ↓P { get; set; }
    }
}";

            var after = @"
namespace N
{
    using System.ComponentModel;

    public class C
    {
        private static string p;

        public static event PropertyChangedEventHandler PropertyChanged;

        public static string P
        {
            get => p;
            set
            {
                if (value == p)
                {
                    return;
                }

                p = value;
                PropertyChanged?.Invoke(null, new PropertyChangedEventArgs(nameof(P)));
            }
        }
    }
}";
            RoslynAssert.CodeFix(Analyzer, Fix, ExpectedDiagnostic, before, after);
        }
JohanLarsson commented 4 years ago
        [Test]
        public static void StaticPropertyChangedEventHandlerInvoker()
        {
            var before = @"
namespace N
{
    using System.ComponentModel;

    public class C
    {
        public static event PropertyChangedEventHandler PropertyChanged;

        public static string ↓P { get; set; }

        private static void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
        }
    }
}";

            var after = @"
namespace N
{
    using System.ComponentModel;

    public class C
    {
        private static string p;

        public static event PropertyChangedEventHandler PropertyChanged;

        public static string P
        {
            get => p;
            set
            {
                if (value == p)
                {
                    return;
                }

                p = value;
                OnPropertyChanged(nameof(P));
            }
        }

        private static void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
        }
    }
}";
            RoslynAssert.CodeFix(Analyzer, Fix, ExpectedDiagnostic, before, after);
        }