IEnumerable<XamlXmlNodeInfo> ReadMember (XamlType parentType, XamlMember xm)
{
yield return Node (XamlNodeType.StartMember, xm);
if (xm.IsEvent) {
yield return Node (XamlNodeType.Value, r.Value);
r.Read ();
} else if (!xm.IsWritePublic) {
if (xm.Type.IsXData)
foreach (var ni in ReadXData ())
yield return ni;
else if (xm.Type.IsCollection) {
yield return Node (XamlNodeType.GetObject, xm.Type);
yield return Node (XamlNodeType.StartMember, XamlLanguage.Items);
foreach (var ni in ReadCollectionItems (parentType, XamlLanguage.Items))
yield return ni;
yield return Node (XamlNodeType.EndMember, XamlLanguage.Items);
yield return Node (XamlNodeType.EndObject, xm.Type);
}
else
throw new XamlParseException (String.Format ("Read-only member '{0}' showed up in the source XML, and the xml contains element content that cannot be read.", xm.Name)) { LineNumber = this.LineNumber, LinePosition = this.LinePosition };
} else {
if (xm.Type.IsCollection || xm.Type.IsDictionary) {
foreach (var ni in ReadCollectionItems (parentType, xm))
yield return ni;
}
else
foreach (var ni in ReadObjectElement (parentType, xm)) {
if (ni.NodeType == XamlNodeType.None)
throw new Exception ("should not happen");
yield return ni;
}
}
yield return Node (XamlNodeType.EndMember, xm);
}