From ba2c5c56e7fab146a145fc49f12d43592a2744f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carson=20-=20=E5=AE=9D=E9=B1=BC?= <44496710+kteong1012@users.noreply.github.com> Date: Wed, 14 Dec 2022 09:56:04 +0800 Subject: [PATCH] =?UTF-8?q?[new]=20=E5=A2=9E=E5=8A=A0java=E5=AF=B9?= =?UTF-8?q?=E5=AE=B9=E5=99=A8ref=E7=9A=84=E6=94=AF=E6=8C=81=20(#34)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [new] 增加java对容器ref的支持 --- src/Luban.Job.Cfg/Source/Defs/DefField.cs | 19 +++++++-- .../Source/Utils/TTypeTemplateExtends.cs | 42 +++++++++++++++---- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/Luban.Job.Cfg/Source/Defs/DefField.cs b/src/Luban.Job.Cfg/Source/Defs/DefField.cs index b92f8ae..a914dd1 100644 --- a/src/Luban.Job.Cfg/Source/Defs/DefField.cs +++ b/src/Luban.Job.Cfg/Source/Defs/DefField.cs @@ -63,8 +63,9 @@ namespace Luban.Job.Cfg.Defs { return Ref.GenRef; } - // 特殊处理, 目前只有c#支持.而这个属性已经被多种语言模板引用了,故单独处理一下 - if (DefAssemblyBase.LocalAssebmly.CurrentLanguage != Common.ELanguage.CS) + // 特殊处理, 目前只有c#和java支持.而这个属性已经被多种语言模板引用了,故单独处理一下 + if (DefAssemblyBase.LocalAssebmly.CurrentLanguage != Common.ELanguage.CS + && DefAssemblyBase.LocalAssebmly.CurrentLanguage != Common.ELanguage.JAVA) { return false; } @@ -109,8 +110,18 @@ namespace Luban.Job.Cfg.Defs { get { - var table = Assembly.GetCfgTable(Ref.FirstTable); - return $"{table.ValueTType.Apply(JavaDefineTypeName.Ins)} {RefVarName};"; + if (Ref != null) + { + return $"{RefType.Apply(JavaDefineTypeName.Ins)} {RefVarName};"; + } + else if (ElementRef != null) + { + return $"{ElementRefType.Apply(JavaDefineTypeName.Ins)} {RefVarName};"; + } + else + { + throw new NotSupportedException(); + } } } diff --git a/src/Luban.Job.Cfg/Source/Utils/TTypeTemplateExtends.cs b/src/Luban.Job.Cfg/Source/Utils/TTypeTemplateExtends.cs index a7acd9b..469baed 100644 --- a/src/Luban.Job.Cfg/Source/Utils/TTypeTemplateExtends.cs +++ b/src/Luban.Job.Cfg/Source/Utils/TTypeTemplateExtends.cs @@ -86,16 +86,16 @@ namespace Luban.Job.Cfg.Utils { case TArray: { - return $@"{{ int __n = {name}.Length; {table.FullName} __table = ({table.FullName})_tables[""{ tableName}""]; this.{refVarName} = new {table.ValueTType.Apply(CsDefineTypeName.Ins)}[__n]; for(int i = 0 ; i < __n ; i++) {{ this.{refVarName}[i] = __table.GetOrDefault({name}[i]); }} }}"; + return $@"{{ int __n = {name}.Length; {table.FullName} __table = ({table.FullName})_tables[""{tableName}""]; this.{refVarName} = new {table.ValueTType.Apply(CsDefineTypeName.Ins)}[__n]; for(int i = 0 ; i < __n ; i++) {{ this.{refVarName}[i] = __table.GetOrDefault({name}[i]); }} }}"; } case TList: case TSet: { - return $@"{{ {table.FullName} __table = ({table.FullName})_tables[""{ tableName}""]; this.{refVarName} = new {field.ElementRefType.Apply(CsDefineTypeName.Ins)}(); foreach(var __e in {name}) {{ this.{refVarName}.Add(__table.GetOrDefault(__e)); }} }}"; + return $@"{{ {table.FullName} __table = ({table.FullName})_tables[""{tableName}""]; this.{refVarName} = new {field.ElementRefType.Apply(CsDefineTypeName.Ins)}(); foreach(var __e in {name}) {{ this.{refVarName}.Add(__table.GetOrDefault(__e)); }} }}"; } case TMap: { - return $@"{{ {table.FullName} __table = ({table.FullName})_tables[""{ tableName}""]; this.{refVarName} = new {field.ElementRefType.Apply(CsDefineTypeName.Ins)}(); foreach(var __e in {name}) {{ this.{refVarName}.Add(__e.Key, __table.GetOrDefault(__e.Value)); }} }}"; + return $@"{{ {table.FullName} __table = ({table.FullName})_tables[""{tableName}""]; this.{refVarName} = new {field.ElementRefType.Apply(CsDefineTypeName.Ins)}(); foreach(var __e in {name}) {{ this.{refVarName}.Add(__e.Key, __table.GetOrDefault(__e.Value)); }} }}"; } default: throw new NotSupportedException($"type:'{field.CType.TypeName}' not support ref"); } @@ -128,15 +128,41 @@ namespace Luban.Job.Cfg.Utils { var refVarName = field.RefVarName; var name = field.ConventionName; - var tableName = field.Ref.FirstTable; - var table = field.Assembly.GetCfgTable(field.Ref.FirstTable); - if (field.IsNullable) + + if (field.Ref != null) { - return $"this.{refVarName} = this.{name} != null ? (({table.FullNameWithTopModule})_tables.get(\"{tableName}\")).get({name}) : null;"; + var tableName = field.Ref.FirstTable; + var table = field.Assembly.GetCfgTable(tableName); + if (field.IsNullable) + { + return $"this.{refVarName} = this.{name} != null ? (({table.FullNameWithTopModule})_tables.get(\"{tableName}\")).get({name}) : null;"; + } + else + { + return $"this.{refVarName} = (({table.FullNameWithTopModule})_tables.get(\"{tableName}\")).get({name});"; + } } else { - return $"this.{refVarName} = (({table.FullNameWithTopModule})_tables.get(\"{tableName}\")).get({name});"; + var tableName = field.ElementRef.FirstTable; + var table = field.Assembly.GetCfgTable(tableName); + switch (field.CType) + { + case TArray: + { + return $@"{{ int __n = {name}.length; {table.FullNameWithTopModule} __table = ({table.FullNameWithTopModule})_tables.get(""{tableName}""); this.{refVarName} = new {table.ValueTType.Apply(JavaDefineTypeName.Ins)}[__n]; for(int i = 0 ; i < __n ; i++) {{ this.{refVarName}[i] = __table.get({name}[i]); }} }}"; + } + case TList: + case TSet: + { + return $@"{{ {table.FullNameWithTopModule} __table = ({table.FullNameWithTopModule})_tables.get(""{tableName}""); this.{refVarName} = new {field.ElementRefType.Apply(JavaDefineTypeName.Ins)}(); for({field.CType.ElementType.TypeName} __e : {name}) {{ this.{refVarName}.add(__table.get(__e)); }} }}"; + } + case TMap map: + { + return $@"{{ {table.FullNameWithTopModule} __table = ({table.FullNameWithTopModule})_tables.get(""{tableName}""); this.{refVarName} = new {field.ElementRefType.Apply(JavaDefineTypeName.Ins)}(); for(Map.Entry<{map.KeyType.TypeName},{map.ValueType.TypeName}> __e : {name}.entrySet()) {{ {map.KeyType.TypeName} __eKey = entry.getKey(); {map.ValueType.TypeName} __eValue = entry.getValue(); this.{refVarName}.add(__eKey, __table.get(__eValue)); }} }}"; + } + default: throw new NotSupportedException($"type:'{field.CType.TypeName}' not support ref"); + } } }