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); }
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); }
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("}"); }