private static bool MatchesPattern( ISyntaxFacts syntaxFacts, SyntaxNode node1, SyntaxNode node2 ) => syntaxFacts.IsNullLiteralExpression(syntaxFacts.GetExpressionOfArgument(node1)) && !syntaxFacts.IsNullLiteralExpression(syntaxFacts.GetExpressionOfArgument(node2));
private static bool TryAnalyzeInvocationCondition( SyntaxNodeAnalysisContext context, ISyntaxFacts syntaxFacts, IMethodSymbol?referenceEqualsMethodOpt, TInvocationExpression invocation, [NotNullWhen(true)] out SyntaxNode?conditionPartToCheck, out bool isEquals) { conditionPartToCheck = null; isEquals = true; var expression = syntaxFacts.GetExpressionOfInvocationExpression(invocation); var nameNode = syntaxFacts.IsIdentifierName(expression) ? expression : syntaxFacts.IsSimpleMemberAccessExpression(expression) ? syntaxFacts.GetNameOfMemberAccessExpression(expression) : null; if (!syntaxFacts.IsIdentifierName(nameNode)) { return(false); } syntaxFacts.GetNameAndArityOfSimpleName(nameNode, out var name, out _); if (!syntaxFacts.StringComparer.Equals(name, nameof(ReferenceEquals))) { return(false); } var arguments = syntaxFacts.GetArgumentsOfInvocationExpression(invocation); if (arguments.Count != 2) { return(false); } var conditionLeft = syntaxFacts.GetExpressionOfArgument(arguments[0]); var conditionRight = syntaxFacts.GetExpressionOfArgument(arguments[1]); if (conditionLeft == null || conditionRight == null) { return(false); } conditionPartToCheck = GetConditionPartToCheck(syntaxFacts, conditionLeft, conditionRight); if (conditionPartToCheck == null) { return(false); } var semanticModel = context.SemanticModel; var cancellationToken = context.CancellationToken; var symbol = semanticModel.GetSymbolInfo(invocation, cancellationToken).Symbol; return(referenceEqualsMethodOpt != null && referenceEqualsMethodOpt.Equals(symbol)); }
private static ITypeParameterSymbol?GetGenericParameterSymbol(ISyntaxFacts syntaxFacts, SemanticModel semanticModel, SyntaxNode node1, SyntaxNode node2, CancellationToken cancellationToken) { var valueNode = syntaxFacts.IsNullLiteralExpression(syntaxFacts.GetExpressionOfArgument(node1)) ? node2 : node1; var argumentExpression = syntaxFacts.GetExpressionOfArgument(valueNode); if (argumentExpression != null) { var parameterType = semanticModel.GetTypeInfo(argumentExpression, cancellationToken).Type; return(parameterType as ITypeParameterSymbol); } return(null); }
private ITypeSymbol?TryGetArgsArgumentType( SemanticModel semanticModel, SeparatedSyntaxList <SyntaxNode> arguments, ImmutableArray <IParameterSymbol> parameters, ISyntaxFacts syntaxFacts) { var argsArgument = TryGetArgument(NameOfArgsParameter, arguments, parameters); if (argsArgument == null) { return(null); } var expression = syntaxFacts.GetExpressionOfArgument(argsArgument); return(semanticModel.GetTypeInfo(expression).ConvertedType); }
protected SyntaxNode?TryGetFormatStringLiteralExpressionSyntax( SeparatedSyntaxList <SyntaxNode> arguments, ImmutableArray <IParameterSymbol> parameters, ISyntaxFacts syntaxFacts) { var formatArgumentSyntax = TryGetArgument( NameOfFormatStringParameter, arguments, parameters); if (formatArgumentSyntax == null) { return(null); } if (!syntaxFacts.IsStringLiteralExpression(syntaxFacts.GetExpressionOfArgument(formatArgumentSyntax))) { return(null); } return(GetArgumentExpression(formatArgumentSyntax)); }