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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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));
        }