private static void AnalyzeEventAssignmentMethod([NotNull] IMethodReferenceOperation binding,
                                                         [NotNull] PortableEventAssignmentOperation assignment, OperationAnalysisContext context)
        {
            if (assignment.EventReference != null)
            {
                string eventTargetName     = GetEventTargetName(assignment.EventReference, binding.Method);
                string handlerNameExpected = string.Concat(eventTargetName, "On", assignment.EventReference.Event.Name);

                string handlerNameActual = binding.Method.Name;
                if (handlerNameActual != handlerNameExpected)
                {
                    context.ReportDiagnostic(Diagnostic.Create(Rule, binding.Syntax.GetLocation(), binding.Method.GetKind(),
                                                               handlerNameActual, assignment.EventReference.Event.Name, handlerNameExpected));
                }
            }
        }
        private static void AnalyzeEventAssignment(OperationAnalysisContext context)
        {
            var assignment = new PortableEventAssignmentOperation((IEventAssignmentOperation)context.Operation);

            if (!assignment.Adds)
            {
                return;
            }

            var delegateCreation = assignment.HandlerValue as IDelegateCreationOperation;
            var reference        = delegateCreation?.Target as IMethodReferenceOperation;

            if (reference?.Method != null)
            {
                AnalyzeEventAssignmentMethod(reference, assignment, context);
            }
        }