private CodeAttributeArgument[] GetDefaultValueArguments(PrimitiveMapping mapping, object value, out CodeExpression initExpression)
{
initExpression = null;
if (value == null)
{
return(null);
}
CodeExpression left = null;
CodeExpression expression2 = null;
Type type = value.GetType();
CodeAttributeArgument[] argumentArray = null;
if (mapping is EnumMapping)
{
if (((EnumMapping)mapping).IsFlags)
{
string[] strArray = ((string)value).Split(null);
for (int i = 0; i < strArray.Length; i++)
{
if (strArray[i].Length != 0)
{
CodeExpression right = new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(mapping.TypeDesc.FullName), strArray[i]);
if (left != null)
{
left = new CodeBinaryOperatorExpression(left, CodeBinaryOperatorType.BitwiseOr, right);
}
else
{
left = right;
}
}
}
}
else
{
left = new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(mapping.TypeDesc.FullName), (string)value);
}
initExpression = left;
argumentArray = new CodeAttributeArgument[] { new CodeAttributeArgument(left) };
}
else if (((type == typeof(bool)) || (type == typeof(int))) || ((type == typeof(string)) || (type == typeof(double))))
{
initExpression = left = new CodePrimitiveExpression(value);
argumentArray = new CodeAttributeArgument[] { new CodeAttributeArgument(left) };
}
else if (((type == typeof(short)) || (type == typeof(long))) || (((type == typeof(float)) || (type == typeof(byte))) || (type == typeof(decimal))))
{
left = new CodePrimitiveExpression(Convert.ToString(value, NumberFormatInfo.InvariantInfo));
expression2 = new CodeTypeOfExpression(type.FullName);
argumentArray = new CodeAttributeArgument[] { new CodeAttributeArgument(expression2), new CodeAttributeArgument(left) };
initExpression = new CodeCastExpression(type.FullName, new CodePrimitiveExpression(value));
}
else if (((type == typeof(sbyte)) || (type == typeof(ushort))) || ((type == typeof(uint)) || (type == typeof(ulong))))
{
value = CodeExporter.PromoteType(type, value);
left = new CodePrimitiveExpression(Convert.ToString(value, NumberFormatInfo.InvariantInfo));
expression2 = new CodeTypeOfExpression(type.FullName);
argumentArray = new CodeAttributeArgument[] { new CodeAttributeArgument(expression2), new CodeAttributeArgument(left) };
initExpression = new CodeCastExpression(type.FullName, new CodePrimitiveExpression(value));
}
else if (type == typeof(DateTime))
{
string str;
long ticks;
DateTime time = (DateTime)value;
if (mapping.TypeDesc.FormatterName == "Date")
{
str = XmlCustomFormatter.FromDate(time);
DateTime time2 = new DateTime(time.Year, time.Month, time.Day);
ticks = time2.Ticks;
}
else if (mapping.TypeDesc.FormatterName == "Time")
{
str = XmlCustomFormatter.FromDateTime(time);
ticks = time.Ticks;
}
else
{
str = XmlCustomFormatter.FromDateTime(time);
ticks = time.Ticks;
}
left = new CodePrimitiveExpression(str);
expression2 = new CodeTypeOfExpression(type.FullName);
argumentArray = new CodeAttributeArgument[] { new CodeAttributeArgument(expression2), new CodeAttributeArgument(left) };
initExpression = new CodeObjectCreateExpression(new CodeTypeReference(typeof(DateTime)), new CodeExpression[] { new CodePrimitiveExpression(ticks) });
}
else if (type == typeof(Guid))
{
left = new CodePrimitiveExpression(Convert.ToString(value, NumberFormatInfo.InvariantInfo));
expression2 = new CodeTypeOfExpression(type.FullName);
argumentArray = new CodeAttributeArgument[] { new CodeAttributeArgument(expression2), new CodeAttributeArgument(left) };
initExpression = new CodeObjectCreateExpression(new CodeTypeReference(typeof(Guid)), new CodeExpression[] { left });
}
if ((mapping.TypeDesc.FullName != type.ToString()) && !(mapping is EnumMapping))
{
initExpression = new CodeCastExpression(mapping.TypeDesc.FullName, initExpression);
}
return(argumentArray);
}