C# / VB.NET のコンパイラーである Roslyn はライブラリとして扱うこともでき、コード解析などを行うことができる。
その中でメソッドについての情報が格納されるのが IMethodSymbol
だが、以下のような拡張メソッドの場合は、拡張メソッドそのものでは無く、展開した状態のメソッドが返される。
// SyntaxToken は外部依存 (Microsoft.CodeAnalysis) のもの public static bool ToHaveHexadecimalLikeString(this SyntaxToken obj, string prefix = "_", string suffix = "") { // ... } IMethodSymbol symbol = ...; symbol.Dump(); // Microsoft.CodeAnalysis.SyntaxToken.ToHaveHexadecimalLikeString(string, string)
書いている本人としては、 token.ToHaveHexadecimalLikeString()
としているので、自然な表現ではあるのだが、展開したメソッドでは無く、実装しているメソッドそのものが欲しい場合は ReducedFrom
を使うと得られる。
symbol.ReducedFrom.Dump(); // SyntaxTokenExtensions.ToHaveHexadecimalLikeString(Microsoft.CodeAnalysis.SyntaxToken, string, string)
ちなみに (おそらく) すべてがコンパイル対象に含まれている場合は、 ReducedFrom
せずとも実装しているメソッドそのものが得られる。
というメモでした。