public override async Task ComputeRefactoringsAsync(CodeRefactoringContext context)
        {
            var document = context.Document;

            if (document.Project.Solution.Workspace.Kind == WorkspaceKind.MiscellaneousFiles)
            {
                return;
            }
            var span = context.Span;

            if (!span.IsEmpty)
            {
                return;
            }
            var cancellationToken = context.CancellationToken;

            if (cancellationToken.IsCancellationRequested)
            {
                return;
            }
            var model = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);

            if (model.IsFromGeneratedCode(cancellationToken))
            {
                return;
            }
            var root = await model.SyntaxTree.GetRootAsync(cancellationToken).ConfigureAwait(false);

            var token = root.FindToken(span.Start);

            if (!token.IsKind(SyntaxKind.IdentifierToken))
            {
                return;
            }

            var node = token.Parent as VariableDeclaratorSyntax;

            if (node == null)
            {
                return;
            }
            var declaredSymbol = model.GetDeclaredSymbol(node, cancellationToken);

            if (declaredSymbol == null || !declaredSymbol.IsKind(SymbolKind.Event))
            {
                return;
            }
            if (declaredSymbol.ContainingSymbol.IsInterfaceType())
            {
                return;
            }
            var invokeMethod = declaredSymbol.GetReturnType().GetDelegateInvokeMethod();

            if (invokeMethod == null)
            {
                return;
            }

            context.RegisterRefactoring(
                CodeActionFactory.CreateInsertion(
                    span,
                    DiagnosticSeverity.Info,
                    GettextCatalog.GetString("Create event invocator"),
                    t2 =>
            {
                SyntaxNode eventInvocator = CreateEventInvocator(document, declaredSymbol);
                return(Task.FromResult(new InsertionResult(context, eventInvocator, declaredSymbol.ContainingType, declaredSymbol.Locations.First())));
            }
                    )
                );
        }