如何从 FieldDeclarationSyntax 节点获取 Roslyn FieldSymbol?
How to get a Roslyn FieldSymbol from a FieldDeclarationSyntax node?
我正在尝试使用 Roslyn 来确定项目的公开公开 API(然后使用此信息做一些进一步的处理,所以我不能只使用反射)。我正在使用 SyntaxWalker 访问声明语法节点,并为每个节点调用 IModel.GetDeclaredSymbol。这似乎适用于方法、属性和类型,但似乎不适用于字段。我的问题是,如何获取 FieldDeclarationSyntax 节点的 FieldSymbol?
这是我正在使用的代码:
public override void VisitFieldDeclaration(FieldDeclarationSyntax node)
{
var model = this._compilation.GetSemanticModel(node.SyntaxTree);
var symbol = model.GetDeclaredSymbol(node);
if (symbol != null
&& symbol.CanBeReferencedByName
// this is my own helper: it just traverses the publ
&& symbol.IsExternallyPublic())
{
this._gatherer.RegisterPublicDeclaration(node, symbol);
}
base.VisitFieldDeclaration(node);
}
您需要记住,字段声明语法可以声明多个 字段。所以你想要:
foreach (var variable in node.Declaration.Variables)
{
var fieldSymbol = model.GetDeclaredSymbol(variable);
// Do stuff with the symbol here
}
我正在尝试使用 Roslyn 来确定项目的公开公开 API(然后使用此信息做一些进一步的处理,所以我不能只使用反射)。我正在使用 SyntaxWalker 访问声明语法节点,并为每个节点调用 IModel.GetDeclaredSymbol。这似乎适用于方法、属性和类型,但似乎不适用于字段。我的问题是,如何获取 FieldDeclarationSyntax 节点的 FieldSymbol?
这是我正在使用的代码:
public override void VisitFieldDeclaration(FieldDeclarationSyntax node)
{
var model = this._compilation.GetSemanticModel(node.SyntaxTree);
var symbol = model.GetDeclaredSymbol(node);
if (symbol != null
&& symbol.CanBeReferencedByName
// this is my own helper: it just traverses the publ
&& symbol.IsExternallyPublic())
{
this._gatherer.RegisterPublicDeclaration(node, symbol);
}
base.VisitFieldDeclaration(node);
}
您需要记住,字段声明语法可以声明多个 字段。所以你想要:
foreach (var variable in node.Declaration.Variables)
{
var fieldSymbol = model.GetDeclaredSymbol(variable);
// Do stuff with the symbol here
}