public static ClassDefinition Parse(XamlElement element, ITypeParser typeParser) { string fullName = GetClassFullName(element); if (fullName.IsNullOrEmpty()) { return null; } string baseTypeName = typeParser.ParseTypeName(element.Name); IEnumerable<MemberDefinition> members = GetMembers(element, baseTypeName, typeParser).ToArray(); return new ClassDefinition(GetTypeName(fullName), GetTypeNamespace(fullName), baseTypeName, members); }
public static ClassDefinition Parse(XamlElement element, ITypeParser typeParser) { string fullName = GetClassFullName(element); if (fullName.IsNullOrEmpty()) { return(null); } string baseTypeName = typeParser.ParseTypeName(element.Name); IEnumerable <MemberDefinition> members = GetMembers(element, baseTypeName, typeParser).ToArray(); return(new ClassDefinition(GetTypeName(fullName), GetTypeNamespace(fullName), baseTypeName, members)); }
private static IEnumerable<MemberDefinition> GetMembers(XamlElement element, string elementTypeName, ITypeParser typeParser) { if (elementTypeName == "System.Windows.ResourceDictionary") { yield break; } XamlMember nameDirective = element.Directives.FirstOrDefault(directive => directive.Name == XamlLanguage.NameDirective); if (nameDirective != null) { yield return new MemberDefinition((string)nameDirective.GetSingleValue(), elementTypeName); } foreach (XamlElement child in element.Values.OfType<XamlElement>().Concat(element.Members.SelectMany(member => member.Values.OfType<XamlElement>()))) { string childTypeName = typeParser.ParseTypeName(child.Name); foreach (MemberDefinition member in GetMembers(child, childTypeName, typeParser)) { yield return member; } } }
private static IEnumerable <MemberDefinition> GetMembers(XamlElement element, string elementTypeName, ITypeParser typeParser) { if (elementTypeName == "System.Windows.ResourceDictionary") { yield break; } XamlMember nameDirective = element.Directives.FirstOrDefault(directive => directive.Name == XamlLanguage.NameDirective); if (nameDirective != null) { yield return(new MemberDefinition((string)nameDirective.GetSingleValue(), elementTypeName)); } foreach (XamlElement child in element.Values.OfType <XamlElement>().Concat(element.Members.SelectMany(member => member.Values.OfType <XamlElement>()))) { string childTypeName = typeParser.ParseTypeName(child.Name); foreach (MemberDefinition member in GetMembers(child, childTypeName, typeParser)) { yield return(member); } } }
private static IEnumerable<MemberDefinition> GetMembers(XamlElement element, string elementTypeName, ITypeParser typeParser) { if (elementTypeName == "System.Windows.ResourceDictionary") { yield break; } XamlAttribute nameAttribute = element.Attributes.FirstOrDefault(attribute => attribute.Name == XamlLanguage.NameDirective); if (nameAttribute != null) { yield return new MemberDefinition((string)nameAttribute.Value, elementTypeName); } foreach (XamlElement child in element.Children) { string childTypeName = typeParser.ParseTypeName(child.Name.IsMemberName ? child.Name.ContainingTypeName : child.Name); foreach (MemberDefinition member in GetMembers(child, childTypeName, typeParser)) { yield return member; } } }