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);
}