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