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); }
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)); }
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 { })