diff --git a/CodeGenerator/Program.cs b/CodeGenerator/Program.cs index db59f98..7f10cd1 100644 --- a/CodeGenerator/Program.cs +++ b/CodeGenerator/Program.cs @@ -135,22 +135,13 @@ namespace CodeGenerator { return size; } - private static int AddArrayField(ref CodeTypeDeclaration ctd, DnaField field, int index, int totalSize) - { + private static int AddArrayField(ref CodeTypeDeclaration ctd, DnaField field, int index, int totalSize) { Log($"Generating Array field {field.Name}"); var cmf = CreateArrayMemberField(field); - var attribute = new CodeAttributeDeclaration("DNAArrayAttribute"); - attribute.Arguments.AddRange(new CodeAttributeArgumentCollection() { - new(new CodePrimitiveExpression(totalSize)), - new(new CodePrimitiveExpression(field.Type)), - new(new CodePrimitiveExpression(index)), - new(new CodePrimitiveExpression(field.Name)), - new(new CodePrimitiveExpression(field.Type)), - new(new CodePrimitiveExpression(0)) - }); + var attribute = GenerateDnaArrayAttribute(index, field, field.M_Parent.M_Parent, totalSize, out int size); cmf.CustomAttributes.Add(attribute); ctd.Members.Add(cmf); - return 0; + return size; } private static int AddListField(ref CodeTypeDeclaration ctd, int totalSize, int index, int listLenghtOffset, @@ -202,8 +193,10 @@ namespace CodeGenerator { ns.Types.Add(ctd); //TODO: when encountering a list, run trough the fields to find a count/lenght or similar data. + // ReSharper disable InlineOutVariableDeclaration List normalFields; //Fields that are not lists nor lengths of lists List<(DnaField, DnaField)> listFields; //Fields that are lists, and their corresponding length fields + // ReSharper restore InlineOutVariableDeclaration //filter the fields we want to include in the class minus the lists FilterFields(type.Fields, out normalFields, out listFields); @@ -219,7 +212,7 @@ namespace CodeGenerator { //Check if the field is a normal field or a list field if (normalFields.Contains(field) && !listFields.Select(f => f.Item2).Contains(field)) { //check if the field is an array - if (field.Name.Contains("[")) + if (field.Name.Contains('[')) totalSize += AddArrayField(ref ctd, field, index, totalSize); else totalSize += AddNormalField(field, ref ctd, index, totalSize); @@ -411,11 +404,9 @@ namespace CodeGenerator { //TODO: use AttributeBuilder inside here private static CodeAttributeDeclaration GenerateDnaFieldAttribute(int index, DnaField field, Dna1Body body, int offset, out int size) { - - string t; + var isPointer = false; size = body.Lengths[field.IdxType]; - - bool isPointer = false; + string t = field.Type; if (field.Name.StartsWith('*')) { @@ -423,27 +414,6 @@ namespace CodeGenerator { isPointer = true; } - if (field.Name.Contains('[')) { - CodeMemberField amf = CreateArrayMemberField(field); - var sb = new StringBuilder(); - sb.Append(amf.Type.BaseType); - sb.Append("["); - for(int i=1; i