Skip to content

Commit 08e3d5e

Browse files
authored
Remove setter for safeflatten collection-type property and handle nullability check (Azure#52574)
* Remove setter for safeflatten collection-type property and handle nullability check * cleanup * cleanup
1 parent c888746 commit 08e3d5e

File tree

11 files changed

+1299
-991
lines changed

11 files changed

+1299
-991
lines changed

eng/packages/http-client-csharp-mgmt/generator/Azure.Generator.Management/src/Utilities/PropertyHelpers.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public static MethodBodyStatement BuildGetter(bool? includeGetterNullCheck, Prop
8484
{
8585
var checkNullExpression = This.Property(internalProperty.Name).Is(Null);
8686
// For collection types, we do not do null check and initialization in getter, they have been initialized in constructor.
87-
if (innerProperty.Type.IsCollection)
87+
if (innerProperty.Type.IsCollection && internalProperty.WireInfo?.IsRequired == true)
8888
{
8989
return new List<MethodBodyStatement>() { Return(new MemberExpression(internalProperty, innerProperty.Name)) };
9090
}
@@ -113,8 +113,13 @@ public static MethodBodyStatement BuildGetter(bool? includeGetterNullCheck, Prop
113113
}
114114
}
115115

116-
public static MethodBodyStatement BuildSetterForPropertyFlatten(ModelProvider innerModel, PropertyProvider internalProperty, PropertyProvider innerProperty)
116+
public static MethodBodyStatement? BuildSetterForPropertyFlatten(ModelProvider innerModel, PropertyProvider internalProperty, PropertyProvider innerProperty)
117117
{
118+
if (innerProperty.Type.IsCollection)
119+
{
120+
return null;
121+
}
122+
118123
var isNullableValueType = innerProperty.Type.IsValueType && innerProperty.Type.IsNullable;
119124
var setter = new List<MethodBodyStatement>();
120125
var internalPropertyExpression = This.Property(internalProperty.Name);
@@ -128,8 +133,13 @@ public static MethodBodyStatement BuildSetterForPropertyFlatten(ModelProvider in
128133
return setter;
129134
}
130135

131-
public static MethodBodyStatement BuildSetterForSafeFlatten(bool includeSetterCheck, ModelProvider innerModel, PropertyProvider internalProperty, PropertyProvider innerProperty)
136+
public static MethodBodyStatement? BuildSetterForSafeFlatten(bool includeSetterCheck, ModelProvider innerModel, PropertyProvider internalProperty, PropertyProvider innerProperty)
132137
{
138+
if (innerProperty.Type.IsCollection)
139+
{
140+
return null;
141+
}
142+
133143
var isOverriddenValueType = IsOverriddenValueType(innerProperty);
134144
var setter = new List<MethodBodyStatement>();
135145
var internalPropertyExpression = This.Property(internalProperty.Name);

eng/packages/http-client-csharp-mgmt/generator/Azure.Generator.Management/src/Visitors/FlattenPropertyVisitor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ private void FlattenProperties(ModelProvider model)
301301
var (_, includeGetterNullCheck, _) = PropertyHelpers.GetFlags(property, innerProperty);
302302
var flattenPropertyName = innerProperty.Name; // TODO: handle name conflicts
303303
var flattenPropertyBody = new MethodPropertyBody(
304-
PropertyHelpers.BuildGetter(includeGetterNullCheck == true && !innerProperty.Type.IsCollection, property, modelProvider, innerProperty),
304+
PropertyHelpers.BuildGetter(includeGetterNullCheck, property, modelProvider, innerProperty),
305305
!innerProperty.Body.HasSetter ? null : PropertyHelpers.BuildSetterForPropertyFlatten(modelProvider, property, innerProperty)
306306
);
307307

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/bar.tsp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ model BarSettingsResource is ProxyResource<BarSettingsProperties> {
5151
property: BarQuotaProperties;
5252
anotherProperty: BarQuotaProperties;
5353
flattenedNestedProperty: BarNestedQuotaProperties;
54+
optionalFlattenProperty?: optionalFlattenPropertyType;
5455
}
5556

5657
@parentResource(Bar)
@@ -68,6 +69,10 @@ model BarMiddleNestedQuotaProperties extends BarDeeplyNestedQuotaProperties {
6869
middleProp2: Record<string>;
6970
}
7071

72+
model optionalFlattenPropertyType {
73+
randomCollectionProp: string[];
74+
}
75+
7176
model BarDeeplyNestedQuotaProperties {
7277
innerProp1?: int32;
7378
innerProp2: string;

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/BarSettingsResourceData.Serialization.cs

Lines changed: 17 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/BarSettingsResourceData.cs

Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/MgmtTypeSpecModelFactory.cs

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/Models/MgmtTypeSpecContext.cs

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/Models/OptionalFlattenPropertyType.Serialization.cs

Lines changed: 165 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)