public static ISymbol GetBaseSymbolOrDefault(SyntaxNode node, SemanticModel semanticModel, CancellationToken cancellationToken)
        {
            ISymbol symbol = GetDeclaredSymbol();

            if (symbol != null)
            {
                if (!symbol.IsOverride)
                {
                    return(symbol);
                }

                symbol = symbol.BaseOverriddenSymbol();

                if (symbol != null)
                {
                    SyntaxNode syntax = symbol.GetSyntaxOrDefault(cancellationToken);

                    if (syntax != null)
                    {
                        if (syntax is MemberDeclarationSyntax ||
                            syntax.Kind() == SyntaxKind.VariableDeclarator)
                        {
                            return(symbol);
                        }
                    }
                }
            }

            return(null);

            ISymbol GetDeclaredSymbol()
            {
                if (node is EventFieldDeclarationSyntax eventFieldDeclaration)
                {
                    VariableDeclaratorSyntax declarator = eventFieldDeclaration.Declaration?.Variables.SingleOrDefault(shouldThrow: false);

                    if (declarator != null)
                    {
                        return(semanticModel.GetDeclaredSymbol(declarator, cancellationToken));
                    }

                    return(null);
                }
                else
                {
                    return(semanticModel.GetDeclaredSymbol(node, cancellationToken));
                }
            }
        }