private static void Handle(SyntaxNodeAnalysisContext context) { if (!context.IsExcludedFromAnalysis() && context.ContainingSymbol is IEventSymbol eventSymbol && context.Node is EventDeclarationSyntax eventDeclaration && EventDeclarationWalker.TryGetCalls(eventDeclaration, out var addCall, out var removeCall)) { if (addCall.TryGetMethodName(out var addName) && addName != "AddHandler") { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0104EventDeclarationAddHandlerInAdd, addCall.GetLocation())); } if (removeCall.TryGetMethodName(out var removeName) && removeName != "RemoveHandler") { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0105EventDeclarationRemoveHandlerInRemove, removeCall.GetLocation())); } if (addCall.TryGetArgumentAtIndex(0, out var addArg) && addArg.Expression is IdentifierNameSyntax addIdentifier && removeCall.TryGetArgumentAtIndex(0, out var removeArg) && removeArg.Expression is IdentifierNameSyntax removeIdentifier) { if (addIdentifier.Identifier.ValueText != removeIdentifier.Identifier.ValueText) { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0103EventDeclarationAddRemove, eventDeclaration.Identifier.GetLocation(), addIdentifier.Identifier.ValueText, removeIdentifier.Identifier.ValueText)); } else if (eventDeclaration.Parent is TypeDeclarationSyntax typeDeclaration && BackingFieldWalker.TryGetRegistration(typeDeclaration, addIdentifier.Identifier.ValueText, out var registration) && registration.ArgumentList is { })
private static void Handle(SyntaxNodeAnalysisContext context) { if (!context.IsExcludedFromAnalysis() && context.ContainingSymbol is IEventSymbol eventSymbol && context.Node is EventDeclarationSyntax eventDeclaration && EventDeclarationWalker.TryGetCalls(eventDeclaration, out var addCall, out var removeCall)) { if (addCall.TryGetMethodName(out var addName) && addName != "AddHandler") { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0104EventDeclarationAddHandlerInAdd, addCall.GetLocation())); } if (removeCall.TryGetMethodName(out var removeName) && removeName != "RemoveHandler") { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0105EventDeclarationRemoveHandlerInRemove, removeCall.GetLocation())); } if (addCall.TryGetArgumentAtIndex(0, out var addArg) && addArg.Expression is IdentifierNameSyntax addIdentifier && removeCall.TryGetArgumentAtIndex(0, out var removeArg) && removeArg.Expression is IdentifierNameSyntax removeIdentifier) { if (addIdentifier.Identifier.ValueText != removeIdentifier.Identifier.ValueText) { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0103EventDeclarationAddRemove, eventDeclaration.Identifier.GetLocation(), addIdentifier.Identifier.ValueText, removeIdentifier.Identifier.ValueText)); } else if (BackingFieldWalker.TryGetRegistration(eventDeclaration.Parent as TypeDeclarationSyntax, addIdentifier.Identifier.ValueText, out var registration) && registration.ArgumentList != null) { if (registration.TryGetArgumentAtIndex(0, out var nameARg) && nameARg.TryGetStringValue(context.SemanticModel, context.CancellationToken, out var registeredName) && registeredName != eventSymbol.Name) { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0102EventDeclarationName, eventDeclaration.Identifier.GetLocation(), ImmutableDictionary <string, string> .Empty.Add("ExpectedName", registeredName), registeredName)); } if (registration.TryGetArgumentAtIndex(2, out var handlerTypeArg) && handlerTypeArg.TryGetTypeofValue(context.SemanticModel, context.CancellationToken, out var registeredHandlerType) && !registeredHandlerType.Equals(eventSymbol.Type)) { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0106EventDeclarationUseRegisteredHandlerType, eventDeclaration.Type.GetLocation(), registeredHandlerType.MetadataName)); } } } } }