@@ -2733,6 +2733,291 @@ internal static class __KnownINotifyPropertyChangedArgs
2733
2733
VerifyGenerateSources ( source , new [ ] { new ObservablePropertyGenerator ( ) } , ( "MyApp.MyViewModel.g.cs" , result ) , ( "__KnownINotifyPropertyChangingArgs.g.cs" , null ) , ( "__KnownINotifyPropertyChangedArgs.g.cs" , changedArgs ) ) ;
2734
2734
}
2735
2735
2736
+ [ TestMethod ]
2737
+ public void ObservableProperty_NotifyDataErrorInfo_EmitsTrimAnnotationsWhenNeeded ( )
2738
+ {
2739
+ string source = """
2740
+ using System.ComponentModel.DataAnnotations;
2741
+ using CommunityToolkit.Mvvm.ComponentModel;
2742
+
2743
+ #nullable enable
2744
+
2745
+ namespace MyApp;
2746
+
2747
+ partial class MyViewModel : ObservableValidator
2748
+ {
2749
+ [ObservableProperty]
2750
+ [NotifyDataErrorInfo]
2751
+ [Required]
2752
+ private string? name;
2753
+ }
2754
+ """ ;
2755
+
2756
+ #if NET6_0_OR_GREATER
2757
+ string result = """
2758
+ // <auto-generated/>
2759
+ #pragma warning disable
2760
+ #nullable enable
2761
+ namespace MyApp
2762
+ {
2763
+ /// <inheritdoc/>
2764
+ partial class MyViewModel
2765
+ {
2766
+ /// <inheritdoc cref="name"/>
2767
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2768
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
2769
+ [global::System.ComponentModel.DataAnnotations.RequiredAttribute()]
2770
+ public string? Name
2771
+ {
2772
+ get => name;
2773
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type of the current instance cannot be statically discovered.")]
2774
+ set
2775
+ {
2776
+ if (!global::System.Collections.Generic.EqualityComparer<string?>.Default.Equals(name, value))
2777
+ {
2778
+ OnNameChanging(value);
2779
+ OnNameChanging(default, value);
2780
+ OnPropertyChanging(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangingArgs.Name);
2781
+ name = value;
2782
+ ValidateProperty(value, "Name");
2783
+ OnNameChanged(value);
2784
+ OnNameChanged(default, value);
2785
+ OnPropertyChanged(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangedArgs.Name);
2786
+ }
2787
+ }
2788
+ }
2789
+
2790
+ /// <summary>Executes the logic for when <see cref="Name"/> is changing.</summary>
2791
+ /// <param name="value">The new property value being set.</param>
2792
+ /// <remarks>This method is invoked right before the value of <see cref="Name"/> is changed.</remarks>
2793
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2794
+ partial void OnNameChanging(string? value);
2795
+ /// <summary>Executes the logic for when <see cref="Name"/> is changing.</summary>
2796
+ /// <param name="oldValue">The previous property value that is being replaced.</param>
2797
+ /// <param name="newValue">The new property value being set.</param>
2798
+ /// <remarks>This method is invoked right before the value of <see cref="Name"/> is changed.</remarks>
2799
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2800
+ partial void OnNameChanging(string? oldValue, string? newValue);
2801
+ /// <summary>Executes the logic for when <see cref="Name"/> just changed.</summary>
2802
+ /// <param name="value">The new property value that was set.</param>
2803
+ /// <remarks>This method is invoked right after the value of <see cref="Name"/> is changed.</remarks>
2804
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2805
+ partial void OnNameChanged(string? value);
2806
+ /// <summary>Executes the logic for when <see cref="Name"/> just changed.</summary>
2807
+ /// <param name="oldValue">The previous property value that was replaced.</param>
2808
+ /// <param name="newValue">The new property value that was set.</param>
2809
+ /// <remarks>This method is invoked right after the value of <see cref="Name"/> is changed.</remarks>
2810
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2811
+ partial void OnNameChanged(string? oldValue, string? newValue);
2812
+ }
2813
+ }
2814
+ """ ;
2815
+ #else
2816
+ string result = """
2817
+ // <auto-generated/>
2818
+ #pragma warning disable
2819
+ #nullable enable
2820
+ namespace MyApp
2821
+ {
2822
+ /// <inheritdoc/>
2823
+ partial class MyViewModel
2824
+ {
2825
+ /// <inheritdoc cref="name"/>
2826
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2827
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
2828
+ [global::System.ComponentModel.DataAnnotations.RequiredAttribute()]
2829
+ public string? Name
2830
+ {
2831
+ get => name;
2832
+ set
2833
+ {
2834
+ if (!global::System.Collections.Generic.EqualityComparer<string?>.Default.Equals(name, value))
2835
+ {
2836
+ OnNameChanging(value);
2837
+ OnNameChanging(default, value);
2838
+ OnPropertyChanging(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangingArgs.Name);
2839
+ name = value;
2840
+ ValidateProperty(value, "Name");
2841
+ OnNameChanged(value);
2842
+ OnNameChanged(default, value);
2843
+ OnPropertyChanged(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangedArgs.Name);
2844
+ }
2845
+ }
2846
+ }
2847
+
2848
+ /// <summary>Executes the logic for when <see cref="Name"/> is changing.</summary>
2849
+ /// <param name="value">The new property value being set.</param>
2850
+ /// <remarks>This method is invoked right before the value of <see cref="Name"/> is changed.</remarks>
2851
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2852
+ partial void OnNameChanging(string? value);
2853
+ /// <summary>Executes the logic for when <see cref="Name"/> is changing.</summary>
2854
+ /// <param name="oldValue">The previous property value that is being replaced.</param>
2855
+ /// <param name="newValue">The new property value being set.</param>
2856
+ /// <remarks>This method is invoked right before the value of <see cref="Name"/> is changed.</remarks>
2857
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2858
+ partial void OnNameChanging(string? oldValue, string? newValue);
2859
+ /// <summary>Executes the logic for when <see cref="Name"/> just changed.</summary>
2860
+ /// <param name="value">The new property value that was set.</param>
2861
+ /// <remarks>This method is invoked right after the value of <see cref="Name"/> is changed.</remarks>
2862
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2863
+ partial void OnNameChanged(string? value);
2864
+ /// <summary>Executes the logic for when <see cref="Name"/> just changed.</summary>
2865
+ /// <param name="oldValue">The previous property value that was replaced.</param>
2866
+ /// <param name="newValue">The new property value that was set.</param>
2867
+ /// <remarks>This method is invoked right after the value of <see cref="Name"/> is changed.</remarks>
2868
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2869
+ partial void OnNameChanged(string? oldValue, string? newValue);
2870
+ }
2871
+ }
2872
+ """ ;
2873
+ #endif
2874
+
2875
+ VerifyGenerateSources ( source , new [ ] { new ObservablePropertyGenerator ( ) } , ( "MyApp.MyViewModel.g.cs" , result ) ) ;
2876
+ }
2877
+
2878
+ [ TestMethod ]
2879
+ public void ObservableProperty_NotifyDataErrorInfo_EmitsTrimAnnotationsWhenNeeded_AppendToNullableAttribute ( )
2880
+ {
2881
+ string source = """
2882
+ using System.ComponentModel.DataAnnotations;
2883
+ using CommunityToolkit.Mvvm.ComponentModel;
2884
+
2885
+ #nullable enable
2886
+
2887
+ namespace MyApp;
2888
+
2889
+ partial class MyViewModel : ObservableValidator
2890
+ {
2891
+ [ObservableProperty]
2892
+ [NotifyDataErrorInfo]
2893
+ [Required]
2894
+ private string name;
2895
+ }
2896
+ """ ;
2897
+
2898
+ #if NET6_0_OR_GREATER
2899
+ string result = """
2900
+ // <auto-generated/>
2901
+ #pragma warning disable
2902
+ #nullable enable
2903
+ namespace MyApp
2904
+ {
2905
+ /// <inheritdoc/>
2906
+ partial class MyViewModel
2907
+ {
2908
+ /// <inheritdoc cref="name"/>
2909
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2910
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
2911
+ [global::System.ComponentModel.DataAnnotations.RequiredAttribute()]
2912
+ public string Name
2913
+ {
2914
+ get => name;
2915
+ [global::System.Diagnostics.CodeAnalysis.MemberNotNull("name")]
2916
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type of the current instance cannot be statically discovered.")]
2917
+ set
2918
+ {
2919
+ if (!global::System.Collections.Generic.EqualityComparer<string>.Default.Equals(name, value))
2920
+ {
2921
+ OnNameChanging(value);
2922
+ OnNameChanging(default, value);
2923
+ OnPropertyChanging(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangingArgs.Name);
2924
+ name = value;
2925
+ ValidateProperty(value, "Name");
2926
+ OnNameChanged(value);
2927
+ OnNameChanged(default, value);
2928
+ OnPropertyChanged(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangedArgs.Name);
2929
+ }
2930
+ }
2931
+ }
2932
+
2933
+ /// <summary>Executes the logic for when <see cref="Name"/> is changing.</summary>
2934
+ /// <param name="value">The new property value being set.</param>
2935
+ /// <remarks>This method is invoked right before the value of <see cref="Name"/> is changed.</remarks>
2936
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2937
+ partial void OnNameChanging(string value);
2938
+ /// <summary>Executes the logic for when <see cref="Name"/> is changing.</summary>
2939
+ /// <param name="oldValue">The previous property value that is being replaced.</param>
2940
+ /// <param name="newValue">The new property value being set.</param>
2941
+ /// <remarks>This method is invoked right before the value of <see cref="Name"/> is changed.</remarks>
2942
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2943
+ partial void OnNameChanging(string? oldValue, string newValue);
2944
+ /// <summary>Executes the logic for when <see cref="Name"/> just changed.</summary>
2945
+ /// <param name="value">The new property value that was set.</param>
2946
+ /// <remarks>This method is invoked right after the value of <see cref="Name"/> is changed.</remarks>
2947
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2948
+ partial void OnNameChanged(string value);
2949
+ /// <summary>Executes the logic for when <see cref="Name"/> just changed.</summary>
2950
+ /// <param name="oldValue">The previous property value that was replaced.</param>
2951
+ /// <param name="newValue">The new property value that was set.</param>
2952
+ /// <remarks>This method is invoked right after the value of <see cref="Name"/> is changed.</remarks>
2953
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2954
+ partial void OnNameChanged(string? oldValue, string newValue);
2955
+ }
2956
+ }
2957
+ """ ;
2958
+ #else
2959
+ string result = """
2960
+ // <auto-generated/>
2961
+ #pragma warning disable
2962
+ #nullable enable
2963
+ namespace MyApp
2964
+ {
2965
+ /// <inheritdoc/>
2966
+ partial class MyViewModel
2967
+ {
2968
+ /// <inheritdoc cref="name"/>
2969
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2970
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
2971
+ [global::System.ComponentModel.DataAnnotations.RequiredAttribute()]
2972
+ public string Name
2973
+ {
2974
+ get => name;
2975
+ set
2976
+ {
2977
+ if (!global::System.Collections.Generic.EqualityComparer<string>.Default.Equals(name, value))
2978
+ {
2979
+ OnNameChanging(value);
2980
+ OnNameChanging(default, value);
2981
+ OnPropertyChanging(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangingArgs.Name);
2982
+ name = value;
2983
+ ValidateProperty(value, "Name");
2984
+ OnNameChanged(value);
2985
+ OnNameChanged(default, value);
2986
+ OnPropertyChanged(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangedArgs.Name);
2987
+ }
2988
+ }
2989
+ }
2990
+
2991
+ /// <summary>Executes the logic for when <see cref="Name"/> is changing.</summary>
2992
+ /// <param name="value">The new property value being set.</param>
2993
+ /// <remarks>This method is invoked right before the value of <see cref="Name"/> is changed.</remarks>
2994
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
2995
+ partial void OnNameChanging(string value);
2996
+ /// <summary>Executes the logic for when <see cref="Name"/> is changing.</summary>
2997
+ /// <param name="oldValue">The previous property value that is being replaced.</param>
2998
+ /// <param name="newValue">The new property value being set.</param>
2999
+ /// <remarks>This method is invoked right before the value of <see cref="Name"/> is changed.</remarks>
3000
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
3001
+ partial void OnNameChanging(string? oldValue, string newValue);
3002
+ /// <summary>Executes the logic for when <see cref="Name"/> just changed.</summary>
3003
+ /// <param name="value">The new property value that was set.</param>
3004
+ /// <remarks>This method is invoked right after the value of <see cref="Name"/> is changed.</remarks>
3005
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
3006
+ partial void OnNameChanged(string value);
3007
+ /// <summary>Executes the logic for when <see cref="Name"/> just changed.</summary>
3008
+ /// <param name="oldValue">The previous property value that was replaced.</param>
3009
+ /// <param name="newValue">The new property value that was set.</param>
3010
+ /// <remarks>This method is invoked right after the value of <see cref="Name"/> is changed.</remarks>
3011
+ [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", <ASSEMBLY_VERSION>)]
3012
+ partial void OnNameChanged(string? oldValue, string newValue);
3013
+ }
3014
+ }
3015
+ """ ;
3016
+ #endif
3017
+
3018
+ VerifyGenerateSources ( source , new [ ] { new ObservablePropertyGenerator ( ) } , ( "MyApp.MyViewModel.g.cs" , result ) ) ;
3019
+ }
3020
+
2736
3021
/// <summary>
2737
3022
/// Generates the requested sources
2738
3023
/// </summary>
0 commit comments