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); } } } } }
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); } }