2016-06-28 14 views
0

我目前在訪問中有一個IMethodSymbol,現在我想在此方法中獲取所有使用的類型。這意味着Roslyn - 訪問MethodSymbol中所有使用的類型

  • 聲明,局部變量
  • 給定Methodsymbol內methodcalls,這是returing A型(不System.Void)的ITypeSymbol的ITypeSymbol。
  • 此方法中任何方法調用中的所有參數的ITypeSymbol。

問題是,如果roslyn支持這個優雅的API,或者如果我必須遍歷syntaxtree並在我自己的搜索信息?

回答

1

使用CSharpSyntaxWalker訪問方法體可以很容易地完成這個工作,您可以從變量聲明和調用表達式中收集符號。雖然不是單線,但它應該是一個相當短的類實現與兩個重載的方法。

需要注意的兩件事:首先需要通過DeclaringSyntaxReferencesIMethodSymbol獲取語法樹,以便能夠訪問語法樹。您可以首先從Compilation獲取該語法樹的SemanticModel,然後查詢各個符號,從表達式中獲取各種符號。