public XPathTypeNode Copy(XPathTypeContext context) { XPathTypeNode ret = Clone(); ret._Context = context; return(ret); }
public XPathTypeNode GetNode(Type node, MemberInfo memberInfo, XPathTypeNode parent, XPathTypeContext context) { if ((parent==null) && (memberInfo==null)) return GetRootNode(node, context); return new XPathQueryableNode(node, memberInfo, parent, context); }
internal XPathTypeNode(Type node, MemberInfo memberInfo, XPathTypeNode parent, XPathTypeContext context) { Debug.Assert(context!=null); if (context==null) throw new ArgumentNullException("context"); Debug.Assert(node!=null); if (node==null) throw new ArgumentNullException("node"); _Node=node; _MemberInfo=memberInfo; _Parent=parent; _Context=context; // Initialize optional external metadata holding types foreach (MetadataTypeAttribute mta in node.GetCustomAttributes(typeof(MetadataTypeAttribute), true)) _MetadataNodes=new Type[] { node, mta.MetadataClassType }; if (_MetadataNodes==null) _MetadataNodes=new Type[] { node }; if (memberInfo!=null) { if (parent!=null) _MetadataMemberInfos=parent.MetadataNodes .SelectMany<Type, MemberInfo>(t => t.GetMember(memberInfo.Name, memberInfo.MemberType, BindingFlags.Instance | BindingFlags.Public)) .ToArray<MemberInfo>(); else _MetadataMemberInfos=new MemberInfo[] { memberInfo }; } }
public XPathTypeRootNode GetRootNode(Type root, XPathTypeContext context) { if (_RootNodes.ContainsKey(root)) return (XPathTypeRootNode)_RootNodes[root].Copy(context); var ret=new XPathTypeRootNode(root, context); _RootNodes.Add(root, ret); return ret; }
internal XPathTypeNavigator(Type root, IXmlNamespaceResolver namespaceResolver, XPathTypeContext context) { Debug.Assert(root!=null); if (root==null) throw new ArgumentNullException("root"); _Context=context ?? new XPathTypeContext(XPathTypeNodeProvider.Instance, namespaceResolver); _Root=_Context.NodeProvider.GetRootNode(root, _Context); _Current=_Root; }
public XPathTypeRootNode GetRootNode(Type root, XPathTypeContext context) { if (_RootNodes.ContainsKey(root)) { return((XPathTypeRootNode)_RootNodes[root].Copy(context)); } var ret = new XPathTypeRootNode(root, context); _RootNodes.Add(root, ret); return(ret); }
internal XPathTypeNode(Type node, MemberInfo memberInfo, XPathTypeNode parent, XPathTypeContext context) { Debug.Assert(context != null); if (context == null) { throw new ArgumentNullException("context"); } Debug.Assert(node != null); if (node == null) { throw new ArgumentNullException("node"); } _Node = node; _MemberInfo = memberInfo; _Parent = parent; _Context = context; // Initialize optional external metadata holding types foreach (MetadataTypeAttribute mta in node.GetCustomAttributes(typeof(MetadataTypeAttribute), true)) { _MetadataNodes = new Type[] { node, mta.MetadataClassType } } ; if (_MetadataNodes == null) { _MetadataNodes = new Type[] { node } } ; if (memberInfo != null) { if (parent != null) { _MetadataMemberInfos = parent.MetadataNodes .SelectMany <Type, MemberInfo>(t => t.GetMember(memberInfo.Name, memberInfo.MemberType, BindingFlags.Instance | BindingFlags.Public)) .ToArray <MemberInfo>(); } else { _MetadataMemberInfos = new MemberInfo[] { memberInfo } }; } }
public XPathTypeNode GetNode(Type node, MemberInfo memberInfo, XPathTypeNode parent, XPathTypeContext context) { if ((parent==null) && (memberInfo==null)) return GetRootNode(node, context); if (node!=typeof(string)) // string implements IEnumerable<char> { Type entype=node.GetInterface("IEnumerable`1"); if (entype!=null) { Debug.Assert(entype.IsGenericType); Type[] intypes=entype.GetGenericArguments(); Debug.Assert(intypes.Length==1); return new XPathTypeEnumerableNode(intypes[0], memberInfo, parent, context); } } return new XPathTypeNode(node, memberInfo, parent, context); }
/// <summary>Creates a new instance of the <see cref="XPathTypeNode" /> class that will act as a root node.</summary> /// <param name="root"></param> /// <param name="context"></param> internal protected XPathTypeNode(Type root, XPathTypeContext context) : this(root, null, null, context) { }
/// <summary>Creates a new instance of the <see cref="XPathTypeRootNode" /> class that will act as a root node.</summary> /// <param name="root"></param> /// <param name="context"></param> internal protected XPathTypeRootNode(Type root, XPathTypeContext context) : base(root, context) { _ElementChildrenNodes = new XPathTypeNode[] { context.NodeProvider.GetNode(Node, null, this, Context) }; }
/// <summary>Creates a new instance of the <see cref="XPathTypeNode" /> class that will act as a root node.</summary> /// <param name="root"></param> /// <param name="context"></param> internal protected XPathTypeNode(Type root, XPathTypeContext context): this(root, null, null, context) { }
/// <summary>Creates a new instance of the <see cref="XPathTypeRootNode" /> class that will act as a root node.</summary> /// <param name="root"></param> /// <param name="context"></param> internal protected XPathTypeRootNode(Type root, XPathTypeContext context): base(root, context) { _ElementChildrenNodes=new XPathTypeNode[] { context.NodeProvider.GetNode(Node, null, this, Context) }; }
internal XPathTypeEnumerableNode(Type node, MemberInfo memberInfo, XPathTypeNode parent, XPathTypeContext context) : base(node, memberInfo, parent, context) { }
public XPathTypeNode GetNode(Type node, MemberInfo memberInfo, XPathTypeNode parent, XPathTypeContext context) { if ((parent == null) && (memberInfo == null)) { return(GetRootNode(node, context)); } if (node != typeof(string)) // string implements IEnumerable<char> { Type entype = node.GetInterface("IEnumerable`1"); if (entype != null) { Debug.Assert(entype.IsGenericType); Type[] intypes = entype.GetGenericArguments(); Debug.Assert(intypes.Length == 1); return(new XPathTypeEnumerableNode(intypes[0], memberInfo, parent, context)); } } return(new XPathTypeNode(node, memberInfo, parent, context)); }
internal XPathTypeNavigator(Type root, IXmlNamespaceResolver namespaceResolver, XPathTypeContext context) { Debug.Assert(root != null); if (root == null) { throw new ArgumentNullException("root"); } _Context = context ?? new XPathTypeContext(XPathTypeNodeProvider.Instance, namespaceResolver); _Root = _Context.NodeProvider.GetRootNode(root, _Context); _Current = _Root; }
internal XPathTypeEnumerableNode(Type node, MemberInfo memberInfo, XPathTypeNode parent, XPathTypeContext context): base(node, memberInfo, parent, context) { }
public XPathTypeNode Copy(XPathTypeContext context) { XPathTypeNode ret=Clone(); ret._Context=context; return ret; }