private void WriteMemberBegin(Member[] members)
{
for (int i = 0; i < members.Length; i++)
{
Member member = (Member)members[i];
if (member.IsArrayLike)
{
string a = member.ArrayName;
string c = "c" + a;
TypeDesc typeDesc = member.Mapping.TypeDesc;
string typeDescFullName = typeDesc.CSharpName;
if (member.Mapping.TypeDesc.IsArray)
{
WriteArrayLocalDecl(typeDesc.CSharpName,
a, "null", typeDesc);
Writer.Write("int ");
Writer.Write(c);
Writer.WriteLine(" = 0;");
if (member.Mapping.ChoiceIdentifier != null)
{
WriteArrayLocalDecl(member.Mapping.ChoiceIdentifier.Mapping.TypeDesc.CSharpName + "[]",
member.ChoiceArrayName, "null",
member.Mapping.ChoiceIdentifier.Mapping.TypeDesc);
Writer.Write("int c");
Writer.Write(member.ChoiceArrayName);
Writer.WriteLine(" = 0;");
}
}
else
{
bool useReflection = typeDesc.UseReflection;
if (member.Source[member.Source.Length - 1] == '(' || member.Source[member.Source.Length - 1] == '{')
{
WriteCreateInstance(typeDescFullName, a, useReflection, typeDesc.CannotNew);
Writer.Write(member.Source);
Writer.Write(a);
if (member.Source[member.Source.Length - 1] == '{')
Writer.WriteLine("});");
else
Writer.WriteLine(");");
}
else
{
if (member.IsList && !member.Mapping.ReadOnly && member.Mapping.TypeDesc.IsNullable)
{
// we need to new the Collections and ArrayLists
Writer.Write("if ((object)(");
Writer.Write(member.Source);
Writer.Write(") == null) ");
if (!member.Mapping.TypeDesc.HasDefaultConstructor)
{
Writer.Write("throw CreateReadOnlyCollectionException(");
WriteQuotedCSharpString(member.Mapping.TypeDesc.CSharpName);
Writer.WriteLine(");");
}
else
{
Writer.Write(member.Source);
Writer.Write(" = ");
Writer.Write(RaCodeGen.GetStringForCreateInstance(typeDescFullName, useReflection, typeDesc.CannotNew, true));
Writer.WriteLine(";");
}
}
WriteLocalDecl(typeDescFullName, a, member.Source, useReflection);
}
}
}
}
}