Nemerle.VisualStudio.Project.NemerleProjectNode.FindChildEx C# (CSharp) Method

FindChildEx() static private method

static private FindChildEx ( HierarchyNode it, string name ) : HierarchyNode
it HierarchyNode
name string
return HierarchyNode
        internal static HierarchyNode FindChildEx(HierarchyNode it, string name)
        {
            if (String.IsNullOrEmpty(name))
                return null;

            HierarchyNode result;
            for (HierarchyNode child = it.FirstChild; child != null; child = child.NextSibling)
            {
                if (!String.IsNullOrEmpty(child.VirtualNodeName) && String.Compare(child.VirtualNodeName, name, StringComparison.OrdinalIgnoreCase) == 0)
                    return child;

                if (String.Equals(child.Caption, name, StringComparison.OrdinalIgnoreCase))
                    return child;

                // If it is a foldernode then it has a virtual name but we want to find folder nodes by the document moniker or url
                else if ((String.IsNullOrEmpty(child.VirtualNodeName) || (child is FolderNode)) &&
                        (NativeMethods.IsSamePath(child.GetMkDocument(), name) || NativeMethods.IsSamePath(child.Url, name)))
                {
                    return child;
                }

                result = FindChildEx(child, name);
                if (result != null)
                {
                    return result;
                }
            }
            return null;
        }