Я пытаюсь реализовать ICodeIssueProvider
, чтобы определить, имеет ли класс (или один из его базовых типов) определенный атрибут или нет.Поиск атрибутов базового типа
public IEnumerable<CodeIssue> GetIssues(IDocument document,
CommonSyntaxNode node,
CancellationToken cancellationToken)
{
var methodDeclaration = (MethodDeclarationSyntax)node;
var semanticModel = document.GetSemanticModel(cancellationToken);
var methodSymbol = semanticModel.GetDeclaredSymbol(methodDeclaration);
var typeSymbol = methodSymbol.ContainingType;
// The following only gets attributes declared on this class, how to
// also include those declared on a base class ?
var attributes = typeSymbol.GetAttributes();
Есть ли лучший способ, чем ходьба typeSymbol.BaseType
весь путь к System.Object
и призывая GetAttributes()
на пути?
Также, есть лучший способ проверить, если typeSymbol
происходит от определенного класса, чем ходьба .BaseType
и проверки вручную
(И да, есть причина, не видна из образца ниже для проверки MethodDeclarationSyntax
узлов и не ClassDeclarationSyntax
)