Exemple #1
0
        private static IEnumerable <MemberDeclarationSyntax> GenerateField(Field field, IReadOnlyList <Operation> operations)
        {
            List <string> opNames = operations.Where(o => o.Fields.Any(f => f.Id == field.Id)).Select(o => o.Id).OrderBy(n => n).ToList();

            if (opNames.Count == 0)
            {
                throw new Exception("Found Field with no usages: " + field.Entries);
            }

            if (field.Entries.Count > 1)
            {
                string stringPropName = field.Id.First().ToString().ToUpper() + field.Id.Substring(1) + (!field.IsEnum || field.EnumAsString ? "String" : "Int");

                yield return(CreateAutoProperty(stringPropName, !field.IsEnum || field.EnumAsString ? "string" : "int", CreateAttribute(field.Id)));

                yield return(CreateCanSerializeAt(stringPropName, opNames));

                foreach (FieldEntry ent in field.Entries)
                {
                    string getStr = GetGetter(field, stringPropName, ent);
                    string setStr = GetSetter(field, stringPropName);

                    yield return(CreateProperty(ent.Name, ent.Type, CreateIgnoreAttribute())
                                 .AddAccessorListAccessors(CreateArrowExpression(SyntaxKind.GetAccessorDeclaration, getStr))
                                 .AddAccessorListAccessors(CreateArrowExpression(SyntaxKind.SetAccessorDeclaration, setStr)));
                }

                yield break;
            }

            FieldEntry entry = field.Entries.First();

            if (field.EnumAsString)
            {
                yield return(CreateAutoProperty(entry.Name, entry.Type, CreateIgnoreAttribute()));

                string getStr = string.Format("{0}.ToString();", entry.Name);
                string setStr = string.Format("{0} = ({1})Enum.Parse(typeof({1}), value);", entry.Name, entry.Type);

                yield return(CreateProperty(entry.Name + "String", "string", CreateAttribute(field.Id))
                             .AddAccessorListAccessors(CreateArrowExpression(SyntaxKind.GetAccessorDeclaration, getStr))
                             .AddAccessorListAccessors(CreateArrowExpression(SyntaxKind.SetAccessorDeclaration, setStr)));

                yield return(CreateCanSerializeAt(entry.Name + "String", opNames));

                yield break;
            }

            yield return(CreateAutoProperty(entry.Name, entry.Type, CreateAttribute(field.Id)));

            yield return(CreateCanSerializeAt(entry.Name, opNames));
        }
Exemple #2
0
        private static string GetGetter(Field field, string stringPropName, FieldEntry ent)
        {
            if (!field.IsEnum)
            {
                return(string.Format("{1}.Parse({0});", stringPropName, ent.Type));
            }

            if (field.EnumAsString)
            {
                return(string.Format("({1})Enum.Parse(typeof({1}), {0});", stringPropName, ent.Type));
            }

            return(string.Format("({1}){0};", stringPropName, ent.Type));
        }