public static void Analyze(SyntaxNodeAnalysisContext context, AssignmentExpressionSyntax assignment) { ExpressionSyntax right = assignment.Right; if (right?.IsKind(SyntaxKind.ObjectCreationExpression) == true) { var objectCreation = (ObjectCreationExpressionSyntax)right; SemanticModel semanticModel = context.SemanticModel; CancellationToken cancellationToken = context.CancellationToken; ITypeSymbol typeSymbol = semanticModel.GetTypeSymbol(objectCreation, cancellationToken); if (typeSymbol != null && SymbolUtility.IsEventHandlerOrConstructedFromEventHandlerOfT(typeSymbol, semanticModel)) { ArgumentListSyntax argumentList = objectCreation.ArgumentList; if (argumentList != null) { SeparatedSyntaxList <ArgumentSyntax> arguments = argumentList.Arguments; if (arguments.Count == 1) { ArgumentSyntax argument = arguments.First(); ExpressionSyntax expression = argument.Expression; if (expression != null && semanticModel.GetSymbol(expression, cancellationToken) is IMethodSymbol) { ExpressionSyntax left = assignment.Left; if (left?.IsMissing == false && semanticModel.GetSymbol(left, cancellationToken)?.IsEvent() == true && !objectCreation.SpanContainsDirectives()) { context.ReportDiagnostic(DiagnosticDescriptors.RemoveRedundantDelegateCreation, right); context.ReportToken(DiagnosticDescriptors.RemoveRedundantDelegateCreationFadeOut, objectCreation.NewKeyword); context.ReportNode(DiagnosticDescriptors.RemoveRedundantDelegateCreationFadeOut, objectCreation.Type); context.ReportParentheses(DiagnosticDescriptors.RemoveRedundantDelegateCreationFadeOut, objectCreation.ArgumentList); } } } } } } }