private void WriteAttrParseMethod(IndentedTextWriter writer, ClassGenInfo classGenInfo) { writer.WriteLine("public override bool ParseAttribute(ref XmlReadBuffer buffer, ulong hash, SpanStr value)"); writer.WriteLine("{"); writer.Indent++; writer.WriteLine("if (base.ParseAttribute(ref buffer, hash, value)) return true;"); writer.WriteLine("switch (hash)"); writer.WriteLine("{"); writer.Indent++; foreach (var field in classGenInfo.m_fields.OrderBy(x => x.m_xmlName.Length)) { writer.WriteLine($"case {HashName(field.m_xmlName)}: {{"); writer.Indent++; if (field.m_splitChar != null) { var typeToRead = ((INamedTypeSymbol)field.m_field.Type).TypeArguments[0].Name; writer.WriteLine($"var lst = new System.Collections.Generic.List<{typeToRead}>();"); writer.WriteLine($"var reader = new StrReader(value, '{field.m_splitChar}');"); var readerMethod = StrGenerator.GetReaderForType(typeToRead); writer.WriteLine("while (reader.HasRemaining())"); writer.WriteLine("{"); writer.Indent++; writer.WriteLine($"lst.Add({readerMethod});"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine($"{field.m_field.Name} = lst;"); } else { var readCommand = GetParseAttributeAction(field); writer.WriteLine($"this.{field.m_field.Name} = {readCommand};"); } writer.WriteLine("return true;"); writer.Indent--; writer.WriteLine("}"); } writer.Indent--; writer.WriteLine("}"); writer.WriteLine("return false;"); writer.Indent--; writer.WriteLine("}"); }
private void WriteAttSerializeMethod(IndentedTextWriter writer, ClassGenInfo classGenInfo) { writer.WriteLine("public override void SerializeAttributes(ref XmlWriteBuffer buffer)"); writer.WriteLine("{"); writer.Indent++; writer.WriteLine("base.SerializeAttributes(ref buffer);"); foreach (var field in classGenInfo.m_fields) { if (field.m_splitChar != null) { var typeToRead = ((INamedTypeSymbol)field.m_field.Type).TypeArguments[0].Name; writer.WriteLine("{"); writer.Indent++; writer.WriteLine($"using var writer = new StrWriter('{field.m_splitChar}');"); writer.WriteLine($"foreach (var val in {field.m_field.Name})"); writer.WriteLine("{"); writer.Indent++; writer.WriteLine($"{StrGenerator.GetWriterForType(typeToRead, "val")};"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine($"buffer.PutAttribute(\"{field.m_xmlName}\", writer.m_builtSpan);"); writer.WriteLine("writer.Dispose();"); writer.Indent--; writer.WriteLine("}"); } else { var writerAction = GetPutAttributeAction(field); writer.WriteLine(writerAction); } } writer.Indent--; writer.WriteLine("}"); }