Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="exception"></param>
        /// <returns></returns>
        private ExceptionTreeNodeItem InternalBuild(Exception exception)
        {
            if (exception == null)
            {
                return(null);
            }

            _recursiveObjects.Add(exception);
            var rootNode = new ExceptionTreeNodeItem(exception, exception.GetType().ToString(), exception.Message);

            var properties = GetProperties(exception);

            if (properties.Length == 0)
            {
                return(rootNode);
            }

            rootNode.Childs = new List <ExceptionTreeNode>();
            foreach (var property in properties)
            {
                var node = GetInformationNode(property, exception);
                if (IsRecursive(node))
                {
                    continue;
                }

                rootNode.Childs.Add(node);
                _recursiveObjects.Add(node.TreeItemObject);
            }

            return(rootNode);
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="property"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        private ExceptionTreeNodeItem TryGetInformationNode(PropertyInfo property, object obj)
        {
            var value      = TryGetValue(property, obj);
            var resultNode = new ExceptionTreeNodeItem(value, property.Name, value.ToSafeString());

            if (value == null || ExceptionTreeHelper.ExcludesTypes.Contains(property.PropertyType))
            {
                return(resultNode);
            }

            var properties = GetProperties(value);

            if (properties.Length == 0)
            {
                return(resultNode);
            }

            resultNode.Childs = new List <ExceptionTreeNode>();
            foreach (var propertyRow in properties)
            {
                var node = GetInformationNode(propertyRow, value);
                if (IsRecursive(node))
                {
                    continue;
                }

                resultNode.Childs.Add(node);
                _recursiveObjects.Add(node.TreeItemObject);
            }

            return(resultNode);
        }
Exemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        private bool IsRecursive(ExceptionTreeNodeItem node)
        {
            if (node == null)
            {
                return(true);
            }

            return(node.TreeItemObject != null && _recursiveObjects.Any(a => ReferenceEquals(a, node.TreeItemObject)));
        }