@@ -458,7 +458,7 @@ await VerifyAnalyzerAsync(
458458 }
459459
460460 [ Fact ]
461- public async Task VerifyNoErrorWhenAttributeIsNotBindableProperty ( )
461+ public async Task VerifyNoErrorWhenDefaultValueCreatorMethodReturnsStaticNonReadonlyProperty ( )
462462 {
463463 const string source =
464464 /* language=C#-test */
@@ -467,27 +467,40 @@ public async Task VerifyNoErrorWhenAttributeIsNotBindableProperty()
467467 #nullable enable
468468 #pragma warning disable MCTEXP001
469469 #pragma warning disable CS9248
470- using System;
471470 using System.Collections.Generic;
471+ using CommunityToolkit.Maui;
472472 using Microsoft.Maui.Controls;
473473
474474 namespace CommunityToolkit.Maui.UnitTests
475475 {
476- [Obsolete("Test")]
477476 public partial class TestControl : View
478477 {
479- static readonly IList<View> DefaultStateViews = new List<View>();
478+ [BindableProperty(DefaultValueCreatorMethodName = nameof(CreateDefaultStateViews))]
479+ public partial IList<View> StateViews { get; set; }
480+
481+ static IList<View> DefaultStateViews { get; set; } = new List<View>();
480482
481483 static IList<View> CreateDefaultStateViews(BindableObject bindable) => DefaultStateViews;
482484 }
485+
486+ public partial class TestControl
487+ {
488+ public static readonly global::Microsoft.Maui.Controls.BindableProperty? StateViewsProperty;
489+ public partial IList<View> StateViews { get => false ? field : (IList<View>)GetValue(StateViewsProperty); set => SetValue(StateViewsProperty, value); }
490+ }
483491 }
484492 """ ;
485493
486- await VerifyAnalyzerAsync ( source ) ;
494+ await VerifyAnalyzerAsync (
495+ source ,
496+ Diagnostic ( )
497+ . WithSpan ( 17 , 3 , 17 , 92 )
498+ . WithSeverity ( DiagnosticSeverity . Warning )
499+ . WithArguments ( "CreateDefaultStateViews" ) ) ;
487500 }
488501
489502 [ Fact ]
490- public async Task VerifyNoErrorWhenDefaultValueCreatorMethodReturnsStaticNonReadonlyProperty ( )
503+ public async Task VerifyNoErrorWhenAttributeIsNotBindableProperty ( )
491504 {
492505 const string source =
493506 /* language=C#-test */
@@ -496,27 +509,19 @@ public async Task VerifyNoErrorWhenDefaultValueCreatorMethodReturnsStaticNonRead
496509 #nullable enable
497510 #pragma warning disable MCTEXP001
498511 #pragma warning disable CS9248
512+ using System;
499513 using System.Collections.Generic;
500- using CommunityToolkit.Maui;
501514 using Microsoft.Maui.Controls;
502515
503516 namespace CommunityToolkit.Maui.UnitTests
504517 {
518+ [Obsolete("Test")]
505519 public partial class TestControl : View
506520 {
507- [BindableProperty(DefaultValueCreatorMethodName = nameof(CreateDefaultStateViews))]
508- public partial IList<View> StateViews { get; set; }
509-
510- static IList<View> DefaultStateViews { get; set; } = new List<View>();
521+ static readonly IList<View> DefaultStateViews = new List<View>();
511522
512523 static IList<View> CreateDefaultStateViews(BindableObject bindable) => DefaultStateViews;
513524 }
514-
515- public partial class TestControl
516- {
517- public static readonly global::Microsoft.Maui.Controls.BindableProperty? StateViewsProperty;
518- public partial IList<View> StateViews { get => false ? field : (IList<View>)GetValue(StateViewsProperty); set => SetValue(StateViewsProperty, value); }
519- }
520525 }
521526 """ ;
522527
@@ -609,6 +614,47 @@ await VerifyAnalyzerAsync(
609614 . WithArguments ( "CreateDefaultStateViews" ) ) ;
610615 }
611616
617+ [ Fact ]
618+ public async Task VerifyErrorWhenDefaultValueCreatorMethodReturnsCreateDefaultValueDelegateThatReturnsAStaticMember ( )
619+ {
620+ const string source =
621+ /* language=C#-test */
622+ //lang=csharp
623+ """
624+ #nullable enable
625+ #pragma warning disable MCTEXP001
626+ using System.Collections.Generic;
627+ using CommunityToolkit.Maui;
628+ using Microsoft.Maui.Controls;
629+
630+ namespace CommunityToolkit.Maui.UnitTests
631+ {
632+ public partial class TestControl : View
633+ {
634+ [BindableProperty(DefaultValueCreatorMethodName = nameof(CreateStateViewsDelegate))]
635+ public partial IList<View>? StateViews { get; set; }
636+
637+ static readonly BindableProperty.CreateDefaultValueDelegate CreateStateViewsDelegate = _ => StateViewsList;
638+
639+ static List<View> StateViewsList { get; } = [];
640+ }
641+
642+ public partial class TestControl
643+ {
644+ public static readonly global::Microsoft.Maui.Controls.BindableProperty? StateViewsProperty;
645+ public partial IList<View> StateViews { get => false ? field : (IList<View>)GetValue(StateViewsProperty); set => SetValue(StateViewsProperty, value); }
646+ }
647+ }
648+ """ ;
649+
650+ await VerifyAnalyzerAsync (
651+ source ,
652+ Diagnostic ( )
653+ . WithSpan ( 14 , 3 , 14 , 110 )
654+ . WithSeverity ( DiagnosticSeverity . Warning )
655+ . WithArguments ( "CreateStateViewsDelegate" ) ) ;
656+ }
657+
612658 [ Fact ]
613659 public async Task VerifyNoErrorWhenDefaultValueCreatorMethodReturnsLiteral ( )
614660 {
@@ -713,6 +759,40 @@ public partial class TestControl
713759 await VerifyAnalyzerAsync ( source ) ;
714760 }
715761
762+ [ Fact ]
763+ public async Task VerifyNoErrorWhenDefaultValueCreatorMethodReturnsCreateDefaultValueDelegateThatReturnsANewInstance ( )
764+ {
765+ const string source =
766+ /* language=C#-test */
767+ //lang=csharp
768+ """
769+ #nullable enable
770+ #pragma warning disable MCTEXP001
771+ using System.Collections.Generic;
772+ using CommunityToolkit.Maui;
773+ using Microsoft.Maui.Controls;
774+
775+ namespace CommunityToolkit.Maui.UnitTests
776+ {
777+ public partial class TestControl : View
778+ {
779+ [BindableProperty(DefaultValueCreatorMethodName = nameof(CreateStateViewsDelegate))]
780+ public partial IList<View>? StateViews { get; set; }
781+
782+ static readonly BindableProperty.CreateDefaultValueDelegate CreateStateViewsDelegate = (x) => new List<View>();
783+ }
784+
785+ public partial class TestControl
786+ {
787+ public static readonly global::Microsoft.Maui.Controls.BindableProperty? StateViewsProperty;
788+ public partial IList<View> StateViews { get => false ? field : (IList<View>)GetValue(StateViewsProperty); set => SetValue(StateViewsProperty, value); }
789+ }
790+ }
791+ """ ;
792+
793+ await VerifyAnalyzerAsync ( source ) ;
794+ }
795+
716796 static Task VerifyAnalyzerAsync ( string source , params IReadOnlyList < DiagnosticResult > expected )
717797 {
718798 return CSharpAnalyzerVerifier < BindablePropertyDefaultValueCreatorAnalyzer >
0 commit comments