Exemple #1
0
        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);
            }
        }