NDependを使用して、特定のメソッドまたはプロパティの直接的および間接的な使用をすべて見つけるにはどうすればよいですか?
特に、 use パスのどこかにあるインターフェースを介して発生する使用法を見つける必要があります。ありがとう!
UIの任意の場所でメソッドを右クリックし、メニューを選択します。[メソッドの選択...> ...私を(直接的または間接的に)使用している場合は、次のようなコードクエリが表示されます。
from m in Methods
let depth0 = m.DepthOfIsUsing("NUnit.Core.NUnitFramework+Assert.GetAssertCount()")
where depth0 >= 0 orderby depth0
select new { m, depth0 }
問題は、そのようなクエリは間接的な使用法を提供しますが、インターフェイス(または基本クラスで宣言されたオーバーライドされたメソッド)を介して発生する呼び出しを検索しないことです。
うまくいけば、あなたが求めているものはこのクエリで取得できます:
// Retrieve the target method by name
let methodTarget = Methods.WithFullName("NUnit.Core.NUnitFramework+Assert.GetAssertCount()").Single()
// Build a ICodeMetric<IMethod,ushort> representing the depth of indirect
// call of the target method.
let indirectCallDepth =
methodTarget.ToEnumerable()
.FillIterative(
methods => methods.SelectMany(
m => m.MethodsCallingMe.Union(m.OverriddensBase)))
from m in indirectCallDepth.DefinitionDomain
select new { m, callDepth = indirectCallDepth[m] }
このクエリの2つの重要な要素は次のとおりです。