public static ImmutableArray <Diagnostic> GetDiagnostics( SyntaxNode node, SemanticModel model, CancellationToken token) { var nullableParametersVisitor = new NullableParametersVisitor(model, token); nullableParametersVisitor.Visit(node); var nullableParameters = nullableParametersVisitor.NullableParameters; var existingNullChecksVisitor = new ExistingNullChecksVisitor(model, token); existingNullChecksVisitor.Visit(node); var existingNullChecks = existingNullChecksVisitor.ExistingNullChecks; var builder = ImmutableArray.CreateBuilder <Diagnostic>(); foreach (var nullableParameter in nullableParameters) { if (!existingNullChecks.Any(nullCheck => nullCheck.ParameterIndex == nullableParameter.Index)) { var diagnostic = Diagnostic.Create( Descriptor, nullableParameter.Syntax.Identifier.GetLocation(), properties: ImmutableDictionary <string, string?> .Empty.Add( nameof(NullableParameter.Index), nullableParameter.Index.ToString())); builder.Add(diagnostic); } } return(builder.ToImmutable()); }
private void VisitBaseMethodDeclaration(CSharpSyntaxNode node) { var existingNullChecksVisitor = new ExistingNullChecksVisitor(model, token); existingNullChecksVisitor.Visit(node); existingNullChecks = existingNullChecksVisitor.ExistingNullChecks; }