diff --git a/src/ReactiveUI.SourceGenerators.Execute/TestViewModel.cs b/src/ReactiveUI.SourceGenerators.Execute/TestViewModel.cs index 65b013e..366ca11 100644 --- a/src/ReactiveUI.SourceGenerators.Execute/TestViewModel.cs +++ b/src/ReactiveUI.SourceGenerators.Execute/TestViewModel.cs @@ -227,6 +227,15 @@ public TestViewModel() [Reactive] public partial string? PartialPropertyTest { get; set; } + /// + /// Gets or sets the partial property test. + /// + /// + /// The partial property test. + /// + [Reactive(UseRequired = true)] + public required partial string? PartialRequiredPropertyTest { get; set; } + /// /// Gets the internal test property. Should not prompt to replace with INPC Reactive Property. /// diff --git a/src/ReactiveUI.SourceGenerators.Roslyn/Reactive/ReactiveGenerator.Execute.cs b/src/ReactiveUI.SourceGenerators.Roslyn/Reactive/ReactiveGenerator.Execute.cs index 2037c33..7180adf 100644 --- a/src/ReactiveUI.SourceGenerators.Roslyn/Reactive/ReactiveGenerator.Execute.cs +++ b/src/ReactiveUI.SourceGenerators.Roslyn/Reactive/ReactiveGenerator.Execute.cs @@ -72,7 +72,10 @@ public sealed partial class ReactiveGenerator token.ThrowIfCancellationRequested(); var inheritance = propertySymbol.IsVirtual ? " virtual" : propertySymbol.IsOverride ? " override" : string.Empty; - var useRequired = string.Empty; + + attributeData.TryGetNamedArgument("UseRequired", out bool useRequiredArgument); + var useRequired = useRequiredArgument ? "required " : string.Empty; + var typeNameWithNullabilityAnnotations = propertySymbol.Type.GetFullyQualifiedNameWithNullabilityAnnotations(); var fieldName = propertySymbol.GetGeneratedFieldName(); var propertyName = propertySymbol.Name; @@ -326,7 +329,7 @@ private static string GetPropertySyntax(PropertyInfo propertyInfo) {{fieldSyntax}} /// {{propertyAttributes}} - {{propertyInfo.TargetInfo.TargetVisibility}}{{propertyInfo.Inheritance}} {{partialModifier}}{{propertyInfo.UseRequired}}{{propertyInfo.TypeNameWithNullabilityAnnotations}} {{propertyInfo.PropertyName}} + {{propertyInfo.TargetInfo.TargetVisibility}}{{propertyInfo.Inheritance}} {{propertyInfo.UseRequired}}{{partialModifier}}{{propertyInfo.TypeNameWithNullabilityAnnotations}} {{propertyInfo.PropertyName}} { get => {{propertyInfo.FieldName}}; [global::System.Diagnostics.CodeAnalysis.MemberNotNull("{{fieldName}}")]