Próbuję użyć Roslyn do określenia publicznie eksponowanego interfejsu API projektu (a następnie wykonać dalsze przetwarzanie przy użyciu tych informacji, więc nie mogę po prostu użyć refleksji). Używam SyntaxWalker do odwiedzenia węzłów składni deklaracji i wywoływania IModel.GetDeclaredSymbol dla każdego. Wydaje się, że działa to dobrze dla metod, właściwości i typów, ale wydaje się, że nie działa na polach. Moje pytanie brzmi: w jaki sposób uzyskać FieldSymbol dla węzła FieldDeclarationSyntax?Jak uzyskać Roslyn FieldSymbol z węzła FieldDeclarationSyntax?
Oto kod pracuję z:
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);
}
Dziękuję, również tęskniłem za tym, mimo że jest to dość oczywiste :) – pyrocumulus
Dotyczy również lokalnych deklaracji var. – JamesFaix