Унаследованные зависимости метода с использованием NDepend - PullRequest
2 голосов
/ 22 сентября 2009

Браузер классов NDepend , по-видимому, не имеет возможности для обнаружения унаследованных методов .

У нас есть сценарий, в котором у нас есть тысячи однокорневых объектов модели , которые, например, происходят от RootModel Только RootModel определяет Save () . Как сформировать запрос для поиска всех случаев, когда SampleModel (: RootModel) вызывает Save () ?

SELECT METHODS WHERE IsUsing "SampleModel.Save()" ORDER BY DepthOfIsUsing

... отклонено: Недопустимое имя сборки, пространства имен, типа, метода или поля .

Это, кажется, лучшее приближение, но не точное:

SELECT METHODS WHERE IsUsing "SampleModel" AND IsUsing "RootModel.Save()" ORDER BY DepthOfIsUsing

Это кажется довольно серьезным ограничением, нет? Какой обходной путь?

1 Ответ

1 голос
/ 23 сентября 2009

С статической точки зрения NDepend класс SampleModel не объявляет метод Save(). Вот почему первый запрос не компилируется.

Второй запрос действительно полезен в вашем случае. Чтобы сделать это правильно, вы можете использовать Code Query on LINQ (возможности CQLinq) и переписать его так:

from m in Application.Types.Where(t => t.DeriveFrom("MyNamespace.RootModel"))
         .ChildMethods()
where m.IsUsing("MyNamespace.RootModel.Save()")
select new { m, m.ParentType }
...