Skip to content

Commit

Permalink
- wraps else if declarations in go method bodies
Browse files Browse the repository at this point in the history
Signed-off-by: Vincent Biret <vibiret@microsoft.com>
  • Loading branch information
baywet committed Aug 22, 2022
1 parent ec152c0 commit af2e08f
Showing 1 changed file with 66 additions and 43 deletions.
109 changes: 66 additions & 43 deletions src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,14 +132,16 @@ private void WriteFactoryMethodBodyForInheritedModel(CodeMethod codeElement, Cod
}
private void WriteFactoryMethodBodyForIntersectionModel(CodeMethod codeElement, CodeClass parentClass, CodeParameter parseNodeParameter, LanguageWriter writer) {
var includeElse = false;
foreach(var property in parentClass.GetPropertiesOfKind(CodePropertyKind.Custom)
.Where(static x => x.Type is not CodeType propertyType || propertyType.IsCollection || propertyType.TypeDefinition is not CodeClass)
.OrderBy(static x => x, CodePropertyTypeBackwardComparer)
.ThenBy(static x => x.Name)) {
var otherProps = parentClass.GetPropertiesOfKind(CodePropertyKind.Custom)
.Where(static x => x.Type is not CodeType propertyType || propertyType.IsCollection || propertyType.TypeDefinition is not CodeClass)
.OrderBy(static x => x, CodePropertyTypeBackwardComparer)
.ThenBy(static x => x.Name)
.ToArray();
foreach(var property in otherProps) {
if(property.Type is CodeType propertyType) {
var typeName = conventions.GetTypeString(propertyType, codeElement, true, false);
var valueVarName = "val";
writer.StartBlock($"{(includeElse? "else " : string.Empty)}if {valueVarName}, err := {parseNodeParameter.Name.ToFirstCharacterLowerCase()}.{GetDeserializationMethodName(propertyType, parentClass)}; {valueVarName} != nil {{");
writer.StartBlock($"{(includeElse? "} else " : string.Empty)}if {valueVarName}, err := {parseNodeParameter.Name.ToFirstCharacterLowerCase()}.{GetDeserializationMethodName(propertyType, parentClass)}; {valueVarName} != nil {{");
if(propertyType.IsCollection) {
var isInterfaceType = propertyType.TypeDefinition is CodeInterface;
var propertyTypeImportName = conventions.GetTypeString(property.Type, parentClass, false, false);
Expand All @@ -158,7 +160,7 @@ private void WriteFactoryMethodBodyForIntersectionModel(CodeMethod codeElement,
.ToArray();
if(complexProperties.Any()) {
if(includeElse) {
writer.WriteLine("else {");
writer.WriteLine("} else {");
writer.IncreaseIndent();
}
foreach(var property in complexProperties) {
Expand All @@ -168,47 +170,56 @@ private void WriteFactoryMethodBodyForIntersectionModel(CodeMethod codeElement,
if(includeElse) {
writer.CloseBlock();
}
}
} else if (otherProps.Any())
writer.CloseBlock(decreaseIndent: false);
}
private const string ResultVarName = "result";
private const string DiscriminatorMappingVarName = "mappingValue";
private static readonly CodePropertyTypeComparer CodePropertyTypeForwardComparer = new();
private static readonly CodePropertyTypeComparer CodePropertyTypeBackwardComparer = new(true);
private void WriteFactoryMethodBodyForUnionModelForDiscriminatedTypes(CodeMethod codeElement, CodeClass parentClass, LanguageWriter writer) {
var includeElse = false;
foreach(var property in parentClass.GetPropertiesOfKind(CodePropertyKind.Custom)
.Where(static x => x.Type is CodeType xType && !xType.IsCollection && (xType.TypeDefinition is CodeClass || xType.TypeDefinition is CodeInterface))
.OrderBy(static x => x, CodePropertyTypeForwardComparer)
.ThenBy(static x => x.Name)) {
var otherProps = parentClass.GetPropertiesOfKind(CodePropertyKind.Custom)
.Where(static x => x.Type is CodeType xType && !xType.IsCollection && (xType.TypeDefinition is CodeClass || xType.TypeDefinition is CodeInterface))
.OrderBy(static x => x, CodePropertyTypeForwardComparer)
.ThenBy(static x => x.Name)
.ToArray();
foreach(var property in otherProps) {
var propertyType = property.Type as CodeType;
var mappedType = parentClass.DiscriminatorInformation.DiscriminatorMappings.FirstOrDefault(x => x.Value.Name.Equals(propertyType.Name, StringComparison.OrdinalIgnoreCase));
writer.StartBlock($"{(includeElse? "else " : string.Empty)}if strings.EqualFold(*{DiscriminatorMappingVarName}, \"{mappedType.Key}\") {{");
writer.StartBlock($"{(includeElse? "} else " : string.Empty)}if strings.EqualFold(*{DiscriminatorMappingVarName}, \"{mappedType.Key}\") {{");
writer.WriteLine($"{ResultVarName}.{property.Setter.Name.ToFirstCharacterUpperCase()}({conventions.GetImportedStaticMethodName(propertyType, codeElement)}())");
writer.CloseBlock();
writer.DecreaseIndent();
if(!includeElse)
includeElse = true;
}
if(otherProps.Any())
writer.CloseBlock(decreaseIndent: false);
}
private void WriteFactoryMethodBodyForUnionModelForUnDiscriminatedTypes(CodeClass parentClass, CodeParameter parseNodeParameter, LanguageWriter writer) {
var includeElse = false;
foreach(var property in parentClass.GetPropertiesOfKind(CodePropertyKind.Custom)
.Where(static x => x.Type is CodeType xType && (xType.IsCollection || xType.TypeDefinition is null || xType.TypeDefinition is CodeEnum))
.OrderBy(static x => x, CodePropertyTypeForwardComparer)
.ThenBy(static x => x.Name)) {
var otherProps = parentClass.GetPropertiesOfKind(CodePropertyKind.Custom)
.Where(static x => x.Type is CodeType xType && (xType.IsCollection || xType.TypeDefinition is null || xType.TypeDefinition is CodeEnum))
.OrderBy(static x => x, CodePropertyTypeForwardComparer)
.ThenBy(static x => x.Name)
.ToArray();
foreach(var property in otherProps) {
var valueVarName = "val";
var propertyType = property.Type as CodeType;
writer.StartBlock($"{(includeElse? "else " : string.Empty)}if {valueVarName}, err := {parseNodeParameter.Name.ToFirstCharacterLowerCase()}.{GetDeserializationMethodName(propertyType, parentClass)}; {valueVarName} != nil {{");
writer.StartBlock($"{(includeElse? "} else " : string.Empty)}if {valueVarName}, err := {parseNodeParameter.Name.ToFirstCharacterLowerCase()}.{GetDeserializationMethodName(propertyType, parentClass)}; {valueVarName} != nil {{");
if(propertyType.IsCollection) {
var isInterfaceType = propertyType.TypeDefinition is CodeInterface;
var propertyTypeImportName = conventions.GetTypeString(property.Type, parentClass, false, false);
WriteCollectionCast(propertyTypeImportName, valueVarName, "cast", writer, isInterfaceType ? string.Empty : "*", !isInterfaceType);
valueVarName = "cast";
}
writer.WriteLine($"{ResultVarName}.{property.Setter.Name.ToFirstCharacterUpperCase()}({valueVarName})");
writer.CloseBlock();
writer.DecreaseIndent();
if(!includeElse)
includeElse = true;
}
if(otherProps.Any())
writer.CloseBlock(decreaseIndent: false);
}

private void WriteMethodDocumentation(CodeMethod code, string methodName, LanguageWriter writer) {
Expand Down Expand Up @@ -261,32 +272,38 @@ private void WriteSerializerBodyForInheritedModel(bool inherits, CodeClass paren
private void WriteSerializerBodyForUnionModel(CodeClass parentClass, LanguageWriter writer)
{
var includeElse = false;
foreach (var otherProp in parentClass
.Properties
.Where(static x => !x.ExistsInBaseType && x.IsOfKind(CodePropertyKind.Custom))
.OrderBy(static x => x, CodePropertyTypeForwardComparer)
.ThenBy(static x => x.Name))
var otherProps = parentClass
.Properties
.Where(static x => !x.ExistsInBaseType && x.IsOfKind(CodePropertyKind.Custom))
.OrderBy(static x => x, CodePropertyTypeForwardComparer)
.ThenBy(static x => x.Name)
.ToArray();
foreach (var otherProp in otherProps)
{
writer.StartBlock($"{(includeElse? "else " : string.Empty)}if m.{otherProp.Getter.Name.ToFirstCharacterUpperCase()}() != nil {{");
writer.StartBlock($"{(includeElse? "} else " : string.Empty)}if m.{otherProp.Getter.Name.ToFirstCharacterUpperCase()}() != nil {{");
WriteSerializationMethodCall(otherProp.Type, parentClass, string.Empty, $"m.{otherProp.Getter.Name.ToFirstCharacterUpperCase()}()", true, writer);
writer.CloseBlock();
writer.DecreaseIndent();
if(!includeElse)
includeElse = true;
}
if(otherProps.Any())
writer.CloseBlock(decreaseIndent: false);
}
private void WriteSerializerBodyForIntersectionModel(CodeClass parentClass, LanguageWriter writer)
{
var includeElse = false;
foreach (var otherProp in parentClass
.Properties
.Where(static x => !x.ExistsInBaseType && x.IsOfKind(CodePropertyKind.Custom))
.Where(static x => x.Type is not CodeType propertyType || propertyType.IsCollection || propertyType.TypeDefinition is not CodeClass)
.OrderBy(static x => x, CodePropertyTypeBackwardComparer)
.ThenBy(static x => x.Name))
var otherProps = parentClass
.Properties
.Where(static x => !x.ExistsInBaseType && x.IsOfKind(CodePropertyKind.Custom))
.Where(static x => x.Type is not CodeType propertyType || propertyType.IsCollection || propertyType.TypeDefinition is not CodeClass)
.OrderBy(static x => x, CodePropertyTypeBackwardComparer)
.ThenBy(static x => x.Name)
.ToArray();
foreach (var otherProp in otherProps)
{
writer.StartBlock($"{(includeElse? "else " : string.Empty)}if m.{otherProp.Getter.Name.ToFirstCharacterUpperCase()}() != nil {{");
writer.StartBlock($"{(includeElse? "} else " : string.Empty)}if m.{otherProp.Getter.Name.ToFirstCharacterUpperCase()}() != nil {{");
WriteSerializationMethodCall(otherProp.Type, parentClass, string.Empty, $"m.{otherProp.Getter.Name.ToFirstCharacterUpperCase()}()", true, writer);
writer.CloseBlock();
writer.DecreaseIndent();
if(!includeElse)
includeElse = true;
}
Expand All @@ -295,7 +312,7 @@ private void WriteSerializerBodyForIntersectionModel(CodeClass parentClass, Lang
.ToArray();
if(complexProperties.Any()) {
if(includeElse) {
writer.WriteLine("else {");
writer.WriteLine("} else {");
writer.IncreaseIndent();
}
var propertiesNames = complexProperties
Expand All @@ -306,6 +323,8 @@ private void WriteSerializerBodyForIntersectionModel(CodeClass parentClass, Lang
if(includeElse) {
writer.CloseBlock();
}
} else if(otherProps.Any()) {
writer.CloseBlock(decreaseIndent: false);
}
}
private static string errorVarDeclaration(bool shouldDeclareErrorVar) => shouldDeclareErrorVar ? ":" : string.Empty;
Expand Down Expand Up @@ -467,19 +486,23 @@ private void WriteDeserializerBody(CodeMethod codeElement, CodeClass parentClass
private static void WriteDeserializerBodyForUnionModel(CodeMethod method, CodeClass parentClass, LanguageWriter writer)
{
var includeElse = false;
foreach (var otherProp in parentClass
.Properties
.Where(static x => !x.ExistsInBaseType && x.IsOfKind(CodePropertyKind.Custom))
.Where(static x => x.Type is CodeType propertyType && !propertyType.IsCollection && propertyType.TypeDefinition is CodeClass)
.OrderBy(static x => x, CodePropertyTypeForwardComparer)
.ThenBy(static x => x.Name))
var otherProps = parentClass
.Properties
.Where(static x => !x.ExistsInBaseType && x.IsOfKind(CodePropertyKind.Custom))
.Where(static x => x.Type is CodeType propertyType && !propertyType.IsCollection && propertyType.TypeDefinition is CodeClass)
.OrderBy(static x => x, CodePropertyTypeForwardComparer)
.ThenBy(static x => x.Name)
.ToArray();
foreach (var otherProp in otherProps)
{
writer.StartBlock($"{(includeElse? "else " : string.Empty)}if m.{otherProp.Getter.Name.ToFirstCharacterUpperCase()}() != nil {{");
writer.StartBlock($"{(includeElse? "} else " : string.Empty)}if m.{otherProp.Getter.Name.ToFirstCharacterUpperCase()}() != nil {{");
writer.WriteLine($"return m.{otherProp.Getter.Name.ToFirstCharacterUpperCase()}().{method.Name.ToFirstCharacterUpperCase()}()");
writer.CloseBlock();
writer.DecreaseIndent();
if(!includeElse)
includeElse = true;
}
if(otherProps.Any())
writer.CloseBlock(decreaseIndent: false);
writer.WriteLine($"return make({method.ReturnType.Name})");
}
private void WriteDeserializerBodyForIntersectionModel(CodeMethod method, CodeClass parentClass, LanguageWriter writer)
Expand Down

0 comments on commit af2e08f

Please sign in to comment.