private void AddDeserializeMethod( ITypeDescriptor typeReference, ClassBuilder classBuilder, HashSet <string> processed) { string methodName = DeserializerMethodNameFromTypeName(typeReference); if (processed.Add(methodName)) { MethodBuilder methodBuilder = classBuilder .AddMethod() .SetPrivate() .SetReturnType(typeReference.ToEntityIdBuilder()) .SetName(methodName); methodBuilder .AddParameter(_obj) .SetType(TypeNames.JsonElement.MakeNullable()); if (typeReference.IsEntityType() || typeReference.ContainsEntity()) { methodBuilder .AddParameter(_entityIds) .SetType(TypeNames.ISet.WithGeneric(TypeNames.EntityId)); } IfBuilder jsonElementNullCheck = IfBuilder .New() .SetCondition($"!{_obj}.HasValue") .AddCode( typeReference.IsNonNullableType() ? ExceptionBuilder.New(TypeNames.ArgumentNullException) : CodeLineBuilder.From("return null;")); methodBuilder .AddCode(jsonElementNullCheck) .AddEmptyLine(); AddDeserializeMethodBody(classBuilder, methodBuilder, typeReference, processed); } }
public static CodeBlockBuilder AddLine( this CodeBlockBuilder builder, string code) { return(builder.AddCode(CodeLineBuilder.From(code))); }