我的分析仪的伪代码
我的考试班:
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类中的带检查析构函数的行后放置一个断点,则我的代码永不停止/中断,这对我来说很有意义,因为我跳出了带有return关键字的方法。 但是,我的代码修复程序已被触发(我可以将断点放在PerformFixAnync方法内,并在其中停止/中断代码),并且可以看到红色的波浪状。
有人知道为什么要启动代码修复程序吗?
答案 0 :(得分:0)
我猜您的分析仪由于条件错误而早日返回了描述者:
if (methodDeclaration.MethodKind == MethodKind.Destructor)
{
return;
}
context.ReportDiagnostic(Diagnostic.Create(...));
否定条件或在then块中报告条件:
if (methodDeclaration.MethodKind != MethodKind.Destructor)
{
return;
}
context.ReportDiagnostic(Diagnostic.Create(...));
答案 1 :(得分:0)
原来,我的解决方案包含一个埋在文件夹之间某个地方的类,其中包含一些旧代码而没有析构函数检查条件,这引起了麻烦。此类不是TFS中源事件的一部分...