private static void WriteApiConstructorBody(CodeClass parentClass, CodeMethod method, LanguageWriter writer) { var httpCoreProperty = parentClass.GetChildElements(true).OfType <CodeProperty>().FirstOrDefault(x => x.IsOfKind(CodePropertyKind.HttpCore)); var httpCoreParameter = method.Parameters.FirstOrDefault(x => x.IsOfKind(CodeParameterKind.HttpCore)); var httpCorePropertyName = httpCoreProperty.Name.ToSnakeCase(); writer.WriteLine($"@{httpCorePropertyName} = {httpCoreParameter.Name}"); }
private static void AssignPropertyFromParameter(CodeClass parentClass, CodeMethod currentMethod, CodeParameterKind parameterKind, CodePropertyKind propertyKind, LanguageWriter writer) { var property = parentClass.GetChildElements(true).OfType <CodeProperty>().FirstOrDefault(x => x.IsOfKind(propertyKind)); var parameter = currentMethod.Parameters.FirstOrDefault(x => x.IsOfKind(parameterKind)); if (property != null && parameter != null) { writer.WriteLine($"{property.Name.ToFirstCharacterUpperCase()} = {parameter.Name};"); } }
private void WriteSerializerBody(bool shouldHide, CodeClass parentClass, LanguageWriter writer) { var additionalDataProperty = parentClass.GetChildElements(true).OfType <CodeProperty>().FirstOrDefault(x => x.IsOfKind(CodePropertyKind.AdditionalData)); if (shouldHide) { writer.WriteLine("base.Serialize(writer);"); } foreach (var otherProp in parentClass .GetChildElements(true) .OfType <CodeProperty>() .Where(x => x.IsOfKind(CodePropertyKind.Custom)) .OrderBy(x => x.Name)) { writer.WriteLine($"writer.{GetSerializationMethodName(otherProp.Type)}(\"{otherProp.SerializationName ?? otherProp.Name.ToFirstCharacterLowerCase()}\", {otherProp.Name.ToFirstCharacterUpperCase()});"); } if (additionalDataProperty != null) { writer.WriteLine($"writer.WriteAdditionalData({additionalDataProperty.Name});"); } }
private void WriteApiConstructorBody(CodeClass parentClass, CodeMethod method, LanguageWriter writer) { var httpCoreProperty = parentClass.GetChildElements(true).OfType <CodeProperty>().FirstOrDefault(x => x.IsOfKind(CodePropertyKind.HttpCore)); var httpCoreParameter = method.Parameters.FirstOrDefault(x => x.IsOfKind(CodeParameterKind.HttpCore)); var httpCorePropertyName = httpCoreProperty.Name.ToFirstCharacterUpperCase(); writer.WriteLine($"{httpCorePropertyName} = {httpCoreParameter.Name};"); WriteSerializationRegistration(method.SerializerModules, writer, "RegisterDefaultSerializer"); WriteSerializationRegistration(method.DeserializerModules, writer, "RegisterDefaultDeserializer"); if (_usesBackingStore) { writer.WriteLine($"{httpCorePropertyName}.EnableBackingStore();"); } }
private static void WriteConstructorBody(CodeClass parentClass, CodeMethod currentMethod, LanguageWriter writer) { foreach (var propWithDefault in parentClass .GetChildElements(true) .OfType <CodeProperty>() .Where(x => !string.IsNullOrEmpty(x.DefaultValue)) .OrderByDescending(x => x.PropertyKind) .ThenBy(x => x.Name)) { writer.WriteLine($"{propWithDefault.Name.ToFirstCharacterUpperCase()} = {propWithDefault.DefaultValue};"); } if (currentMethod.IsOfKind(CodeMethodKind.Constructor)) { AssignPropertyFromParameter(parentClass, currentMethod, CodeParameterKind.HttpCore, CodePropertyKind.HttpCore, writer); AssignPropertyFromParameter(parentClass, currentMethod, CodeParameterKind.CurrentPath, CodePropertyKind.CurrentPath, writer); } }
private void WriteDeserializerBody(CodeMethod codeElement, CodeClass parentClass, LanguageWriter writer) { var hideParentMember = (parentClass.StartBlock as CodeClass.Declaration).Inherits != null; var parentSerializationInfo = hideParentMember ? $"(base.{codeElement.Name.ToFirstCharacterUpperCase()}())" : string.Empty; writer.WriteLine($"return new Dictionary<string, Action<T, {conventions.ParseNodeInterfaceName}>>{parentSerializationInfo} {{"); writer.IncreaseIndent(); foreach (var otherProp in parentClass .GetChildElements(true) .OfType <CodeProperty>() .Where(x => x.IsOfKind(CodePropertyKind.Custom)) .OrderBy(x => x.Name)) { writer.WriteLine($"{{\"{otherProp.SerializationName ?? otherProp.Name.ToFirstCharacterLowerCase()}\", (o,n) => {{ (o as {parentClass.Name.ToFirstCharacterUpperCase()}).{otherProp.Name.ToFirstCharacterUpperCase()} = n.{GetDeserializationMethodName(otherProp.Type)}(); }} }},"); } writer.DecreaseIndent(); writer.WriteLine("};"); }
public static IEnumerable <CodeProperty> GetPropertiesOfKind(this CodeClass parentClass, params CodePropertyKind[] kinds) { if (parentClass == null) { return(Enumerable.Empty <CodeProperty>()); } if (kinds == null || !kinds.Any()) { throw new ArgumentOutOfRangeException(nameof(kinds)); } var parentClassElements = parentClass .GetChildElements(true); return(parentClassElements .OfType <CodeProperty>() .Where(x => x.IsOfKind(kinds)) .Union(parentClassElements .OfType <CodeMethod>() .Where(x => x.IsAccessor && (x.AccessedProperty?.IsOfKind(kinds) ?? false)) .Select(x => x.AccessedProperty)) .Distinct() .OrderBy(x => x.Name)); }