static string GetFullNameCore(TypeDeclarationSyntax typeDeclaration, DeclarationFullNameFlags flags) { var ident = new List <string>(10) { $"{typeDeclaration.Identifier}{typeDeclaration.TypeParameterList}" }; var parent = typeDeclaration.Parent; while (parent != null) { if (parent is TypeDeclarationSyntax type) { ident.Add(type.Identifier.ToString()); parent = parent.Parent; continue; } if ((flags & DeclarationFullNameFlags.WithoutNamespaceName) == 0 && parent is NamespaceDeclarationSyntax ns) { ident.Add(ns.Name.ToString()); parent = parent.Parent; continue; } break; } ident.Reverse(); return(string.Join(".", ident)); }
/// <summary> /// Retrieves the fully qualified name of the given symbol. /// </summary> /// <param name="symbol"></param> /// <param name="flags"></param> /// <returns></returns> public static string GetFullName(this ISymbol symbol, DeclarationFullNameFlags flags = DeclarationFullNameFlags.Default) { var ident = new List <string>(10) { symbol.Name }; var parent = symbol.ContainingSymbol; while (parent != null) { if (parent is INamespaceSymbol ns && ns.IsGlobalNamespace) { break; } if ((flags & DeclarationFullNameFlags.WithoutNamespaceName) != 0 && parent is INamespaceSymbol) { break; } ident.Add(parent.Name); parent = parent.ContainingSymbol; } ident.Reverse(); return(string.Join(".", ident)); }
/// <summary> /// Retrieves the fully qualified name of the given type declaration. /// </summary> /// <param name="declaration"></param> /// <param name="flags"></param> /// <returns></returns> public static string GetFullName(this MemberDeclarationSyntax declaration, DeclarationFullNameFlags flags = DeclarationFullNameFlags.Default) { if (declaration == null) { return(null); } if (declaration is TypeDeclarationSyntax typeDeclaration) { return(GetFullNameCore(typeDeclaration, flags)); } if (declaration is FieldDeclarationSyntax) { throw new ArgumentException("Cannot get full names of field declarations as they may contain multiple fields. Retrieve the full names of the individual variable declarators.", nameof(declaration)); } if (declaration is ConstructorDeclarationSyntax constructorDeclaration) { var parentName = GetFullName(constructorDeclaration.Parent as MemberDeclarationSyntax); if (parentName != null) { return($"{parentName}..ctor"); } return(".ctor"); } if (declaration is MethodDeclarationSyntax methodDeclaration) { var parentName = GetFullName(methodDeclaration.Parent as MemberDeclarationSyntax); if (parentName != null) { return($"{parentName}.{methodDeclaration.Identifier}"); } return(methodDeclaration.Identifier.ToString()); } if (declaration is EventDeclarationSyntax eventDeclaration) { var parentName = GetFullName(eventDeclaration.Parent as MemberDeclarationSyntax); if (parentName != null) { return($"{parentName}.{eventDeclaration.Identifier}"); } return(eventDeclaration.Identifier.ToString()); } if (declaration is DelegateDeclarationSyntax delegateDeclaration) { var parentName = GetFullName(delegateDeclaration.Parent as MemberDeclarationSyntax); if (parentName != null) { return($"{parentName}.{delegateDeclaration.Identifier}"); } return(delegateDeclaration.Identifier.ToString()); } throw new ArgumentException("Do not understand the declaration type", nameof(declaration)); }
/// <summary> /// Retrieves the fully qualified name of the given type declaration. /// </summary> /// <param name="declaration"></param> /// <param name="flags"></param> /// <returns></returns> public static string GetFullName(this VariableDeclaratorSyntax declaration, DeclarationFullNameFlags flags = DeclarationFullNameFlags.Default) { if (declaration == null) { return(null); } var parent = declaration.Parent; while (!(parent is null || parent is TypeDeclarationSyntax)) { parent = parent.Parent; } var parentName = GetFullName(parent as MemberDeclarationSyntax); if (parentName != null) { return($"{parentName}.{declaration.Identifier}"); } return(declaration.Identifier.ToString()); }
/// <summary> /// Retrieves the fully qualified name of the given symbol. /// </summary> /// <param name="symbol"></param> /// <param name="flags"></param> /// <returns></returns> public static string GetFullName(this ISymbol symbol, DeclarationFullNameFlags flags = DeclarationFullNameFlags.Default) { if (symbol is INamedTypeSymbol namedType) { var declaratorSyntax = namedType .DeclaringSyntaxReferences .FirstOrDefault() ?.GetSyntax(); if (declaratorSyntax is TypeDeclarationSyntax typeDeclaration) { return(typeDeclaration.GetFullName(flags)); } } var ident = new List <string>(10) { symbol.Name }; var parent = symbol.ContainingSymbol; while (parent != null) { if (parent is INamespaceSymbol ns && ns.IsGlobalNamespace) { break; } if ((flags & DeclarationFullNameFlags.WithoutNamespaceName) != 0 && parent is INamespaceSymbol) { break; } ident.Add(parent.Name); parent = parent.ContainingSymbol; } ident.Reverse(); return(string.Join(".", ident)); }