Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ WriteMemberElementsIf()

void System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteMemberElementsIf ( Member[] members,
Member anyElement,
string elementElseString,
string checkTypeSource )
inlineprivate

Definition at line 2194 of file XmlSerializationReaderCodeGen.cs.

2195 {
2196 bool flag = checkTypeSource != null && checkTypeSource.Length > 0;
2197 int num = 0;
2198 bool flag2 = IsSequence(members);
2199 if (flag2)
2200 {
2201 base.Writer.WriteLine("switch (state) {");
2202 }
2203 int num2 = 0;
2204 foreach (Member member in members)
2205 {
2206 if (member.Mapping.Xmlns != null || member.Mapping.Ignore || (flag2 && (member.Mapping.IsText || member.Mapping.IsAttribute)))
2207 {
2208 continue;
2209 }
2210 bool flag3 = true;
2211 ChoiceIdentifierAccessor choiceIdentifier = member.Mapping.ChoiceIdentifier;
2212 ElementAccessor[] elements = member.Mapping.Elements;
2213 for (int j = 0; j < elements.Length; j++)
2214 {
2215 ElementAccessor elementAccessor = elements[j];
2216 string ns = ((elementAccessor.Form == XmlSchemaForm.Qualified) ? elementAccessor.Namespace : "");
2217 if (!flag2 && elementAccessor.Any && (elementAccessor.Name == null || elementAccessor.Name.Length == 0))
2218 {
2219 continue;
2220 }
2221 if (!flag2)
2222 {
2223 if (flag3 && num == 0)
2224 {
2225 base.Writer.WriteLine("do {");
2226 base.Writer.Indent++;
2227 }
2228 }
2229 else if (!flag3 || (!flag2 && num > 0))
2230 {
2231 base.Writer.Write("else ");
2232 }
2233 else if (flag2)
2234 {
2235 base.Writer.Write("case ");
2236 base.Writer.Write(num2.ToString(CultureInfo.InvariantCulture));
2237 base.Writer.WriteLine(":");
2238 base.Writer.Indent++;
2239 }
2240 num++;
2241 flag3 = false;
2242 base.Writer.Write("if (");
2243 if (member.ParamsReadSource != null)
2244 {
2245 base.Writer.Write("!");
2246 base.Writer.Write(member.ParamsReadSource);
2247 base.Writer.Write(" && ");
2248 }
2249 if (flag)
2250 {
2251 if (elementAccessor.Mapping is NullableMapping)
2252 {
2253 TypeDesc typeDesc = ((NullableMapping)elementAccessor.Mapping).BaseMapping.TypeDesc;
2254 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(typeDesc.CSharpName, typeDesc.UseReflection));
2255 }
2256 else
2257 {
2258 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(elementAccessor.Mapping.TypeDesc.CSharpName, elementAccessor.Mapping.TypeDesc.UseReflection));
2259 }
2260 base.Writer.Write(".IsAssignableFrom(");
2261 base.Writer.Write(checkTypeSource);
2262 base.Writer.Write("Type)");
2263 }
2264 else
2265 {
2266 if (member.Mapping.IsReturnValue)
2267 {
2268 base.Writer.Write("(IsReturnValue || ");
2269 }
2270 if (flag2 && elementAccessor.Any && elementAccessor.AnyNamespaces == null)
2271 {
2272 base.Writer.Write("true");
2273 }
2274 else
2275 {
2276 WriteXmlNodeEqual("Reader", elementAccessor.Name, ns);
2277 }
2278 if (member.Mapping.IsReturnValue)
2279 {
2280 base.Writer.Write(")");
2281 }
2282 }
2283 base.Writer.WriteLine(") {");
2284 base.Writer.Indent++;
2285 if (flag)
2286 {
2287 if (elementAccessor.Mapping.TypeDesc.IsValueType || elementAccessor.Mapping is NullableMapping)
2288 {
2289 base.Writer.Write("if (");
2290 base.Writer.Write(checkTypeSource);
2291 base.Writer.WriteLine(" != null) {");
2292 base.Writer.Indent++;
2293 }
2294 if (elementAccessor.Mapping is NullableMapping)
2295 {
2296 WriteSourceBegin(member.ArraySource);
2297 TypeDesc typeDesc2 = ((NullableMapping)elementAccessor.Mapping).BaseMapping.TypeDesc;
2298 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(elementAccessor.Mapping.TypeDesc.CSharpName, elementAccessor.Mapping.TypeDesc.UseReflection, ctorInaccessible: false, cast: true, "(" + typeDesc2.CSharpName + ")" + checkTypeSource));
2299 }
2300 else
2301 {
2302 WriteSourceBeginTyped(member.ArraySource, elementAccessor.Mapping.TypeDesc);
2303 base.Writer.Write(checkTypeSource);
2304 }
2305 WriteSourceEnd(member.ArraySource);
2306 base.Writer.WriteLine(";");
2307 if (elementAccessor.Mapping.TypeDesc.IsValueType)
2308 {
2309 base.Writer.Indent--;
2310 base.Writer.WriteLine("}");
2311 }
2312 if (member.FixupIndex >= 0)
2313 {
2314 base.Writer.Write("fixup.Ids[");
2315 base.Writer.Write(member.FixupIndex.ToString(CultureInfo.InvariantCulture));
2316 base.Writer.Write("] = ");
2317 base.Writer.Write(checkTypeSource);
2318 base.Writer.WriteLine("Id;");
2319 }
2320 }
2321 else
2322 {
2323 WriteElement(member.ArraySource, member.ArrayName, member.ChoiceArraySource, elementAccessor, choiceIdentifier, (member.Mapping.CheckSpecified == SpecifiedAccessor.ReadWrite) ? member.CheckSpecifiedSource : null, member.IsList && member.Mapping.TypeDesc.IsNullable, member.Mapping.ReadOnly, member.FixupIndex, j);
2324 }
2325 if (member.Mapping.IsReturnValue)
2326 {
2327 base.Writer.WriteLine("IsReturnValue = false;");
2328 }
2329 if (member.ParamsReadSource != null)
2330 {
2331 base.Writer.Write(member.ParamsReadSource);
2332 base.Writer.WriteLine(" = true;");
2333 }
2334 if (!flag2)
2335 {
2336 base.Writer.WriteLine("break;");
2337 }
2338 base.Writer.Indent--;
2339 base.Writer.WriteLine("}");
2340 }
2341 if (flag2)
2342 {
2343 if (member.IsArrayLike)
2344 {
2345 base.Writer.WriteLine("else {");
2346 base.Writer.Indent++;
2347 }
2348 num2++;
2349 base.Writer.Write("state = ");
2350 base.Writer.Write(num2.ToString(CultureInfo.InvariantCulture));
2351 base.Writer.WriteLine(";");
2352 if (member.IsArrayLike)
2353 {
2354 base.Writer.Indent--;
2355 base.Writer.WriteLine("}");
2356 }
2357 base.Writer.WriteLine("break;");
2358 base.Writer.Indent--;
2359 }
2360 }
2361 if (num > 0 && flag2)
2362 {
2363 base.Writer.WriteLine("default:");
2364 base.Writer.Indent++;
2365 }
2367 if (num > 0)
2368 {
2369 if (flag2)
2370 {
2371 base.Writer.WriteLine("break;");
2372 }
2373 base.Writer.Indent--;
2374 if (!flag2)
2375 {
2376 base.Writer.WriteLine("} while (false);");
2377 }
2378 else
2379 {
2380 base.Writer.WriteLine("}");
2381 }
2382 }
2383 }
static CultureInfo InvariantCulture
void WriteMemberElementsElse(Member anyElement, string elementElseString)
void WriteElement(string source, string arrayName, string choiceSource, ElementAccessor element, ChoiceIdentifierAccessor choice, string checkSpecified, bool checkForNull, bool readOnly, int fixupIndex, int elementIndex)

References System.Xml.Serialization.XmlSerializationReaderCodeGen.Member.ArrayName, System.Xml.Serialization.XmlSerializationReaderCodeGen.Member.ArraySource, System.Xml.Serialization.MemberMapping.CheckSpecified, System.Xml.Serialization.XmlSerializationReaderCodeGen.Member.CheckSpecifiedSource, System.Xml.Serialization.XmlSerializationReaderCodeGen.Member.ChoiceArraySource, System.Xml.Serialization.AccessorMapping.ChoiceIdentifier, System.Xml.Dictionary, System.Xml.Serialization.AccessorMapping.Elements, System.Xml.Serialization.XmlSerializationReaderCodeGen.Member.FixupIndex, System.Xml.Serialization.AccessorMapping.Ignore, System.Globalization.CultureInfo.InvariantCulture, System.Xml.Serialization.XmlSerializationReaderCodeGen.Member.IsArrayLike, System.Xml.Serialization.AccessorMapping.IsAttribute, System.Xml.Serialization.TypeDesc.IsNullable, System.Xml.Serialization.MemberMapping.IsReturnValue, System.Xml.Serialization.XmlSerializationReaderCodeGen.IsSequence(), System.Xml.Serialization.AccessorMapping.IsText, System.Xml.Serialization.XmlSerializationReaderCodeGen.Member.Mapping, System.Xml.Serialization.XmlSerializationReaderCodeGen.Member.ParamsReadSource, System.Xml.Serialization.MemberMapping.ReadOnly, System.Xml.Serialization.AccessorMapping.TypeDesc, System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteElement(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteMemberElementsElse(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteSourceBegin(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteSourceBeginTyped(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteSourceEnd(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteXmlNodeEqual(), and System.Xml.Serialization.AccessorMapping.Xmlns.

Referenced by System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteHandleHrefList(), and System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteMemberElements().