2

nDepend が提供する CQL を使用して、アセンブリ内のすべてのメソッドのすべての直接間接メソッド呼び出しを取得しようとしています。問題は、アセンブリ内のすべてのメソッドを反復してこの情報を取得できないことです。

DepthOfIsUsedBy は文字列型のみを許可し、文字列のコレクションは許可しません。

アセンブリ内のすべてのメソッドについてこの情報を取得する方法はありますか?

4

1 に答える 1

0

DepthOfIsUsedBy()の代わりにメソッドDepthOfIsUsing()使用するのはどうですか:o)

from m in Assemblies.WithNameNotIn("nunit.uikit").ChildMethods() 
let depth0 = m.DepthOfIsUsing("nunit.uikit")
where depth0  >= 0 orderby depth0
select new { m, depth0 }

このクエリは、以下のメニューから生成されました。(ところで、より洗練されたソリューションは、魔法のメソッドFillIterative()で作成できますが、ここでは必要ありません)。

ここに画像の説明を入力してください


Prasadのコメントを考慮して、Bの各メソッドについて、Aからのすべての直接および間接の呼び出し元をリストするこのクエリを試してみてはどうでしょうか。

from m in Assemblies.WithNameIn("AsmB").ChildMethods()
where m.IsPubliclyVisible // Optimization
let indirectcallers = m.MethodsCallingMe
                      .FillIterative(
                          callers => callers.SelectMany(m1 => m1.MethodsCallingMe))
                      .DefinitionDomain
                      .Where(m1 => m1.ParentAssembly.Name == "AsmA")
                      .ToArray()  // Avoid double enumeration
where indirectcallers.Length > 0
orderby indirectcallers.Length descending
select new { m, indirectcallers }
于 2012-11-16T14:58:29.243 に答える