public static string FullyQualifiedName(this ISymbol symbol, bool appenTypeArgs = true) { var at = symbol as IArrayTypeSymbol; if (at != null) { string result = at.ElementType.FullyQualifiedName() + "["; for (int i = 0; i < at.Rank - 1; i++) { result += ","; } result += "]"; return(result); } var localName = symbol.Name; if (SyntaxHelper.IsCSharpKeyword(localName)) { localName = "@" + localName; } if (symbol is ITypeParameterSymbol) { return(localName); } if (appenTypeArgs) { if (symbol is INamedTypeSymbol) { localName = AppendTypeArguments(localName, ((INamedTypeSymbol)symbol).TypeArguments); } else if (symbol is IMethodSymbol) { localName = AppendTypeArguments(localName, ((IMethodSymbol)symbol).TypeArguments); } } if (symbol.ContainingType != null) { return(symbol.ContainingType.FullyQualifiedName() + "." + localName); } else if (symbol.ContainingNamespace != null) { if (symbol.ContainingNamespace.IsGlobalNamespace) { //return CS.NS.GLOBAL + localName; return(localName); } return(symbol.ContainingNamespace.FullyQualifiedName() + "." + localName); } else { return(localName); } }