private ImmutableArray ScanBlockForDereferencesWithoutNullCheck()

in src/Microsoft.VisualStudio.SDK.Analyzers/VSSDK006CheckServicesExistAnalyzer.cs [174:194]


            private ImmutableArray<Location> ScanBlockForDereferencesWithoutNullCheck(SyntaxNodeAnalysisContext context, ISymbol symbol, SyntaxNode containingBlockOrExpression)
            {
                if (containingBlockOrExpression == null)
                {
                    throw new ArgumentNullException(nameof(containingBlockOrExpression));
                }

                if (symbol != null)
                {
                    System.Collections.Generic.IEnumerable<MemberAccessExpressionSyntax> variableUses = from access in containingBlockOrExpression.DescendantNodes().OfType<MemberAccessExpressionSyntax>()
                                       let symbolAccessed = context.Compilation.GetSemanticModel(access.SyntaxTree).GetSymbolInfo(access.Expression, context.CancellationToken).Symbol
                                       where SymbolEqualityComparer.Default.Equals(symbol, symbolAccessed)
                                       select access;
                    if (!containingBlockOrExpression.DescendantNodes().Any(n => this.IsNonNullCheck(n, symbol, context)))
                    {
                        return variableUses.Select(vu => vu.Expression.GetLocation()).ToImmutableArray();
                    }
                }

                return ImmutableArray<Location>.Empty;
            }