免責事項
明らかな何かが欠けていることは確かですが、公式のドキュメントを読んだ後でも、Roslynが構文ツリーを作成する方法を明確に理解していません。
例
次の単純なコードについて考えてみます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace aopsample
{
class UsbReadWriter
{
public bool ReadFromUsb()
{
return true;
}
public virtual bool WriteToUsb()
{
return true;
}
}
}
私SyntaxTree
はこのコードのためにを取得し、このようなものを非常にラフでシンプルに作成しますが、理解する必要があります。
string[]lines = System.IO.File.ReadAllLines(filename);
string tocompile = string.Join(string.Empty, lines);
SyntaxNode root = tree.GetRoot(new CancellationToken());
foreach (SyntaxNode sn in root.ChildNodes())
{
if (sn.Kind == SyntaxKind.NamespaceDeclaration)
{
//I get a namespace, so it's Child node just will be class
foreach (SyntaxNode sname in sn.ChildNodes())
{
if (sname.Kind == SyntaxKind.ClassDeclaration)
{
//I get class, so it's Children will be methods of the class
foreach (SyntaxNode sclass in sname.ChildNodes()) // **{1}**
{
if (sclass.Kind == SyntaxKind.MethodDeclaration)
{
}
}
}
}
そして、それはかなりうまく機能します。
問題
ただし、 ReadFromUsb()
メソッドにコメントを追加するだけで、次のようになります。
/// <summary>
/// Reads a data from Usb
/// </summary>
/// <returns></returns>
public bool ReadFromUsb()
{
return true;
}
そしてChildNodes()
、{1}マークの付いた行を呼び出します。CLASS(???)は0を返します。
質問
メンバー関数にコメントを追加すると、親のCLASS子の構文ノードのコレクションがリセットされるのはなぜですか?
私は何が欠けていますか?