Skip to content

Commit 70f7ba3

Browse files
authored
Resolve required keyword order for partial reactive properties. (#240)
1 parent 4285486 commit 70f7ba3

File tree

3 files changed

+7
-5
lines changed

3 files changed

+7
-5
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ This documentation covers using ReactiveUI Source Generators to simplify and enh
1212
ReactiveUI Source Generators automatically generate ReactiveUI objects to streamline your code. These Source Generators are designed to work with ReactiveUI V19.5.31+ and support the following features:
1313

1414
- `[Reactive]` With field and access modifiers, partial property support (C# 13 Visual Studio Version 17.12.0), partial properties with initializer support (C# preview only)
15-
- `[Reactive(SetModifier = AccessModifier.Protected)]` With field and access modifiers.
15+
- `[Reactive(SetModifier = AccessModifier.Protected)]` With field and access modifiers, (Not Required for partial properties, configure set accessor with the property decalaration).
1616
- `[Reactive(Inheritance = InheritanceModifier.Virtual)]` With field and access modifiers. This will generate a virtual property.
17-
- `[Reactive(UseRequired = true)]` With field and access modifiers. This will generate a required property.
17+
- `[Reactive(UseRequired = true)]` With field and access modifiers. This will generate a required property, (Not Required for partial properties, use required keyword for property decalaration).
1818
- `[ObservableAsProperty]` With field, method, Observable property and partial property support (C# 13 Visual Studio Version 17.12.0)
1919
- `[ObservableAsProperty(ReadOnly = false)]` Removes readonly keyword from the generated helper field
2020
- `[ObservableAsProperty(PropertyName = "ReadOnlyPropertyName")]`

src/ReactiveUI.SourceGenerators.Execute/InternalTestViewModel.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ internal partial class InternalTestViewModel : ReactiveObject
1313
[Reactive]
1414
public partial int PublicPartialPropertyTest { get; set; }
1515

16+
[Reactive]
17+
public required partial bool PublicRequiredPartialPropertyTest { get; set; }
18+
1619
[Reactive]
1720
public partial int PublicPartialPropertyWithInternalProtectedTest { get; protected internal set; }
1821

src/ReactiveUI.SourceGenerators.Roslyn/Reactive/ReactiveGenerator.Execute.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,7 @@ public sealed partial class ReactiveGenerator
120120

121121
var inheritance = propertySymbol.IsVirtual ? " virtual" : propertySymbol.IsOverride ? " override" : string.Empty;
122122

123-
attributeData.TryGetNamedArgument("UseRequired", out bool useRequiredArgument);
124-
var useRequired = useRequiredArgument ? "required " : string.Empty;
123+
var useRequired = propertySymbol.IsRequired ? "required " : string.Empty;
125124

126125
var typeNameWithNullabilityAnnotations = propertySymbol.Type.GetFullyQualifiedNameWithNullabilityAnnotations();
127126
var fieldName = propertySymbol.GetGeneratedFieldName();
@@ -410,7 +409,7 @@ private static string GetPropertySyntax(PropertyInfo propertyInfo)
410409
{{fieldSyntax}}
411410
/// <inheritdoc cref="{{setFieldName}}"/>
412411
{{propertyAttributes}}
413-
{{accessModifier}}{{propertyInfo.Inheritance}} {{partialModifier}}{{propertyInfo.UseRequired}}{{propertyInfo.TypeNameWithNullabilityAnnotations}} {{propertyInfo.PropertyName}} { get => {{getFieldName}}; {{setAccessModifier}} => this.RaiseAndSetIfChanged(ref {{setFieldName}}, value); }
412+
{{accessModifier}}{{propertyInfo.Inheritance}} {{propertyInfo.UseRequired}}{{partialModifier}}{{propertyInfo.TypeNameWithNullabilityAnnotations}} {{propertyInfo.PropertyName}} { get => {{getFieldName}}; {{setAccessModifier}} => this.RaiseAndSetIfChanged(ref {{setFieldName}}, value); }
414413
""";
415414
}
416415
}

0 commit comments

Comments
 (0)