Пример #1
0
        private void ReadField(ClassObject classObject, ClassField classField)
        {
            var varString = classField.SafeCamelCaseName;
            var ctorPair  = classObject.CtorFields.FirstOrDefault(pair => pair.Field == classField);

            var inputField = $"input.GetProperty(\"{classField.CamelCaseName}\")";

            if (ctorPair != null && ctorPair.CtorField.HasDefaultValue)
            {
                inputField = classField.CamelCaseName + "Json";
                var startingValue = $"{CodeGeneratorUtils.WriteDefaultValue(this.TrimNameSpace(ctorPair.CtorField.Type.Name), ctorPair.CtorField.DefaultValue)}";

                writer.WriteLine($"var {varString} = {startingValue};");
                writer.WriteLine($"if (input.TryGetProperty(\"{classField.CamelCaseName}\", out var {inputField}))");
                writer.WriteLine("{");

                writer.Indent++;
                var valueString = ReadFieldType(inputField, classField.Name, classField.Type, 0);
                writer.WriteLine($"{varString} = {valueString};");

                writer.Indent--;
                writer.WriteLine("}");
            }
            else
            {
                var valueString = ReadFieldType(inputField, classField.Name, classField.Type, 0);

                if (varString != valueString)
                {
                    writer.WriteLine($"var {varString} = {valueString};");
                }
            }
        }
 protected virtual void WriteFields(ClassObject classObject)
 {
     foreach (var field in classObject.Fields)
     {
         WriteField(field);
     }
 }
Пример #3
0
 protected override void WriteFields(ClassObject classObject)
 {
     foreach (var field in classObject.Fields)
     {
         WriteField(field);
     }
     writer.WriteLine("output.WriteEndObject();");
 }
Пример #4
0
 protected override void WriteFields(ClassObject classObject)
 {
     writer.WriteLine("var result = new JSONObject();");
     foreach (var field in classObject.Fields)
     {
         WriteField(field);
     }
     writer.WriteLine("return result;");
 }
        protected virtual void WriteClass(ClassObject classObject)
        {
            var generics    = CodeGeneratorUtils.CreateGenericClassString(classObject.Generics);
            var constraints = CodeGeneratorUtils.CreateGenericConstraintsString(classObject.Generics);

            this.WriteClassObjectMethod(generics, constraints, classObject);

            writer.Indent++;
            WriteFields(classObject);
            writer.Indent--;

            writer.WriteLine("}");
        }
Пример #6
0
        public static void ReadFieldsToCtor(Manager manager, ClassObject classObject, IndentedTextWriter writer, ReadFieldHandler readFieldHandler)
        {
            foreach (var field in classObject.Fields)
            {
                readFieldHandler(field);
            }

            var ctorArgs = string.Join(", ", classObject.CtorFields.Select(f => f.Field.SafeCamelCaseName));
            var generics = CodeGeneratorUtils.CreateGenericClassString(classObject.Generics);

            writer.WriteLine();
            writer.WriteLine($"return new {classObject.FullName.TrimNameSpace(manager.NameSpace)}{generics}({ctorArgs});");
        }
 public void SaveToStream(ClassObject classObject, Stream output)
 {
     using (var streamWriter = new StreamWriter(output))
         using (this.writer = new IndentedTextWriter(streamWriter))
         {
             CodeGeneratorUtils.WriteOuterClass(manager, classObject.FullName, writer, this.FileSuffix, this.UsingImports,
                                                () =>
             {
                 WriteClass(classObject);
                 writer.WriteLine();
                 ReadClass(classObject);
             });
         }
 }
        protected virtual void ReadClass(ClassObject classObject)
        {
            var readName    = this.MakeReadValueMethod(classObject.FullName);
            var generics    = CodeGeneratorUtils.CreateGenericClassString(classObject.Generics);
            var constraints = CodeGeneratorUtils.CreateGenericConstraintsString(classObject.Generics);

            writer.Write($"public static {this.TrimNameSpace(classObject.FullName)}{generics} {readName}{generics}({this.ReadObject} input)");
            writer.WriteLine(constraints);
            writer.WriteLine("{");

            writer.Indent++;
            this.ReadClassInner(classObject);
            writer.Indent--;

            writer.WriteLine("}");
        }
Пример #9
0
 public SubclassPair(ClassObject subclass, object typeDiscriminatorValue)
 {
     this.Subclass = subclass;
     this.TypeDiscriminatorValue = typeDiscriminatorValue;
 }
Пример #10
0
 protected override void ReadClassInner(ClassObject classObject)
 {
     this.WriteReadFieldsToCtor(classObject, this.ReadField);
 }
 protected virtual void WriteReadFieldsToCtor(ClassObject classObject, CodeGeneratorUtils.ReadFieldHandler readFieldHandler)
 {
     CodeGeneratorUtils.ReadFieldsToCtor(this.manager, classObject, this.writer, readFieldHandler);
 }
 protected abstract void ReadClassInner(ClassObject classObject);
 protected virtual void WriteClassObjectMethod(string generics, string constraints, ClassObject classObject)
 {
     writer.Write($"public static void Write{generics}({this.TrimNameSpace(classObject.FullName)}{generics} input, {this.WriteObject} output)");
     writer.WriteLine(constraints);
     writer.WriteLine("{");
 }
Пример #14
0
        protected override void WriteClassObjectMethod(string generics, string constraints, ClassObject classObject)
        {
            writer.Write($"public static void Write{generics}({this.TrimNameSpace(classObject.FullName)}{generics} input, {this.WriteObject} output)");
            writer.WriteLine(constraints);
            writer.WriteLine("{");
            writer.Indent++;
            writer.WriteLine("Write(input, output, false);");
            writer.Indent--;
            writer.WriteLine("}");

            writer.WriteLine();

            writer.Write($"public static void Write{generics}({this.TrimNameSpace(classObject.FullName)}{generics} input, {this.WriteObject} output, bool skipStartObject)");
            writer.WriteLine(constraints);
            writer.WriteLine("{");
            writer.Indent++;
            writer.WriteLine("if (!skipStartObject)");
            writer.WriteLine("{");
            writer.Indent++;
            writer.WriteLine("output.WriteStartObject();");
            writer.Indent--;
            writer.WriteLine("}");

            writer.Indent--;
            writer.WriteLine();
        }
Пример #15
0
 public void AddClass(ClassObject classObject)
 {
     Console.WriteLine($"Adding class: {classObject.FullName.Value}");
     this.classMap[classObject.FullName] = classObject;
 }
Пример #16
0
        public ClassObject CreateObjectFromType(Type type, ClassBaseObject baseObject = null)
        {
            var fields = new List <ClassField>();

            foreach (var field in type.GetFields())
            {
                // Static class fields should be properties as well.
                if (field.Attributes.HasFlag(FieldAttributes.Static))
                {
                    continue;
                }

                if (TryGetValidFieldType(field, out var fieldType))
                {
                    if (field.Name == null)
                    {
                        continue;
                    }

                    try
                    {
                        var ignore = field.GetCustomAttribute <NonSerializedAttribute>(true);
                        if (ignore != null)
                        {
                            continue;
                        }
                    }
                    catch (FileNotFoundException)
                    {
                        // Ignore type load exception
                    }

                    var classType = CreateTypeFromType(fieldType);
                    fields.Add(new ClassField(field.Name, classType));
                }
            }

            var ctors         = type.GetConstructors();
            var allCtorFields = new List <List <ClassField> >();

            foreach (var ctor in ctors)
            {
                var ctorFields = new List <ClassField>();
                allCtorFields.Add(ctorFields);

                foreach (var ctorField in ctor.GetParameters())
                {
                    if (TryGetValidParameterType(ctorField, out var fieldType))
                    {
                        var classType = CreateTypeFromType(fieldType);
                        ctorFields.Add(new ClassField(ctorField.Name, classType, ctorField.HasDefaultValue, ctorField.DefaultValue));
                    }
                }
            }

            var fieldToCtorPairs = ClassObject.FindCtor(fields, allCtorFields);

            var classGenerics = CreateGenericsFromType(type);

            return(new ClassObject(new ClassName(type.FullName), fields, fieldToCtorPairs, classGenerics, baseObject, isAbstract: type.IsAbstract, isInterface: type.IsInterface));
        }
Пример #17
0
 protected override void WriteClassObjectMethod(string generics, string constraints, ClassObject classObject)
 {
     writer.Write($"public static JSONObject Write{generics}({this.TrimNameSpace(classObject.FullName)}{generics} input)");
     writer.WriteLine(constraints);
     writer.WriteLine("{");
 }