Exemplo n.º 1
0
        public static string GetWhitelistKey(this ISymbol symbol, TypeKeyQuantity quantity)
        {
            if (symbol is INamespaceSymbol namespaceSymbol)
            {
                return(namespaceSymbol.GetWhitelistKey(quantity));
            }
            if (symbol is ITypeSymbol typeSymbol)
            {
                return(typeSymbol.GetWhitelistKey(quantity));
            }
            if (symbol is IMethodSymbol methodSymbol)
            {
                // Account for generic methods, we must check their definitions, not specific implementations
                if (methodSymbol.IsGenericMethod && !methodSymbol.IsDefinition)
                {
                    methodSymbol = methodSymbol.OriginalDefinition;
                    return(methodSymbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)
                           + ", "
                           + symbol.ContainingAssembly.Name);
                }
            }

            var memberSymbol = (symbol is IEventSymbol || symbol is IFieldSymbol || symbol is IPropertySymbol || symbol is IMethodSymbol) ? symbol : null;

            if (memberSymbol == null)
            {
                throw new ArgumentException("Invalid symbol type: Expected namespace, type or type member", nameof(symbol));
            }

            return(memberSymbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)
                   + ", "
                   + symbol.ContainingAssembly.Name);
        }
Exemplo n.º 2
0
        public static string GetWhitelistKey(this ISymbol symbol, TypeKeyQuantity quantity)
        {
            var namespaceSymbol = symbol as INamespaceSymbol;
            if (namespaceSymbol != null)
            {
                return namespaceSymbol.GetWhitelistKey(quantity);
            }
            var typeSymbol = symbol as ITypeSymbol;
            if (typeSymbol != null)
            {
                return typeSymbol.GetWhitelistKey(quantity);
            }
            var methodSymbol = symbol as IMethodSymbol;
            if (methodSymbol != null)
            {
                // Account for generic methods, we must check their definitions, not specific implementations
                if (methodSymbol.IsGenericMethod && !methodSymbol.IsDefinition)
                {
                    methodSymbol = methodSymbol.OriginalDefinition;
                    return methodSymbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)
                            + ", "
                           + symbol.ContainingAssembly.Name;
                }
            }

            var memberSymbol = (symbol is IEventSymbol || symbol is IFieldSymbol || symbol is IPropertySymbol || symbol is IMethodSymbol) ? symbol : null;
            if (memberSymbol == null)
            {
                throw new ArgumentException("Invalid symbol type: Expected namespace, type or type member", "symbol");
            }

            return memberSymbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)
                    + ", "
                   + symbol.ContainingAssembly.Name;
        }
Exemplo n.º 3
0
        static string GetWhitelistKey(INamespaceSymbol symbol, TypeKeyQuantity quantity)
        {
            switch (quantity)
            {
            case TypeKeyQuantity.ThisOnly:
                return(symbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)
                       + ", "
                       + symbol.ContainingAssembly.Name);

            case TypeKeyQuantity.AllMembers:
                return(symbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)
                       + ".*, "
                       + symbol.ContainingAssembly.Name);

            default:
                throw new ArgumentOutOfRangeException(nameof(quantity), quantity, null);
            }
        }
Exemplo n.º 4
0
        public static string GetWhitelistKey(this ITypeSymbol symbol, TypeKeyQuantity quantity)
        {
            symbol = ResolveRootType(symbol);

            switch (quantity)
            {
            case TypeKeyQuantity.ThisOnly:
                return(symbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)
                       + ", "
                       + symbol.ContainingAssembly.Name);

            case TypeKeyQuantity.AllMembers:
                return(symbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)
                       + "+*, "
                       + symbol.ContainingAssembly.Name);

            default:
                throw new ArgumentOutOfRangeException("quantity", quantity, null);
            }
        }
Exemplo n.º 5
0
        public static string GetWhitelistKey(this ITypeSymbol symbol, TypeKeyQuantity quantity)
        {
            symbol = ResolveRootType(symbol);

            switch (quantity)
            {
                case TypeKeyQuantity.ThisOnly:
                    return symbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)
                           + ", "
                           + symbol.ContainingAssembly.Name;

                case TypeKeyQuantity.AllMembers:
                    return symbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)
                           + "+*, "
                           + symbol.ContainingAssembly.Name;

                default:
                    throw new ArgumentOutOfRangeException("quantity", quantity, null);
            }
        }