Inheritance: TypeMapping
Esempio n. 1
0
        private NullableMapping CreateNullableMapping(TypeMapping baseMapping, Type type)
        {
            NullableMapping mapping2;
            TypeDesc        nullableTypeDesc = baseMapping.TypeDesc.GetNullableTypeDesc(type);
            TypeMapping     mapping          = (TypeMapping)this.nullables[baseMapping.TypeName, baseMapping.Namespace];

            if (mapping != null)
            {
                if (mapping is NullableMapping)
                {
                    mapping2 = (NullableMapping)mapping;
                    if ((!(mapping2.BaseMapping is PrimitiveMapping) || !(baseMapping is PrimitiveMapping)) && (mapping2.BaseMapping != baseMapping))
                    {
                        throw new InvalidOperationException(Res.GetString("XmlTypesDuplicate", new object[] { nullableTypeDesc.FullName, mapping.TypeDesc.FullName, nullableTypeDesc.Name, mapping.Namespace }));
                    }
                    return(mapping2);
                }
                if (!(baseMapping is PrimitiveMapping))
                {
                    throw new InvalidOperationException(Res.GetString("XmlTypesDuplicate", new object[] { nullableTypeDesc.FullName, mapping.TypeDesc.FullName, nullableTypeDesc.Name, mapping.Namespace }));
                }
            }
            mapping2 = new NullableMapping {
                BaseMapping     = baseMapping,
                TypeDesc        = nullableTypeDesc,
                TypeName        = baseMapping.TypeName,
                Namespace       = baseMapping.Namespace,
                IncludeInSchema = false
            };
            this.nullables.Add(baseMapping.TypeName, mapping2.Namespace, mapping2);
            this.typeScope.AddTypeMapping(mapping2);
            return(mapping2);
        }
Esempio n. 2
0
        object WriteNullableMethod(NullableMapping nullableMapping, bool checkType, string defaultNamespace)
        {
            object o = Activator.CreateInstance(nullableMapping.TypeDesc.Type);

            if (!ReadNull())
            {
                ElementAccessor element = new ElementAccessor();
                element.Mapping    = nullableMapping.BaseMapping;
                element.Any        = false;
                element.IsNullable = nullableMapping.BaseMapping.TypeDesc.IsNullable;

                WriteElement(ref o, null, element, null, false, false, false, defaultNamespace);
            }

            return(o);
        }
Esempio n. 3
0
        private NullableMapping CreateNullableMapping(TypeMapping baseMapping, Type type)
        {
            TypeDesc        typeDesc        = baseMapping.TypeDesc.GetNullableTypeDesc(type);
            TypeMapping     existingMapping = (TypeMapping)_nullables[baseMapping.TypeName, baseMapping.Namespace];
            NullableMapping mapping;

            if (existingMapping != null)
            {
                if (existingMapping is NullableMapping)
                {
                    mapping = (NullableMapping)existingMapping;
                    if (mapping.BaseMapping is PrimitiveMapping && baseMapping is PrimitiveMapping)
                    {
                        return(mapping);
                    }
                    else if (mapping.BaseMapping == baseMapping)
                    {
                        return(mapping);
                    }
                    else
                    {
                        throw new InvalidOperationException(SR.Format(SR.XmlTypesDuplicate, typeDesc.FullName, existingMapping.TypeDesc.FullName, typeDesc.Name, existingMapping.Namespace));
                    }
                }
                else if (!(baseMapping is PrimitiveMapping))
                {
                    throw new InvalidOperationException(SR.Format(SR.XmlTypesDuplicate, typeDesc.FullName, existingMapping.TypeDesc.FullName, typeDesc.Name, existingMapping.Namespace));
                }
            }
            mapping                 = new NullableMapping();
            mapping.BaseMapping     = baseMapping;
            mapping.TypeDesc        = typeDesc;
            mapping.TypeName        = baseMapping.TypeName;
            mapping.Namespace       = baseMapping.Namespace;
            mapping.IncludeInSchema = false; //baseMapping.IncludeInSchema;
            _nullables.Add(baseMapping.TypeName, mapping.Namespace, mapping);
            _typeScope.AddTypeMapping(mapping);
            return(mapping);
        }
 NullableMapping CreateNullableMapping(TypeMapping baseMapping, TypeDesc typeDesc) {
     TypeMapping existingMapping = (TypeMapping)types[typeDesc.Name, baseMapping.Namespace];
     NullableMapping mapping;
     if (existingMapping != null) {
         if (existingMapping is NullableMapping) {
             mapping = (NullableMapping)existingMapping;
             if (mapping.BaseMapping is PrimitiveMapping && baseMapping is PrimitiveMapping)
                 return mapping;
             else if (mapping.BaseMapping == baseMapping) {
                 return mapping;
             }
             else {
                 throw new InvalidOperationException(Res.GetString(Res.XmlTypesDuplicate, typeDesc.FullName, existingMapping.TypeDesc.FullName, typeDesc.Name, existingMapping.Namespace));
             }
         }
         else if (!(baseMapping is PrimitiveMapping)){
             throw new InvalidOperationException(Res.GetString(Res.XmlTypesDuplicate, typeDesc.FullName, existingMapping.TypeDesc.FullName, typeDesc.Name, existingMapping.Namespace));
         }
     }
     mapping = new NullableMapping();
     mapping.BaseMapping = baseMapping;
     mapping.TypeDesc = typeDesc;
     mapping.TypeName = baseMapping.TypeName;
     mapping.Namespace = baseMapping.Namespace;
     mapping.IncludeInSchema = false; //baseMapping.IncludeInSchema;
     types.Add(typeDesc.Name, baseMapping.Namespace, mapping);
     typeScope.AddTypeMapping(mapping);
     return mapping;
 }
        void WriteNullableMethod(NullableMapping nullableMapping) {
            string methodName = (string)MethodNames[nullableMapping];
            bool useReflection = nullableMapping.BaseMapping.TypeDesc.UseReflection;
            string typeName = useReflection ? "object" : nullableMapping.TypeDesc.CSharpName;
            Writer.WriteLine();

            Writer.Write(typeName);
            Writer.Write(" ");
            Writer.Write(methodName);
            Writer.WriteLine("(bool checkType) {");
            Writer.Indent++;

            Writer.Write(typeName);
            Writer.Write(" o = ");

            if (useReflection) {
                Writer.Write("null");
            }
            else {
                Writer.Write("default(");
                Writer.Write(typeName);
                Writer.Write(")");
            }
            Writer.WriteLine(";");

            Writer.WriteLine("if (ReadNull())");
            Writer.Indent++;

            Writer.WriteLine("return o;");
            Writer.Indent--;

            ElementAccessor element = new ElementAccessor();
            element.Mapping = nullableMapping.BaseMapping;
            element.Any = false;
            element.IsNullable = nullableMapping.BaseMapping.TypeDesc.IsNullable;

            WriteElement("o", null, null, element, null, null, false, false, -1, -1);
            Writer.WriteLine("return o;");

            Writer.Indent--;
            Writer.WriteLine("}");
        }
        NullableMapping CreateNullableMapping(TypeMapping baseMapping, Type type) {
            TypeDesc typeDesc = baseMapping.TypeDesc.GetNullableTypeDesc(type);
            TypeMapping existingMapping;
            if (!baseMapping.IsAnonymousType)
            {
                existingMapping = (TypeMapping)nullables[baseMapping.TypeName, baseMapping.Namespace];
            }
            else
            {
                existingMapping = (TypeMapping)anonymous[type];
            }

            NullableMapping mapping;
            if (existingMapping != null) {
                if (existingMapping is NullableMapping) {
                    mapping = (NullableMapping)existingMapping;
                    if (mapping.BaseMapping is PrimitiveMapping && baseMapping is PrimitiveMapping)
                        return mapping;
                    else if (mapping.BaseMapping == baseMapping) {
                        return mapping;
                    }
                    else {
                        throw new InvalidOperationException(Res.GetString(Res.XmlTypesDuplicate, typeDesc.FullName, existingMapping.TypeDesc.FullName, typeDesc.Name, existingMapping.Namespace));
                    }
                }
                else {
                    throw new InvalidOperationException(Res.GetString(Res.XmlTypesDuplicate, typeDesc.FullName, existingMapping.TypeDesc.FullName, typeDesc.Name, existingMapping.Namespace));
                }
            }
            mapping = new NullableMapping();
            mapping.BaseMapping = baseMapping;
            mapping.TypeDesc = typeDesc;
            mapping.TypeName = baseMapping.TypeName;
            mapping.Namespace = baseMapping.Namespace;
            mapping.IncludeInSchema = baseMapping.IncludeInSchema;
            if (!baseMapping.IsAnonymousType)
            {
            nullables.Add(baseMapping.TypeName, baseMapping.Namespace, mapping);
            }
            else
            {
                anonymous[type] = mapping;
            }
            
            typeScope.AddTypeMapping(mapping);
            return mapping;
        }
        void WriteNullableMethod(NullableMapping nullableMapping) {
            string methodName = (string)MethodNames[nullableMapping];
            ilg = new CodeGenerator(this.typeBuilder);
            ilg.BeginMethod(
                nullableMapping.TypeDesc.Type,
                GetMethodBuilder(methodName),
                new Type[] { typeof(Boolean) },
                new string[] { "checkType" },
                CodeGenerator.PrivateMethodAttributes);

            LocalBuilder oLoc = ilg.DeclareLocal(nullableMapping.TypeDesc.Type, "o");

            ilg.LoadAddress(oLoc);
            ilg.InitObj(nullableMapping.TypeDesc.Type);
            MethodInfo XmlSerializationReader_ReadNull = typeof(XmlSerializationReader).GetMethod(
                "ReadNull",
                CodeGenerator.InstanceBindingFlags,
                null,
                CodeGenerator.EmptyTypeArray,
                null);
            ilg.Ldarg(0);
            ilg.Call(XmlSerializationReader_ReadNull);
            ilg.If();
            {
                ilg.Ldloc(oLoc);
                ilg.Stloc(ilg.ReturnLocal);
                ilg.Br(ilg.ReturnLabel);
            }
            ilg.EndIf();

            ElementAccessor element = new ElementAccessor();
            element.Mapping = nullableMapping.BaseMapping;
            element.Any = false;
            element.IsNullable = nullableMapping.BaseMapping.TypeDesc.IsNullable;

            WriteElement("o", null, null, element, null, null, false, false, -1, -1);
            ilg.Ldloc(oLoc);
            ilg.Stloc(ilg.ReturnLocal);
            ilg.Br(ilg.ReturnLabel);

            ilg.MarkLabel(ilg.ReturnLabel);
            ilg.Ldloc(ilg.ReturnLocal);
            ilg.EndMethod();
        }
 private NullableMapping CreateNullableMapping(TypeMapping baseMapping, Type type)
 {
     TypeMapping mapping;
     NullableMapping mapping2;
     TypeDesc nullableTypeDesc = baseMapping.TypeDesc.GetNullableTypeDesc(type);
     if (!baseMapping.IsAnonymousType)
     {
         mapping = (TypeMapping) this.nullables[baseMapping.TypeName, baseMapping.Namespace];
     }
     else
     {
         mapping = (TypeMapping) this.anonymous[type];
     }
     if (mapping != null)
     {
         if (!(mapping is NullableMapping))
         {
             throw new InvalidOperationException(Res.GetString("XmlTypesDuplicate", new object[] { nullableTypeDesc.FullName, mapping.TypeDesc.FullName, nullableTypeDesc.Name, mapping.Namespace }));
         }
         mapping2 = (NullableMapping) mapping;
         if ((!(mapping2.BaseMapping is PrimitiveMapping) || !(baseMapping is PrimitiveMapping)) && (mapping2.BaseMapping != baseMapping))
         {
             throw new InvalidOperationException(Res.GetString("XmlTypesDuplicate", new object[] { nullableTypeDesc.FullName, mapping.TypeDesc.FullName, nullableTypeDesc.Name, mapping.Namespace }));
         }
         return mapping2;
     }
     mapping2 = new NullableMapping {
         BaseMapping = baseMapping,
         TypeDesc = nullableTypeDesc,
         TypeName = baseMapping.TypeName,
         Namespace = baseMapping.Namespace,
         IncludeInSchema = baseMapping.IncludeInSchema
     };
     if (!baseMapping.IsAnonymousType)
     {
         this.nullables.Add(baseMapping.TypeName, baseMapping.Namespace, mapping2);
     }
     else
     {
         this.anonymous[type] = mapping2;
     }
     this.typeScope.AddTypeMapping(mapping2);
     return mapping2;
 }
 private void WriteNullableMethod(NullableMapping nullableMapping)
 {
     string s = (string) base.MethodNames[nullableMapping];
     bool useReflection = nullableMapping.BaseMapping.TypeDesc.UseReflection;
     string str2 = useReflection ? "object" : nullableMapping.TypeDesc.CSharpName;
     base.Writer.WriteLine();
     base.Writer.Write(str2);
     base.Writer.Write(" ");
     base.Writer.Write(s);
     base.Writer.WriteLine("(bool checkType) {");
     IndentedWriter writer = base.Writer;
     writer.Indent++;
     base.Writer.Write(str2);
     base.Writer.Write(" o = ");
     if (useReflection)
     {
         base.Writer.Write("null");
     }
     else
     {
         base.Writer.Write("default(");
         base.Writer.Write(str2);
         base.Writer.Write(")");
     }
     base.Writer.WriteLine(";");
     base.Writer.WriteLine("if (ReadNull())");
     IndentedWriter writer2 = base.Writer;
     writer2.Indent++;
     base.Writer.WriteLine("return o;");
     IndentedWriter writer3 = base.Writer;
     writer3.Indent--;
     ElementAccessor element = new ElementAccessor {
         Mapping = nullableMapping.BaseMapping,
         Any = false,
         IsNullable = nullableMapping.BaseMapping.TypeDesc.IsNullable
     };
     this.WriteElement("o", null, null, element, null, null, false, false, -1, -1);
     base.Writer.WriteLine("return o;");
     IndentedWriter writer4 = base.Writer;
     writer4.Indent--;
     base.Writer.WriteLine("}");
 }