C# Roslyn Analyzer Get Defenition / Реализация методов / Конструкторы / И т.д. - PullRequest
2 голосов
/ 14 января 2020

Я пишу правило анализа кода, которое должно проверить следующее:

  1. Если класс является производным от IInterface
  2. Если это так, убедитесь, что он содержит метод MyMethod
  3. Вызывает ли этот метод 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).

Что я могу сделать? Спасибо!

...