Exemple #1
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #9
0
 /// <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)
 {
 }
Exemple #10
0
 /// <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) };
 }
Exemple #11
0
 /// <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)
 {
 }
Exemple #12
0
 /// <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));
        }
Exemple #15
0
        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)
 {
 }
Exemple #17
0
 public XPathTypeNode Copy(XPathTypeContext context)
 {
     XPathTypeNode ret=Clone();
     ret._Context=context;
     return ret;
 }