Exemple #1
0
        internal static bool TryMatchTypeGetType(InvocationExpressionSyntax invocation, SyntaxNodeAnalysisContext context, out TypeNameArgument typeName, out ArgumentAndValue <bool> ignoreCase)
        {
            if (invocation.TryGetTarget(KnownSymbol.Type.GetType, context.SemanticModel, context.CancellationToken, out var target) &&
                target.TryFindParameter("typeName", out var nameParameter) &&
                invocation.TryFindArgument(nameParameter, out var nameArg) &&
                nameArg.TryGetStringValue(context.SemanticModel, context.CancellationToken, out string name))
            {
                typeName = new TypeNameArgument(nameArg, name);
                switch (target.Parameters.Length)
                {
                case 1:
                    ignoreCase = default(ArgumentAndValue <bool>);
                    return(true);

                case 2 when target.TryFindParameter("throwOnError", out _):
                    ignoreCase = default(ArgumentAndValue <bool>);

                    return(true);

                case 3 when target.TryFindParameter("throwOnError", out _) &&
                    target.TryFindParameter("ignoreCase", out var ignoreCaseParameter) &&
                    invocation.TryFindArgument(ignoreCaseParameter, out var ignoreCaseArg) &&
                    context.SemanticModel.TryGetConstantValue(ignoreCaseArg.Expression, context.CancellationToken, out bool ignoreNameCase):
                    ignoreCase = new ArgumentAndValue <bool>(ignoreCaseArg, ignoreNameCase);

                    return(true);
                }
            }

            typeName   = default(TypeNameArgument);
            ignoreCase = default(ArgumentAndValue <bool>);
            return(false);
        }
Exemple #2
0
        internal static INamedTypeSymbol GetTypeByMetadataName(this Compilation compilation, TypeNameArgument typeName, bool ignoreCase)
        {
            if (typeName.TryGetGeneric(out var generic))
            {
                return(GetTypeByMetadataName(compilation, generic, ignoreCase));
            }

            return(GetTypeByMetadataName(compilation, typeName.Value, ignoreCase));
        }
Exemple #3
0
        internal static INamedTypeSymbol GetTypeByMetadataName(this IAssemblySymbol assembly, TypeNameArgument typeName, bool ignoreCase)
        {
            if (typeName.TryGetGeneric(out var generic))
            {
                return(GetTypeByMetadataName(assembly, generic, ignoreCase));
            }

            return(GetTypeByMetadataName(assembly, typeName.Value, ignoreCase));
        }
 internal static bool TryMatchTypeGetType(InvocationExpressionSyntax invocation, SemanticModel semanticModel, CancellationToken cancellationToken, out TypeNameArgument typeName, out ArgumentAndValue <bool> ignoreCase)
 {
     if (invocation.TryGetTarget(KnownSymbol.Type.GetType, semanticModel, cancellationToken, out var target) &&
         target.TryFindParameter("typeName", out var nameParameter) &&
         invocation.TryFindArgument(nameParameter, out var nameArg) &&
         nameArg.TryGetStringValue(semanticModel, cancellationToken, out var name) &&
         name is { })