예제 #1
0
        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}");
        }
예제 #2
0
        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};");
            }
        }
예제 #3
0
        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});");
            }
        }
예제 #4
0
        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();");
            }
        }
예제 #5
0
 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);
     }
 }
예제 #6
0
        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("};");
        }
예제 #7
0
        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));
        }