Exemplo n.º 1
0
        private void _WriteSaveMethod(Type type, List <MemberBase> members)
        {
            if (_rootTypes.Contains(type))
            {
                _writer.WriteLine("[Export(ExportFlags.AutoCode)]");
                _writer.WriteLine("public virtual void Save (IOctetsWriter writer)");
                using (CodeScope.CreateCSharpScope(_writer))
                {
                    _writer.WriteLine("throw new NotImplementedException(\"This method should be override~\");");
                }
            }
            else
            {
                using (MacroScope.CreateEditorScope(_writer.BaseWriter))
                {
                    _writer.WriteLine("[Export(ExportFlags.AutoCode)]");

                    var overrideText = _rootTypes.Contains(EditorMetaCommon.GetRootMetadata(type)) ? "override " : string.Empty;
                    _writer.WriteLine("public {0}void Save (IOctetsWriter writer)", overrideText);
                    using (CodeScope.Create(_writer, "{\n", "}\n"))
                    {
                        for (int index = 0; index < members.Count; ++index)
                        {
                            var member = members[index];
                            member.WriteSave(_writer);
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void _WriteOneClassOrStruct(Type type, ExportFlags flags)
        {
            var classOrStruct = type.IsClass ? "class" : "struct";
            var sealedClass   = type.IsClass && EditorMetaCommon.IsFinalType(type) ? "sealed " : string.Empty;

            _writer.WriteLine("[Serializable]");
            _writer.WriteLine("{0}partial {1} {2} : {3}", sealedClass, classOrStruct, type.Name, typeof(ILoadable).Name);

            using (MacroScope.CreateEditorScope(_writer.BaseWriter))
            {
                _writer.WriteLine(", {0}", typeof(ISavable).Name);
            }

            using (CodeScope.CreateCSharpScope(_writer))
            {
                var nestedTypes = type.GetNestedTypes(BindingFlags.Instance | BindingFlags.Public);
                _WriteNestedTypes(nestedTypes, flags);

                var members = new List <MemberBase>();
                _CollectSerializableMembers(type, members);

                _WriteSaveMethod(type, members);
                _WriteLoadMethod(type, members);
                _WriteToStringMethod(type, members);
                _WriteGetMetadataTypeMethod(type);
            }
        }