public static ITypeDefinition GetQualifiedName(this ITypeSymbol symbol)
{
var name = string.Join(".", GetContainingTypeName(symbol).Reverse());
var namedTypeSymbol = symbol as INamedTypeSymbol;
if (namedTypeSymbol != null && namedTypeSymbol.TypeParameters != null && namedTypeSymbol.TypeParameters.Any())
{
var joined = string.Join(", ", namedTypeSymbol.TypeParameters.Select(x => x.Name));
name = name + string.Format("<{0}>", joined);
}
var namespaceNames = new List<string>();
for (var containingSymbol = symbol.ContainingSymbol; (containingSymbol != null) && (containingSymbol.Kind == SymbolKind.Namespace); containingSymbol = containingSymbol.ContainingSymbol)
{
var namespaceSymbol = (INamespaceSymbol)containingSymbol;
if (namespaceSymbol.IsGlobalNamespace)
{
return new TypeDefinition(name, string.Join(".", namespaceNames), namespaceSymbol.ContainingAssembly.Name);
}
namespaceNames.Add(namespaceSymbol.Name);
}
return new TypeDefinition(name, string.Join(".", namespaceNames), string.Empty);
}