projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed bug #4668 - C# compiler doesn't like decimal in custom attribute values, so...
[mono.git]
/
mcs
/
class
/
System.XML
/
System.Xml.Serialization
/
MapCodeGenerator.cs
diff --git
a/mcs/class/System.XML/System.Xml.Serialization/MapCodeGenerator.cs
b/mcs/class/System.XML/System.Xml.Serialization/MapCodeGenerator.cs
index 168bf04e179d114273cb7db9e6f3bd3283bcc8c1..9f754c727b7fe4f7a8d924c563def3982b95d861 100644
(file)
--- a/
mcs/class/System.XML/System.Xml.Serialization/MapCodeGenerator.cs
+++ b/
mcs/class/System.XML/System.Xml.Serialization/MapCodeGenerator.cs
@@
-44,11
+44,13
@@
namespace System.Xml.Serialization {
internal class MapCodeGenerator {
CodeNamespace codeNamespace;
internal class MapCodeGenerator {
CodeNamespace codeNamespace;
-
CodeCompileUnit codeCompileUnit;
+
//
CodeCompileUnit codeCompileUnit;
CodeAttributeDeclarationCollection includeMetadata;
CodeAttributeDeclarationCollection includeMetadata;
- XmlTypeMapping exportedAnyType
= null
;
+ XmlTypeMapping exportedAnyType;
protected bool includeArrayTypes;
protected bool includeArrayTypes;
+#if NET_2_0
CodeDomProvider codeProvider;
CodeDomProvider codeProvider;
+#endif
CodeGenerationOptions options;
CodeIdentifiers identifiers;
CodeGenerationOptions options;
CodeIdentifiers identifiers;
@@
-57,7
+59,7
@@
namespace System.Xml.Serialization {
public MapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit, CodeGenerationOptions options)
{
public MapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit, CodeGenerationOptions options)
{
-
this.codeCompileUnit = codeCompileUnit;
+
//
this.codeCompileUnit = codeCompileUnit;
this.codeNamespace = codeNamespace;
this.options = options;
this.identifiers = new CodeIdentifiers ();
this.codeNamespace = codeNamespace;
this.options = options;
this.identifiers = new CodeIdentifiers ();
@@
-65,11
+67,11
@@
namespace System.Xml.Serialization {
public MapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit, CodeDomProvider codeProvider, CodeGenerationOptions options, Hashtable mappings)
{
public MapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit, CodeDomProvider codeProvider, CodeGenerationOptions options, Hashtable mappings)
{
-
this.codeCompileUnit = codeCompileUnit;
+
//
this.codeCompileUnit = codeCompileUnit;
this.codeNamespace = codeNamespace;
this.codeNamespace = codeNamespace;
- this.codeProvider = codeProvider;
this.options = options;
#if NET_2_0
this.options = options;
#if NET_2_0
+ this.codeProvider = codeProvider;
this.identifiers = new CodeIdentifiers ((codeProvider.LanguageOptions & LanguageOptions.CaseInsensitive) == 0);
#else
this.identifiers = new CodeIdentifiers ();
this.identifiers = new CodeIdentifiers ((codeProvider.LanguageOptions & LanguageOptions.CaseInsensitive) == 0);
#else
this.identifiers = new CodeIdentifiers ();
@@
-176,7
+178,7
@@
namespace System.Xml.Serialization {
if (map.BaseMap != null && map.BaseMap.TypeData.SchemaType != SchemaTypes.XmlNode)
{
if (map.BaseMap != null && map.BaseMap.TypeData.SchemaType != SchemaTypes.XmlNode)
{
- CodeTypeReference ctr = GetDomType (map.BaseMap.TypeData);
+ CodeTypeReference ctr = GetDomType (map.BaseMap.TypeData
, false
);
codeClass.BaseTypes.Add (ctr);
if (map.BaseMap.IncludeInSchema) {
ExportMapCode (map.BaseMap, false);
codeClass.BaseTypes.Add (ctr);
if (map.BaseMap.IncludeInSchema) {
ExportMapCode (map.BaseMap, false);
@@
-278,12
+280,12
@@
namespace System.Xml.Serialization {
CodeTypeMember CreateFieldMember (CodeTypeDeclaration codeClass, TypeData type, string name)
{
CodeTypeMember CreateFieldMember (CodeTypeDeclaration codeClass, TypeData type, string name)
{
- return CreateFieldMember (codeClass, GetDomType (type), name, System.DBNull.Value, null, null);
+ return CreateFieldMember (codeClass, GetDomType (type
, false
), name, System.DBNull.Value, null, null);
}
CodeTypeMember CreateFieldMember (CodeTypeDeclaration codeClass, XmlTypeMapMember member)
{
}
CodeTypeMember CreateFieldMember (CodeTypeDeclaration codeClass, XmlTypeMapMember member)
{
- return CreateFieldMember (codeClass, GetDomType (member.TypeData), member.Name, member.DefaultValue, member.TypeData, member.Documentation);
+ return CreateFieldMember (codeClass, GetDomType (member.TypeData
, member.RequiresNullable
), member.Name, member.DefaultValue, member.TypeData, member.Documentation);
}
CodeTypeMember CreateFieldMember (CodeTypeDeclaration codeClass, CodeTypeReference type, string name, object defaultValue, TypeData defaultType, string documentation)
}
CodeTypeMember CreateFieldMember (CodeTypeDeclaration codeClass, CodeTypeReference type, string name, object defaultValue, TypeData defaultType, string documentation)
@@
-292,7
+294,7
@@
namespace System.Xml.Serialization {
CodeTypeMember codeProp = null;
if ((options & CodeGenerationOptions.GenerateProperties) > 0) {
CodeTypeMember codeProp = null;
if ((options & CodeGenerationOptions.GenerateProperties) > 0) {
- string field = identifiers.
MakeUnique (CodeIdentifier.MakeCamel (name + "Field")
);
+ string field = identifiers.
AddUnique (CodeIdentifier.MakeCamel (name + "Field"), name
);
codeField = new CodeMemberField (type, field);
codeField.Attributes = MemberAttributes.Private;
codeClass.Members.Add (codeField);
codeField = new CodeMemberField (type, field);
codeField.Attributes = MemberAttributes.Private;
codeClass.Members.Add (codeField);
@@
-381,14
+383,15
@@
namespace System.Xml.Serialization {
foreach (XmlTypeMapElementInfo einfo in member.ElementInfo)
{
foreach (XmlTypeMapElementInfo einfo in member.ElementInfo)
{
- if (ExportExtraElementAttributes (attributes, einfo, defaultNamespace, defaultType))
- continue;
-
- GenerateElementInfoMember (attributes, member, einfo, defaultType, defaultNamespace, addAlwaysAttr, forceUseMemberName);
if (einfo.MappedType != null) {
ExportMapCode (einfo.MappedType, false);
RemoveInclude (einfo.MappedType);
}
if (einfo.MappedType != null) {
ExportMapCode (einfo.MappedType, false);
RemoveInclude (einfo.MappedType);
}
+
+ if (ExportExtraElementAttributes (attributes, einfo, defaultNamespace, defaultType))
+ continue;
+
+ GenerateElementInfoMember (attributes, member, einfo, defaultType, defaultNamespace, addAlwaysAttr, forceUseMemberName | addAlwaysAttr);
}
GenerateElementMember (attributes, member);
}
GenerateElementMember (attributes, member);
@@
-407,8
+410,6
@@
namespace System.Xml.Serialization {
bool DefinedInBaseMap (XmlTypeMapping map, XmlTypeMapMember member)
{
bool DefinedInBaseMap (XmlTypeMapping map, XmlTypeMapMember member)
{
- if (map.ObjectMap is EnumMap) // FIXME: it is almost just a hack. It may have better check items.
- return false;
if (((ClassMap)map.ObjectMap).FindMember (member.Name) != null)
return true;
else if (map.BaseMap != null)
if (((ClassMap)map.ObjectMap).FindMember (member.Name) != null)
return true;
else if (map.BaseMap != null)
@@
-631,14
+632,14
@@
namespace System.Xml.Serialization {
}
#endif
}
#endif
- CodeTypeReference GetDomType (TypeData data)
+ CodeTypeReference GetDomType (TypeData data
, bool requiresNullable
)
{
#if NET_2_0
{
#if NET_2_0
- if (data.IsValueType &&
data.IsNullable
)
+ if (data.IsValueType &&
(data.IsNullable || requiresNullable)
)
return new CodeTypeReference ("System.Nullable", new CodeTypeReference (data.FullTypeName));
#endif
if (data.SchemaType == SchemaTypes.Array)
return new CodeTypeReference ("System.Nullable", new CodeTypeReference (data.FullTypeName));
#endif
if (data.SchemaType == SchemaTypes.Array)
- return new CodeTypeReference (GetDomType (data.ListItemTypeData),1);
+ return new CodeTypeReference (GetDomType (data.ListItemTypeData
, false
),1);
else
return new CodeTypeReference (data.FullTypeName);
}
else
return new CodeTypeReference (data.FullTypeName);
}
@@
-683,15
+684,16
@@
namespace System.Xml.Serialization {
throw new InvalidOperationException ("Type " + typeData.TypeName + " not supported");
IFormattable defaultValueFormattable = defaultValue as IFormattable;
throw new InvalidOperationException ("Type " + typeData.TypeName + " not supported");
IFormattable defaultValueFormattable = defaultValue as IFormattable;
- CodeFieldReferenceExpression fref = new CodeFieldReferenceExpression (new CodeTypeReferenceExpression (GetDomType (typeData)), defaultValueFormattable != null ? defaultValueFormattable.ToString(null, CultureInfo.InvariantCulture) : defaultValue.ToString ());
+ CodeFieldReferenceExpression fref = new CodeFieldReferenceExpression (new CodeTypeReferenceExpression (GetDomType (typeData
, false
)), defaultValueFormattable != null ? defaultValueFormattable.ToString(null, CultureInfo.InvariantCulture) : defaultValue.ToString ());
CodeAttributeArgument arg = new CodeAttributeArgument (fref);
AddCustomAttribute (externalField, "System.ComponentModel.DefaultValue", arg);
CodeAttributeArgument arg = new CodeAttributeArgument (fref);
AddCustomAttribute (externalField, "System.ComponentModel.DefaultValue", arg);
- internalField.InitExpression = fref;
+
//
internalField.InitExpression = fref;
}
else
{
}
else
{
+ defaultValue = defaultValue is decimal ? (object) ('"' + ((decimal) defaultValue).ToString (CultureInfo.InvariantCulture) + '"') : defaultValue;
AddCustomAttribute (externalField, "System.ComponentModel.DefaultValue", GetArg (defaultValue));
AddCustomAttribute (externalField, "System.ComponentModel.DefaultValue", GetArg (defaultValue));
- internalField.InitExpression = new CodePrimitiveExpression (defaultValue);
+
//
internalField.InitExpression = new CodePrimitiveExpression (defaultValue);
}
}
}
}