【发布时间】:2016-04-29 22:10:36
【问题描述】:
我正在编写一个Roslyn Code Analyzer,我想确定async 方法是否不采用CancellationToken,然后建议一个添加它的代码修复:
//Before Code Fix:
public async Task Example(){}
//After Code Fix
public async Task Example(CancellationToken token){}
我已通过检查methodDeclaration.ParameterList.Parameters 连接DiagnosticAnalyzer 以正确报告诊断,但我找不到用于在CodeFixProvider 内将Paramater 添加到ParameterList 的Roslyn API。
这是我目前得到的:
private async Task<Document> HaveMethodTakeACancellationTokenParameter(
Document document, SyntaxNode syntaxNode, CancellationToken cancellationToken)
{
var method = syntaxNode as MethodDeclarationSyntax;
// what goes here?
// what I want to do is:
// method.ParameterList.Parameters.Add(
new ParameterSyntax(typeof(CancellationToken));
//somehow return the Document from method
}
如何正确更新方法声明并返回更新后的Document?
【问题讨论】:
-
我相信你必须替换整个ParameterList,而不是添加一个新参数。我已经有一段时间没有写分析器了!
-
ParamaterList没有设置器 :(。我需要从头开始创建一个新的 MethodDeclaration 吗? -
我想是的。如果你想把这段代码扔到 github 上,我很乐意尝试一下。
标签: c# code-analysis roslyn roslyn-code-analysis