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)); } } }