Ejemplo n.º 1
0
        private void AnalyzeInvocation(SyntaxNodeAnalysisContext syntaxNodeContext)
        {
            var invocationExpression = (TInvocationExpressionSyntax)syntaxNodeContext.Node;
            var methodSymbolInfo     = syntaxNodeContext.SemanticModel.GetSymbolInfo(invocationExpression);

            if (methodSymbolInfo.Symbol?.Kind != SymbolKind.Method)
            {
                return;
            }

            var methodSymbol = (IMethodSymbol)methodSymbolInfo.Symbol;

            if (SupportsCallInfo(syntaxNodeContext, invocationExpression, methodSymbol) == false)
            {
                return;
            }

            var substituteCallParameters = GetSubstituteCallArgumentOperations(syntaxNodeContext, methodSymbol, invocationExpression);

            if (substituteCallParameters == null)
            {
                return;
            }

            foreach (var argumentExpressionSyntax in GetArgumentExpressions(invocationExpression))
            {
                var callInfoContext = _callInfoFinder.GetCallInfoContext(syntaxNodeContext.SemanticModel, argumentExpressionSyntax);

                AnalyzeArgAtInvocations(syntaxNodeContext, callInfoContext, substituteCallParameters);

                AnalyzeArgInvocations(syntaxNodeContext, callInfoContext, substituteCallParameters);

                AnalyzeIndexerInvocations(syntaxNodeContext, callInfoContext, substituteCallParameters);
            }
        }
Ejemplo n.º 2
0
 private IEnumerable <TIndexerExpressionSyntax> FindCallInfoIndexers(SyntaxNodeAnalysisContext syntaxNodeContext, TInvocationExpressionSyntax invocationExpressionSyntax)
 {
     // perf - dont use linq in hotpaths
     foreach (var argumentExpression in GetArgumentExpressions(invocationExpressionSyntax))
     {
         foreach (var indexerExpressionSyntax in _callInfoFinder.GetCallInfoContext(syntaxNodeContext.SemanticModel, argumentExpression).IndexerAccesses)
         {
             if (IsAssigned(syntaxNodeContext, indexerExpressionSyntax))
             {
                 yield return(indexerExpressionSyntax);
             }
         }
     }
 }
 private IEnumerable <TIndexerExpressionSyntax> FindCallInfoIndexers(SyntaxNodeAnalysisContext syntaxNodeContext, TInvocationExpressionSyntax invocationExpressionSyntax)
 {
     return(GetArgumentExpressions(invocationExpressionSyntax).SelectMany(argument => _callInfoFinder.GetCallInfoContext(syntaxNodeContext.SemanticModel, argument).IndexerAccesses)
            .Where(indexerExpression => IsAssigned(syntaxNodeContext, indexerExpression)));
 }