private void WriteEnumMethod(EnumMapping mapping)
{
string tableName = null;
if (mapping.IsFlags)
tableName = WriteHashtable(mapping, mapping.TypeDesc.Name);
string methodName = (string)MethodNames[mapping];
Writer.WriteLine();
bool useReflection = mapping.TypeDesc.UseReflection;
string fullTypeName = mapping.TypeDesc.CSharpName;
if (mapping.IsSoap)
{
Writer.Write("object");
Writer.Write(" ");
Writer.Write(methodName);
Writer.WriteLine("() {");
Writer.Indent++;
Writer.WriteLine("string s = Reader.ReadElementString();");
}
else
{
Writer.Write(useReflection ? "object" : fullTypeName);
Writer.Write(" ");
Writer.Write(methodName);
Writer.WriteLine("(string s) {");
Writer.Indent++;
}
ConstantMapping[] constants = mapping.Constants;
if (mapping.IsFlags)
{
if (useReflection)
{
Writer.Write("return ");
Writer.Write(typeof(Enum).FullName);
Writer.Write(".ToObject(");
Writer.Write(RaCodeGen.GetStringForTypeof(fullTypeName, useReflection));
Writer.Write(", ToEnum(s, ");
Writer.Write(tableName);
Writer.Write(", ");
WriteQuotedCSharpString(fullTypeName);
Writer.WriteLine("));");
}
else
{
Writer.Write("return (");
Writer.Write(fullTypeName);
Writer.Write(")ToEnum(s, ");
Writer.Write(tableName);
Writer.Write(", ");
WriteQuotedCSharpString(fullTypeName);
Writer.WriteLine(");");
}
}
else
{
Writer.WriteLine("switch (s) {");
Writer.Indent++;
Hashtable cases = new Hashtable();
for (int i = 0; i < constants.Length; i++)
{
ConstantMapping c = constants[i];
CodeIdentifier.CheckValidIdentifier(c.Name);
if (cases[c.XmlName] == null)
{
Writer.Write("case ");
WriteQuotedCSharpString(c.XmlName);
Writer.Write(": return ");
Writer.Write(RaCodeGen.GetStringForEnumMember(fullTypeName, c.Name, useReflection));
Writer.WriteLine(";");
cases[c.XmlName] = c.XmlName;
}
}
Writer.Write("default: throw CreateUnknownConstantException(s, ");
Writer.Write(RaCodeGen.GetStringForTypeof(fullTypeName, useReflection));
Writer.WriteLine(");");
Writer.Indent--;
Writer.WriteLine("}");
}
Writer.Indent--;
Writer.WriteLine("}");
}