Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public static MethodBodyStatement BuildGetter(bool? includeGetterNullCheck, Prop
{
var checkNullExpression = This.Property(internalProperty.Name).Is(Null);
// For collection types, we do not do null check and initialization in getter, they have been initialized in constructor.
if (innerProperty.Type.IsCollection)
if (innerProperty.Type.IsCollection && internalProperty.WireInfo?.IsRequired == true)
{
return new List<MethodBodyStatement>() { Return(new MemberExpression(internalProperty, innerProperty.Name)) };
}
Expand Down Expand Up @@ -113,8 +113,13 @@ public static MethodBodyStatement BuildGetter(bool? includeGetterNullCheck, Prop
}
}

public static MethodBodyStatement BuildSetterForPropertyFlatten(ModelProvider innerModel, PropertyProvider internalProperty, PropertyProvider innerProperty)
public static MethodBodyStatement? BuildSetterForPropertyFlatten(ModelProvider innerModel, PropertyProvider internalProperty, PropertyProvider innerProperty)
{
if (innerProperty.Type.IsCollection)
{
return null;
}

var isNullableValueType = innerProperty.Type.IsValueType && innerProperty.Type.IsNullable;
var setter = new List<MethodBodyStatement>();
var internalPropertyExpression = This.Property(internalProperty.Name);
Expand All @@ -128,8 +133,13 @@ public static MethodBodyStatement BuildSetterForPropertyFlatten(ModelProvider in
return setter;
}

public static MethodBodyStatement BuildSetterForSafeFlatten(bool includeSetterCheck, ModelProvider innerModel, PropertyProvider internalProperty, PropertyProvider innerProperty)
public static MethodBodyStatement? BuildSetterForSafeFlatten(bool includeSetterCheck, ModelProvider innerModel, PropertyProvider internalProperty, PropertyProvider innerProperty)
{
if (innerProperty.Type.IsCollection)
{
return null;
}

var isOverriddenValueType = IsOverriddenValueType(innerProperty);
var setter = new List<MethodBodyStatement>();
var internalPropertyExpression = This.Property(internalProperty.Name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ private void FlattenProperties(ModelProvider model)
var (_, includeGetterNullCheck, _) = PropertyHelpers.GetFlags(property, innerProperty);
var flattenPropertyName = innerProperty.Name; // TODO: handle name conflicts
var flattenPropertyBody = new MethodPropertyBody(
PropertyHelpers.BuildGetter(includeGetterNullCheck == true && !innerProperty.Type.IsCollection, property, modelProvider, innerProperty),
PropertyHelpers.BuildGetter(includeGetterNullCheck, property, modelProvider, innerProperty),
!innerProperty.Body.HasSetter ? null : PropertyHelpers.BuildSetterForPropertyFlatten(modelProvider, property, innerProperty)
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ model BarSettingsResource is ProxyResource<BarSettingsProperties> {
property: BarQuotaProperties;
anotherProperty: BarQuotaProperties;
flattenedNestedProperty: BarNestedQuotaProperties;
optionalFlattenProperty?: optionalFlattenPropertyType;
}

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

model optionalFlattenPropertyType {
randomCollectionProp: string[];
}

model BarDeeplyNestedQuotaProperties {
innerProp1?: int32;
innerProp2: string;
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading