From b3457da8d25451c1d13eb5a795896d510cb42a3d Mon Sep 17 00:00:00 2001 From: walon Date: Sat, 29 Jan 2022 14:28:03 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=89=B9=E6=80=A7=E3=80=91=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=AD=90bean=E5=9C=A8=E5=85=B6=E4=BB=96=E5=9C=B0?= =?UTF-8?q?=E6=96=B9=EF=BC=8C=E5=8C=85=E6=8B=AC=E5=85=B6=E4=BB=96=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=BB=8E=E7=88=B6=E7=B1=BB=E7=BB=A7=E6=89=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataCreators/ExcelStreamDataCreator.cs | 7 +--- .../Source/DataCreators/JsonDataCreator.cs | 8 +---- .../Source/DataCreators/LuaDataCreator.cs | 9 +---- .../Source/DataCreators/SheetDataCreator.cs | 7 +--- .../Source/DataCreators/XmlDataCreator.cs | 8 +---- .../Source/DataCreators/YamlDataCreator.cs | 4 +-- .../Source/DataExporters/JsonExportor.cs | 3 +- .../Source/DataExporters/MsgPackExportor.cs | 3 +- .../Source/DataExporters/RawJsonExportor.cs | 2 +- .../DataVisitors/ToErlangLiteralVisitor.cs | 2 +- .../DataVisitors/ToLuaLiteralVisitor.cs | 2 +- src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs | 6 ++-- .../Source/Generate/CppUE4EditorJsonRender.cs | 2 +- src/Luban.Job.Cfg/Source/Utils/DataUtil.cs | 35 +++++++++++++++++++ .../Source/Utils/TTypeTemplateExtends.cs | 5 +++ .../Source/Defs/CommonDefLoader.cs | 21 +++++++++-- .../Source/Defs/DefAssemblyBase.cs | 4 +-- .../Templates/config/cs_json/bean.tpl | 2 +- .../config/cs_unity_editor_json/bean.tpl | 2 +- .../Templates/config/cs_unity_json/bean.tpl | 2 +- .../Templates/config/go_json/bean.tpl | 2 +- .../Templates/config/java_json/bean.tpl | 2 +- .../Templates/config/python2_json/bean.tpl | 2 +- .../Templates/config/python3_json/bean.tpl | 2 +- .../Templates/config/rust_json/bean.tpl | 2 +- .../Templates/config/typescript_json/bean.tpl | 2 +- 26 files changed, 87 insertions(+), 59 deletions(-) diff --git a/src/Luban.Job.Cfg/Source/DataCreators/ExcelStreamDataCreator.cs b/src/Luban.Job.Cfg/Source/DataCreators/ExcelStreamDataCreator.cs index ab37295..26acfa1 100644 --- a/src/Luban.Job.Cfg/Source/DataCreators/ExcelStreamDataCreator.cs +++ b/src/Luban.Job.Cfg/Source/DataCreators/ExcelStreamDataCreator.cs @@ -396,12 +396,7 @@ namespace Luban.Job.Cfg.DataCreators } return null; } - string fullType = TypeUtil.MakeFullName(originBean.Namespace, subType); - DefBean implType = (DefBean)originBean.GetNotAbstractChildType(subType); - if (implType == null) - { - throw new InvalidExcelDataException($"type:{fullType} 不是bean类型"); - } + DefBean implType = DataUtil.GetImplTypeByNameOrAlias(originBean, subType); return new DBean(type, implType, CreateBeanFields(implType, x)); } else diff --git a/src/Luban.Job.Cfg/Source/DataCreators/JsonDataCreator.cs b/src/Luban.Job.Cfg/Source/DataCreators/JsonDataCreator.cs index a8879ae..15e3480 100644 --- a/src/Luban.Job.Cfg/Source/DataCreators/JsonDataCreator.cs +++ b/src/Luban.Job.Cfg/Source/DataCreators/JsonDataCreator.cs @@ -117,13 +117,7 @@ namespace Luban.Job.Cfg.DataCreators throw new Exception($"结构:'{bean.FullName}' 是多态类型,必须用 '{DefBean.TYPE_NAME_KEY}' 字段指定 子类名"); } string subType = typeNameProp.GetString(); - var fullName = TypeUtil.MakeFullName(bean.Namespace, subType); - var defType = (DefBean)bean.GetNotAbstractChildType(subType); - //if (defType.IsAbstractType) - //{ - // throw new Exception($"type:{fullName} 是抽象类. 不能创建实例"); - //} - implBean = defType ?? throw new Exception($"type:'{fullName}' 不是合法类型"); + implBean = DataUtil.GetImplTypeByNameOrAlias(bean, subType); } else { diff --git a/src/Luban.Job.Cfg/Source/DataCreators/LuaDataCreator.cs b/src/Luban.Job.Cfg/Source/DataCreators/LuaDataCreator.cs index 7cacfab..940b960 100644 --- a/src/Luban.Job.Cfg/Source/DataCreators/LuaDataCreator.cs +++ b/src/Luban.Job.Cfg/Source/DataCreators/LuaDataCreator.cs @@ -158,14 +158,7 @@ namespace Luban.Job.Cfg.DataCreators throw new Exception($"结构:{bean.FullName} 是多态类型,必须用 {DefBean.TYPE_NAME_KEY} 字段指定 子类名"); } var subType = (string)table[DefBean.TYPE_NAME_KEY]; - - string fullName = TypeUtil.MakeFullName(bean.Namespace, subType); - var defType = (DefBean)bean.GetNotAbstractChildType(subType); - //if (defType.IsAbstractType) - //{ - // throw new Exception($"type:{fullName} 是抽象类. 不能创建实例"); - //} - implBean = defType ?? throw new Exception($"type:{fullName} 不是合法类型"); + implBean = DataUtil.GetImplTypeByNameOrAlias(bean, subType); } else { diff --git a/src/Luban.Job.Cfg/Source/DataCreators/SheetDataCreator.cs b/src/Luban.Job.Cfg/Source/DataCreators/SheetDataCreator.cs index 4c22f97..75050ed 100644 --- a/src/Luban.Job.Cfg/Source/DataCreators/SheetDataCreator.cs +++ b/src/Luban.Job.Cfg/Source/DataCreators/SheetDataCreator.cs @@ -414,12 +414,7 @@ namespace Luban.Job.Cfg.DataCreators } return null; } - string fullType = TypeUtil.MakeFullName(originBean.Namespace, subType); - DefBean implType = (DefBean)originBean.GetNotAbstractChildType(subType); - if (implType == null) - { - throw new Exception($"type:'{fullType}' 不是 bean 类型或者不是'{originBean.FullName}'的子类"); - } + DefBean implType = DataUtil.GetImplTypeByNameOrAlias(originBean, subType); return new DBean(type, implType, CreateBeanFields(implType, sheet, row)); } else diff --git a/src/Luban.Job.Cfg/Source/DataCreators/XmlDataCreator.cs b/src/Luban.Job.Cfg/Source/DataCreators/XmlDataCreator.cs index 061c277..ccaec89 100644 --- a/src/Luban.Job.Cfg/Source/DataCreators/XmlDataCreator.cs +++ b/src/Luban.Job.Cfg/Source/DataCreators/XmlDataCreator.cs @@ -101,13 +101,7 @@ namespace Luban.Job.Cfg.DataCreators { throw new Exception($"bean:'{bean.FullName}'是多态,需要指定{DefBean.TYPE_NAME_KEY}属性.\n xml:{x}"); } - var fullName = TypeUtil.MakeFullName(bean.Namespace, subType); - var defType = (DefBean)bean.GetNotAbstractChildType(subType); - //if (defType.IsAbstractType) - //{ - // throw new Exception($"type:{fullName} 是抽象类. 不能创建实例"); - //} - implBean = defType ?? throw new Exception($"type:'{fullName}' 不是合法类型"); + implBean = DataUtil.GetImplTypeByNameOrAlias(bean, subType); } else { diff --git a/src/Luban.Job.Cfg/Source/DataCreators/YamlDataCreator.cs b/src/Luban.Job.Cfg/Source/DataCreators/YamlDataCreator.cs index f8e3185..50b418c 100644 --- a/src/Luban.Job.Cfg/Source/DataCreators/YamlDataCreator.cs +++ b/src/Luban.Job.Cfg/Source/DataCreators/YamlDataCreator.cs @@ -117,9 +117,7 @@ namespace Luban.Job.Cfg.DataCreators { throw new Exception($"bean:'{bean.FullName}'是多态,需要指定{DefBean.TYPE_NAME_KEY}属性.\n xml:{x}"); } - var fullName = TypeUtil.MakeFullName(bean.Namespace, subType); - var defType = (DefBean)bean.GetNotAbstractChildType(subType); - implBean = defType ?? throw new Exception($"type:'{fullName}' 不是合法类型"); + implBean = DataUtil.GetImplTypeByNameOrAlias(bean, subType); } else { diff --git a/src/Luban.Job.Cfg/Source/DataExporters/JsonExportor.cs b/src/Luban.Job.Cfg/Source/DataExporters/JsonExportor.cs index 2a16dd3..ab1dd15 100644 --- a/src/Luban.Job.Cfg/Source/DataExporters/JsonExportor.cs +++ b/src/Luban.Job.Cfg/Source/DataExporters/JsonExportor.cs @@ -2,6 +2,7 @@ using Luban.Job.Cfg.Datas; using Luban.Job.Cfg.DataSources; using Luban.Job.Cfg.DataVisitors; using Luban.Job.Cfg.Defs; +using Luban.Job.Cfg.Utils; using System; using System.Collections.Generic; using System.Text.Json; @@ -104,7 +105,7 @@ namespace Luban.Job.Cfg.DataExporters if (type.Type.IsAbstractType) { x.WritePropertyName(DefBean.TYPE_NAME_KEY); - x.WriteStringValue(type.ImplType.Name); + x.WriteStringValue(DataUtil.GetImplTypeName(type)); } var defFields = type.ImplType.HierarchyFields; diff --git a/src/Luban.Job.Cfg/Source/DataExporters/MsgPackExportor.cs b/src/Luban.Job.Cfg/Source/DataExporters/MsgPackExportor.cs index 456a565..a5023b9 100644 --- a/src/Luban.Job.Cfg/Source/DataExporters/MsgPackExportor.cs +++ b/src/Luban.Job.Cfg/Source/DataExporters/MsgPackExportor.cs @@ -2,6 +2,7 @@ using Luban.Job.Cfg.DataSources; using Luban.Job.Cfg.DataVisitors; using Luban.Job.Cfg.Defs; +using Luban.Job.Cfg.Utils; using MessagePack; using System; using System.Collections.Generic; @@ -183,7 +184,7 @@ namespace Luban.Job.Cfg.DataExporters if (type.Type.IsAbstractType) { writer.Write(DefBean.TYPE_NAME_KEY); - writer.Write(type.ImplType.Name); + writer.Write(DataUtil.GetImplTypeName(type)); } int index = 0; diff --git a/src/Luban.Job.Cfg/Source/DataExporters/RawJsonExportor.cs b/src/Luban.Job.Cfg/Source/DataExporters/RawJsonExportor.cs index d0b26a3..8032a52 100644 --- a/src/Luban.Job.Cfg/Source/DataExporters/RawJsonExportor.cs +++ b/src/Luban.Job.Cfg/Source/DataExporters/RawJsonExportor.cs @@ -105,7 +105,7 @@ namespace Luban.Job.Cfg.DataExporters if (type.Type.IsAbstractType) { x.WritePropertyName(DefBean.TYPE_NAME_KEY); - x.WriteStringValue(type.ImplType.Name); + x.WriteStringValue(DataUtil.GetImplTypeName(type)); } var defFields = type.ImplType.HierarchyFields; diff --git a/src/Luban.Job.Cfg/Source/DataVisitors/ToErlangLiteralVisitor.cs b/src/Luban.Job.Cfg/Source/DataVisitors/ToErlangLiteralVisitor.cs index 70898f6..e1ae4d5 100644 --- a/src/Luban.Job.Cfg/Source/DataVisitors/ToErlangLiteralVisitor.cs +++ b/src/Luban.Job.Cfg/Source/DataVisitors/ToErlangLiteralVisitor.cs @@ -20,7 +20,7 @@ namespace Luban.Job.Cfg.DataVisitors var x = new StringBuilder(); if (type.Type.IsAbstractType) { - x.Append($"#{{name__ => \"{type.ImplType.Name}\""); + x.Append($"#{{name__ => \"{DataUtil.GetImplTypeName(type)}\""); if (type.Fields.Count > 0) { x.Append(','); diff --git a/src/Luban.Job.Cfg/Source/DataVisitors/ToLuaLiteralVisitor.cs b/src/Luban.Job.Cfg/Source/DataVisitors/ToLuaLiteralVisitor.cs index 45be349..713bbaf 100644 --- a/src/Luban.Job.Cfg/Source/DataVisitors/ToLuaLiteralVisitor.cs +++ b/src/Luban.Job.Cfg/Source/DataVisitors/ToLuaLiteralVisitor.cs @@ -20,7 +20,7 @@ namespace Luban.Job.Cfg.DataVisitors var x = new StringBuilder(); if (type.Type.IsAbstractType) { - x.Append($"{{ _name='{type.ImplType.Name}',"); + x.Append($"{{ _name='{DataUtil.GetImplTypeName(type)}',"); } else { diff --git a/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs b/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs index 72c63cd..5cdbf04 100644 --- a/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs +++ b/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs @@ -775,18 +775,18 @@ namespace Luban.Job.Cfg.Defs return f; } - private static readonly List _beanOptinsAttrs = new List { "value_type", "alias", "sep", "comment", "tags", "externaltype" }; + private static readonly List _beanOptinsAttrs = new List { "parent", "value_type", "alias", "sep", "comment", "tags", "externaltype" }; private static readonly List _beanRequireAttrs = new List { "name" }; override protected void AddBean(string defineFile, XElement e, string parent) { ValidAttrKeys(defineFile, e, _beanOptinsAttrs, _beanRequireAttrs); - + TryGetUpdateParent(e, ref parent); var b = new CfgBean() { Name = XmlUtil.GetRequiredAttribute(e, "name"), Namespace = CurNamespace, - Parent = parent.Length > 0 ? parent : "", + Parent = parent, TypeId = 0, IsSerializeCompatible = true, IsValueType = XmlUtil.GetOptionBoolAttribute(e, "value_type"), diff --git a/src/Luban.Job.Cfg/Source/Generate/CppUE4EditorJsonRender.cs b/src/Luban.Job.Cfg/Source/Generate/CppUE4EditorJsonRender.cs index 565e6bc..0310238 100644 --- a/src/Luban.Job.Cfg/Source/Generate/CppUE4EditorJsonRender.cs +++ b/src/Luban.Job.Cfg/Source/Generate/CppUE4EditorJsonRender.cs @@ -173,7 +173,7 @@ namespace editor if (_json->TryGetStringField(FString(""__type__""), type)) { {{~for child in type.hierarchy_not_abstract_children~}} - if (type == ""{{child.name}}"") + if (type == ""{{cs_impl_data_type child x}}"") { result = new {{child.ue_fname}}(); } else diff --git a/src/Luban.Job.Cfg/Source/Utils/DataUtil.cs b/src/Luban.Job.Cfg/Source/Utils/DataUtil.cs index 00f8f41..8df212f 100644 --- a/src/Luban.Job.Cfg/Source/Utils/DataUtil.cs +++ b/src/Luban.Job.Cfg/Source/Utils/DataUtil.cs @@ -184,6 +184,41 @@ namespace Luban.Job.Cfg.Utils return false; } + public static string GetImplTypeName(DBean bean) + { + return GetImplTypeName(bean.ImplType, bean.Type); + } + + public static string GetImplTypeName(DefBean implType, DefBean baseType) + { + if (implType.Namespace == baseType.Namespace) + { + return implType.Name; + } + else + { + return implType.FullName; + } + } + + public static DefBean GetImplTypeByNameOrAlias(DefBean bean, string subType) + { + if (string.IsNullOrEmpty(subType)) + { + throw new Exception($"module:'{bean.Namespace}' ̬typeΪ"); + } + DefBean defType = bean.HierarchyNotAbstractChildren.Cast().Where(c => c.Alias == subType || c.Name == subType || c.FullName == subType).FirstOrDefault(); + if (defType == null) + { + throw new Exception($"module:'{bean.Namespace}' type:'{subType}' ǺϷ"); + } + if (defType.IsAbstractType) + { + throw new Exception($"module:'{bean.Namespace}' type:'{subType}' dz. ܴʵ"); + } + return defType; + } + //public static string Data2String(DType data) //{ // var s = new StringBuilder(); diff --git a/src/Luban.Job.Cfg/Source/Utils/TTypeTemplateExtends.cs b/src/Luban.Job.Cfg/Source/Utils/TTypeTemplateExtends.cs index 71b7a53..dc2f39e 100644 --- a/src/Luban.Job.Cfg/Source/Utils/TTypeTemplateExtends.cs +++ b/src/Luban.Job.Cfg/Source/Utils/TTypeTemplateExtends.cs @@ -37,6 +37,11 @@ namespace Luban.Job.Cfg.Utils } } + public static string CsImplDataType(DefBean type, DefBean parent) + { + return DataUtil.GetImplTypeName(type, parent); + } + public static string CsUnityJsonDeserialize(string bufName, string fieldName, string jsonFieldName, TType type) { if (type.IsNullable) diff --git a/src/Luban.Job.Common/Source/Defs/CommonDefLoader.cs b/src/Luban.Job.Common/Source/Defs/CommonDefLoader.cs index dd28113..6256548 100644 --- a/src/Luban.Job.Common/Source/Defs/CommonDefLoader.cs +++ b/src/Luban.Job.Common/Source/Defs/CommonDefLoader.cs @@ -217,11 +217,26 @@ namespace Luban.Job.Common.Defs private static readonly List _beanOptinsAttrs1 = new List { "compatible", "value_type", "comment", "tags", "externaltype" }; private static readonly List _beanRequireAttrs1 = new List { "id", "name" }; - private static readonly List _beanOptinsAttrs2 = new List { "id", "compatible", "value_type", "comment", "tags", "externaltype" }; + private static readonly List _beanOptinsAttrs2 = new List { "id", "parent", "compatible", "value_type", "comment", "tags", "externaltype" }; private static readonly List _beanRequireAttrs2 = new List { "name" }; + + protected void TryGetUpdateParent(XElement e, ref string parent) + { + string selfDefParent = XmlUtil.GetOptionalAttribute(e, "parent"); + if (!string.IsNullOrEmpty(selfDefParent)) + { + if (!string.IsNullOrEmpty(parent)) + { + throw new Exception($"嵌套在'{parent}'中定义的子bean:'{XmlUtil.GetRequiredAttribute(e, "name")}' 不能再定义parent:{selfDefParent} 属性"); + } + parent = selfDefParent; + } + } + protected virtual void AddBean(string defineFile, XElement e, string parent) { + if (IsBeanFieldMustDefineId) { ValidAttrKeys(defineFile, e, _beanOptinsAttrs1, _beanRequireAttrs1); @@ -230,11 +245,13 @@ namespace Luban.Job.Common.Defs { ValidAttrKeys(defineFile, e, _beanOptinsAttrs2, _beanRequireAttrs2); } + TryGetUpdateParent(e, ref parent); + var b = new Bean() { Name = XmlUtil.GetRequiredAttribute(e, "name").Trim(), Namespace = CurNamespace, - Parent = parent.Length > 0 ? parent : "", + Parent = parent, TypeId = XmlUtil.GetOptionIntAttribute(e, "id"), IsSerializeCompatible = XmlUtil.GetOptionBoolAttribute(e, "compatible", IsBeanDefaultCompatible), IsValueType = XmlUtil.GetOptionBoolAttribute(e, "value_type"), diff --git a/src/Luban.Job.Common/Source/Defs/DefAssemblyBase.cs b/src/Luban.Job.Common/Source/Defs/DefAssemblyBase.cs index 3fbfd61..884831b 100644 --- a/src/Luban.Job.Common/Source/Defs/DefAssemblyBase.cs +++ b/src/Luban.Job.Common/Source/Defs/DefAssemblyBase.cs @@ -141,11 +141,11 @@ namespace Luban.Job.Common.Defs public DefTypeBase GetDefType(string module, string type) { - if (Types.TryGetValue(type, out var t)) + if (Types.TryGetValue(TypeUtil.MakeFullName(module, type), out var t)) { return t; } - else if (Types.TryGetValue(TypeUtil.MakeFullName(module, type), out t)) + else if (Types.TryGetValue(type, out t)) { return t; } diff --git a/src/Luban.Server/Templates/config/cs_json/bean.tpl b/src/Luban.Server/Templates/config/cs_json/bean.tpl index 527755b..d8c901a 100644 --- a/src/Luban.Server/Templates/config/cs_json/bean.tpl +++ b/src/Luban.Server/Templates/config/cs_json/bean.tpl @@ -48,7 +48,7 @@ public {{x.cs_class_modifier}} partial class {{name}} : {{if parent_def_type}} { switch (_json.GetProperty("__type__").GetString()) { {{~for child in x.hierarchy_not_abstract_children~}} - case "{{child.name}}": return new {{child.full_name}}(_json); + case "{{cs_impl_data_type child x}}": return new {{child.full_name}}(_json); {{~end~}} default: throw new SerializationException(); } diff --git a/src/Luban.Server/Templates/config/cs_unity_editor_json/bean.tpl b/src/Luban.Server/Templates/config/cs_unity_editor_json/bean.tpl index ae7be75..9854ff6 100644 --- a/src/Luban.Server/Templates/config/cs_unity_editor_json/bean.tpl +++ b/src/Luban.Server/Templates/config/cs_unity_editor_json/bean.tpl @@ -75,7 +75,7 @@ public {{x.cs_class_modifier}} partial class {{name}} : {{if parent_def_type}} { switch (type) { {{~for child in x.hierarchy_not_abstract_children~}} - case "{{child.name}}": obj = new {{child.full_name}}(); break; + case "{{cs_impl_data_type child x}}": obj = new {{child.full_name}}(); break; {{~end~}} default: throw new SerializationException(); } diff --git a/src/Luban.Server/Templates/config/cs_unity_json/bean.tpl b/src/Luban.Server/Templates/config/cs_unity_json/bean.tpl index b01b9a4..1bd395d 100644 --- a/src/Luban.Server/Templates/config/cs_unity_json/bean.tpl +++ b/src/Luban.Server/Templates/config/cs_unity_json/bean.tpl @@ -49,7 +49,7 @@ public {{x.cs_class_modifier}} partial class {{name}} : {{if parent_def_type}} { switch (type) { {{~for child in x.hierarchy_not_abstract_children~}} - case "{{child.name}}": return new {{child.full_name}}(_json); + case "{{cs_impl_data_type child x}}": return new {{child.full_name}}(_json); {{~end~}} default: throw new SerializationException(); } diff --git a/src/Luban.Server/Templates/config/go_json/bean.tpl b/src/Luban.Server/Templates/config/go_json/bean.tpl index b9b120d..64ee98d 100644 --- a/src/Luban.Server/Templates/config/go_json/bean.tpl +++ b/src/Luban.Server/Templates/config/go_json/bean.tpl @@ -38,7 +38,7 @@ func Deserialize{{go_full_name}}(_buf map[string]interface{}) (interface{}, erro } switch id { {{~for child in hierarchy_not_abstract_children~}} - case "{{child.name}}": _v := &{{child.go_full_name}}{}; if err := _v.Deserialize(_buf); err != nil { return nil, errors.New("{{child.full_name}}") } else { return _v, nil } + case "{{cs_impl_data_type child x}}": _v := &{{child.go_full_name}}{}; if err := _v.Deserialize(_buf); err != nil { return nil, errors.New("{{child.full_name}}") } else { return _v, nil } {{~end~}} default: return nil, errors.New("unknown type id") } diff --git a/src/Luban.Server/Templates/config/java_json/bean.tpl b/src/Luban.Server/Templates/config/java_json/bean.tpl index 76d2e30..78875cc 100644 --- a/src/Luban.Server/Templates/config/java_json/bean.tpl +++ b/src/Luban.Server/Templates/config/java_json/bean.tpl @@ -48,7 +48,7 @@ public {{x.java_class_modifier}} class {{name}}{{if parent_def_type}} extends {{ {{~if x.is_abstract_type~}} switch (__json__.get("__type__").getAsString()) { {{~for child in x.hierarchy_not_abstract_children~}} - case "{{child.name}}": return new {{child.full_name_with_top_module}}(__json__); + case "{{cs_impl_data_type child x}}": return new {{child.full_name_with_top_module}}(__json__); {{~end~}} default: throw new bright.serialization.SerializationException(); } diff --git a/src/Luban.Server/Templates/config/python2_json/bean.tpl b/src/Luban.Server/Templates/config/python2_json/bean.tpl index afc7dbc..b579bcc 100644 --- a/src/Luban.Server/Templates/config/python2_json/bean.tpl +++ b/src/Luban.Server/Templates/config/python2_json/bean.tpl @@ -17,7 +17,7 @@ class {{name}} {{if parent_def_type}}({{parent_def_type.py_full_name}}){{end}}: if not childrenTypes: childrenTypes = {{name}}._childrenTypes = { {{~ for child in x.hierarchy_not_abstract_children~}} - '{{child.name}}': {{child.py_full_name}}, + '{{cs_impl_data_type child x}}': {{child.py_full_name}}, {{~end~}} } type = _json_['__type__'] diff --git a/src/Luban.Server/Templates/config/python3_json/bean.tpl b/src/Luban.Server/Templates/config/python3_json/bean.tpl index 3104521..0c7c0e8 100644 --- a/src/Luban.Server/Templates/config/python3_json/bean.tpl +++ b/src/Luban.Server/Templates/config/python3_json/bean.tpl @@ -17,7 +17,7 @@ class {{name}} {{if parent_def_type}}({{parent_def_type.py_full_name}}){{else if if not childrenTypes: childrenTypes = {{name}}._childrenTypes = { {{~ for child in x.hierarchy_not_abstract_children~}} - '{{child.name}}': {{child.py_full_name}}, + '{{cs_impl_data_type child x}}': {{child.py_full_name}}, {{~end~}} } type = _json_['__type__'] diff --git a/src/Luban.Server/Templates/config/rust_json/bean.tpl b/src/Luban.Server/Templates/config/rust_json/bean.tpl index 48ffc59..0d585cd 100644 --- a/src/Luban.Server/Templates/config/rust_json/bean.tpl +++ b/src/Luban.Server/Templates/config/rust_json/bean.tpl @@ -44,7 +44,7 @@ impl {{name}} { let __b = match __js["__type__"].as_str() { Some(type_name) => match type_name { {{~for child in x.hierarchy_not_abstract_children~}} - "{{child.name}}" => {{name}}::{{child.name}}(Box::new({{child.rust_full_name + '::new(&__js)?'}})), + "{{cs_impl_data_type child x}}" => {{name}}::{{child.name}}(Box::new({{child.rust_full_name + '::new(&__js)?'}})), {{~end~}} _ => return Err(LoadError{}) }, diff --git a/src/Luban.Server/Templates/config/typescript_json/bean.tpl b/src/Luban.Server/Templates/config/typescript_json/bean.tpl index 7439e42..489954a 100644 --- a/src/Luban.Server/Templates/config/typescript_json/bean.tpl +++ b/src/Luban.Server/Templates/config/typescript_json/bean.tpl @@ -17,7 +17,7 @@ export {{if x.is_abstract_type}}abstract {{end}}class {{name}}{{if parent_def_ty static constructorFrom(_json_: any): {{name}}{ switch (_json_.__type__) { {{~ for child in x.hierarchy_not_abstract_children~}} - case '{{child.name}}': return new {{child.full_name}}(_json_) + case '{{cs_impl_data_type child x}}': return new {{child.full_name}}(_json_) {{~end~}} default: throw new Error() }