Я пишу правило анализа кода, которое должно проверить следующее:
- Если класс является производным от
IInterface
- Если это так, убедитесь, что он содержит метод
MyMethod
- Вызывает ли этот метод
Foo
?
По сути, каждый класс, производный от IInterface
, должен иметь MyMethod
и должен вызывать Foo
.
Это действительно просто сделать, я просто зарегистрирую свой анализатор как SyntaxKind.ClassDeclarationSyntax
. Там я проверю, является ли класс производным от IInterface
, и проверим, есть ли MyMethod
.
НО, что если MyMethod
вызывает, скажем, SomeFunction
, который вызывает Foo
? Таким образом, MyMethod
не вызывает Foo
напрямую, а вызывает SomeFunction
, что вызывает то, что нам нужно.
На мой взгляд, лучший способ - просто перебирать все вызовы методов / создания объектов / эт c. в MyMethod
, а затем go к определению каждого из этих методов / конструкторов / et c. и поиск Foo
call (Да, это может быть тяжелым для производительности, но все же мне это нужно (или, может быть, вы можете порекомендовать другой способ)).
Но вот проблема и мой главный вопрос :
Как я могу получить определение / реализацию Символа, который я нажал?
Я пробовал SymbolFinder
и все его методы, например, FindDefinition
, FindImplementation
, et c. Но это не работает (я не знаю, работает ли оно на самом деле, просто у меня нет Solution
).
Что я могу сделать? Спасибо!