Псевдокод для моего анализатора
Мой тестовый класс:
public class TestClass
{
~TestClass()
{
}
}
Мой диагностический анализатор с методом анализа:
public class TestClassAnalyzer : DiagnosticAnalyzer
{
public const string AnalyzerId = "TestId";
...
private static void AnalyzeSymbol(SymbolAnalysisContext context)
{
var methodDeclaration = (IMethodSymbol)context.Symbol;
if (methodDeclaration.MethodKind == MethodKind.Destructor)
{
return;
}
context.ReportDiagnostic(Diagnostic.Create(...));
}
}
Мой поставщик исправлений кода сметод исправления:
public class TestClassCodeFixProvider : CodeFixProvider
{
public sealed override ImmutableArray<string> FixableDiagnosticIds =>
ImmutableArray.Create(TestClassAnalyzer.AnalyzerId);
...
private async Task<Solution> PerformFixAsync(Document document, ...)
{
...
return await Renamer.RenameSymbolAsync(...)
}
}
Если я ставлю точку останова после строки с проверкой деструктора внутри своего класса TestClassAnalyzer, то мой код никогда не останавливается / не прерывается, что имеет смысл для меня, потому что я выпрыгиваю из метода с возвратомключевое слово.Тем не менее, мое исправление кода запускается (я могу поместить точку останова в метод PerformFixAnync, и код останавливается / прерывается там), и я вижу красный волнистый характер.
Кто-нибудь имеет представление о том, почему исправление кода запускается, хотя не должно?