Boo.Lang.Compiler.TypeSystem.NameResolutionService.GetMostSimilarTypeName C# (CSharp) Method

GetMostSimilarTypeName() public method

public GetMostSimilarTypeName ( string name ) : string
name string
return string
        public string GetMostSimilarTypeName(string name)
        {
            string[] nsHierarchy = name.Split('.');
            int nshLen = nsHierarchy.Length;
            string suggestion = null;

            if (nshLen > 1)
            {
                INamespace ns = null;
                INamespace prevNs = null;
                for (int i = 1; i < nshLen; i++)
                {
                    string currentNsName = string.Join(".", nsHierarchy, 0, i);
                    ns = ResolveQualifiedName(currentNsName) as INamespace;
                    if (null == ns)
                    {
                        nsHierarchy[i-1] = GetMostSimilarMemberName(prevNs, nsHierarchy[i-1], EntityType.Namespace);
                        if (null == nsHierarchy[i-1]) break;
                        i--; continue; //reloop to resolve step
                    }
                    prevNs = ns;
                }
                suggestion = GetMostSimilarMemberName(ns, nsHierarchy[nshLen-1], EntityType.Type);
                if (null != suggestion)
                {
                    nsHierarchy[nshLen-1] = suggestion;
                    return string.Join(".", nsHierarchy);
                }
            }

            List<INamespace> nsList = new List<INamespace>();
            FlattenChildNamespaces(nsList, GetGlobalNamespace());
            nsList.Reverse();//most recently added namespaces first
            foreach (INamespace nse in nsList)
            {
                suggestion = GetMostSimilarMemberName(nse, nsHierarchy[nshLen-1], EntityType.Type);
                if (null != suggestion) return nse.ToString()+"."+suggestion;
            }
            return GetMostSimilarMemberName(GetGlobalNamespace(), nsHierarchy[nshLen-1], EntityType.Type);
        }