2
私はメソッドのパラメータにpostsharp [NotNull]属性を追加するためにRoslynでアナライザーを作成しています。ここでRoslynコードフィックスでメソッドパラメータに属性を追加する
private async Task<Document> MakeNotNullAsync(Document document, MethodDeclarationSyntax method, CancellationToken cancellationToken, string paramName)
{
var parameters = method.ChildNodes().OfType<ParameterListSyntax>().First();
var param = parameters.ChildNodes().OfType<ParameterSyntax>().First() as SyntaxNode;
NameSyntax name = SyntaxFactory.ParseName("NotNull");
AttributeSyntax attribute = SyntaxFactory.Attribute(name, null);
Collection<AttributeSyntax> list = new Collection<AttributeSyntax>();
list.Add(attribute);
var separatedlist = SyntaxFactory.SeparatedList(list);
var newLiteral = SyntaxFactory.AttributeList(separatedlist);
Collection<SyntaxNode> synlist = new Collection<SyntaxNode>();
synlist.Add(newLiteral);
var root = await document.GetSyntaxRootAsync();
var newRoot = root.InsertNodesBefore(param, synlist);
var newDocument = document.WithSyntaxRoot(newRoot);
return newDocument;
は、私がこれまで持っているものである(そしてそこにこれを行うための簡単な方法は間違いである)が、私はそれが()root.InsertNodesBeforeを行おうと「System.InvalidCastExceptionの」を取得しています。これを行うより良い方法はありますか?
メッセージとスタックトレースとはなんですか? – SLaks