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
index c8c71c989c32f2c387c995399f4a469a124fe664..9f754c727b7fe4f7a8d924c563def3982b95d861 100644 (file)
@@ -44,11 +44,13 @@ namespace System.Xml.Serialization {
        internal class MapCodeGenerator {
 
                CodeNamespace codeNamespace;
-               CodeCompileUnit codeCompileUnit;
+//             CodeCompileUnit codeCompileUnit;
                CodeAttributeDeclarationCollection includeMetadata;
-               XmlTypeMapping exportedAnyType = null;
+               XmlTypeMapping exportedAnyType;
                protected bool includeArrayTypes;
+#if NET_2_0            
                CodeDomProvider codeProvider;
+#endif         
                CodeGenerationOptions options;
                CodeIdentifiers identifiers;
 
@@ -57,7 +59,7 @@ namespace System.Xml.Serialization {
 
                public MapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit, CodeGenerationOptions options)
                {
-                       this.codeCompileUnit = codeCompileUnit;
+//                     this.codeCompileUnit = codeCompileUnit;
                        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)
                {
-                       this.codeCompileUnit = codeCompileUnit;
+//                     this.codeCompileUnit = codeCompileUnit;
                        this.codeNamespace = codeNamespace;
-                       this.codeProvider = codeProvider;
                        this.options = options;
 #if NET_2_0
+                       this.codeProvider = codeProvider;
                        this.identifiers = new CodeIdentifiers ((codeProvider.LanguageOptions & LanguageOptions.CaseInsensitive) == 0);
 #else
                        this.identifiers = new CodeIdentifiers ();
@@ -389,7 +391,7 @@ namespace System.Xml.Serialization {
                                if (ExportExtraElementAttributes (attributes, einfo, defaultNamespace, defaultType))
                                        continue;
 
-                               GenerateElementInfoMember (attributes, member, einfo, defaultType, defaultNamespace, addAlwaysAttr, forceUseMemberName);
+                               GenerateElementInfoMember (attributes, member, einfo, defaultType, defaultNamespace, addAlwaysAttr, forceUseMemberName | addAlwaysAttr);
                        }
 
                        GenerateElementMember (attributes, member);
@@ -685,12 +687,13 @@ namespace System.Xml.Serialization {
                                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);
-                               internalField.InitExpression = fref;
+                               //internalField.InitExpression = fref;
                        }
                        else
                        {
+                               defaultValue = defaultValue is decimal ? (object) ('"' + ((decimal) defaultValue).ToString (CultureInfo.InvariantCulture) + '"') : defaultValue;
                                AddCustomAttribute (externalField, "System.ComponentModel.DefaultValue", GetArg (defaultValue));
-                               internalField.InitExpression = new CodePrimitiveExpression (defaultValue);
+                               //internalField.InitExpression = new CodePrimitiveExpression (defaultValue);
                        }
                }