2012-08-30 8 views
8

が、私はこのようになりますソースファイルを持っていると仮定すると検索。 VisitIdentifierNameメソッドでは、識別子が現在のクラスのメンバーを参照しているかどうかを調べるために、セマンティックモデルで識別子をルックアップします。セマンティックモデル内の識別子

これは私がこれまで持っているものです。

public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node) 
{ 
    SemanticModel model = this.compilation.GetSemanticModel(this.src); 
    // ?? look up identifier in compilation here ?? 
    return base.VisitIdentifierName(node); 
} 

私はsymanticモデルに識別子をルックアップするために離れて見つけることができませんが - IdentifierNameSyntaxを受け入れるSemanticModel.GetDeclaredSymbol方式の過負荷はありません。

どうすればいいですか?

答えて

9

SemanticModel.GetSymbolInfo(この具体例の場合はIdentifierNameSyntax)を使用してください。

GetDeclaredSymbolは、上記の宣言点(上記int field;)からシンボルに進むためのものです。コンパイラのバインディングロジックを実行し、特定の式がバインドするシンボルを確認するには、GetSymbolInfoを使用します。

+0

ありがとうKevin、どう見落としているのかわかりません。私にとってはまったく新しいものがありますね! – Grokys

+0

ええと、これはRoslynの現在のプレビュー版では壊れているようです。サンプルプロジェクト=> ConvertToAutoPropertyCS => PropertyRewriterの内部=> VisitFieldDeclaration(FieldDeclarationSyntaxフィールド)フィールドパラメータのシンボルを取得する方法はありません。 – mynkow

+0

フィールド宣言で複数のシンボルを宣言できるため、実際にはVariableDeclaratorSyntaxを使用する必要があります。 –